8.2. 직접 인증을 위해 외부 OIDC ID 공급자 구성


외부 OIDC ID 공급자를 직접 사용하여 인증을 위한 토큰을 발행하도록 OpenShift Container Platform을 구성할 수 있습니다.

중요

OIDC ID 공급자를 통한 직접 인증은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

사전 요구 사항

  • TechPreviewNoUpgrade 기능 세트를 활성화했습니다.
  • 외부 인증 공급자를 구성했습니다.

    이 절차에서는 Keycloak을 ID 공급자로 사용하고 다음 클라이언트가 구성되어 있다고 가정합니다.

    • https://<openshift_console_route>/auth/callback으로 설정된 유효한 리디렉션 URI가 있는 console-test라는 웹 콘솔용 비공개 클라이언트
    • http://localhost:8080로 설정된 유효한 리디렉션 URI를 사용하여 oc-cli-test라는 OpenShift CLI (oc)의 공용 클라이언트
  • 클러스터의 설치 프로그램에서 생성한 kubeconfig 파일에 액세스할 수 있습니다.
  • 인증을 위해 내장 OAuth 서버를 사용하여 되돌리야 하는 경우 기존 인증 구성을 백업했습니다.

프로세스

  1. 설치 프로그램에서 생성된 kubeconfig 파일 또는 다른 장기 로그인 방법을 클러스터 관리자로 사용하고 있는지 확인합니다.
  2. 다음 명령을 실행하여 웹 콘솔로 인증할 수 있는 보안을 생성합니다.

    $ oc create secret generic console-secret \
        --from-literal=clientSecret=<secret_value> \
    1
    
        -n openshift-config
    Copy to Clipboard Toggle word wrap
    1
    & lt;secret_value >를 ID 공급자의 console-test 클라이언트의 보안 값으로 바꿉니다.
  3. 선택 사항: 다음 명령을 실행하여 공급자의 인증 기관 번들이 포함된 구성 맵을 생성합니다.

    $ oc create configmap keycloak-oidc-ca --from-file=ca-bundle.crt=my-directory/ca-bundle.crt \
    1
    
        -n openshift-config
    Copy to Clipboard Toggle word wrap
    1
    공급자의 ca-bundle.crt 파일의 경로를 지정합니다.
  4. 다음 명령을 실행하여 인증 구성을 편집합니다.

    $ oc edit authentication.config/cluster
    Copy to Clipboard Toggle word wrap
  5. type 필드를 OIDC 로 설정하고, 공급자의 oidcProviders 필드를 구성하고, webhookTokenAuthenticator 필드를 null 로 설정하여 인증 구성을 업데이트합니다.

    apiVersion: config.openshift.io/v1
    kind: Authentication
    metadata:
    # ...
    spec:
      oidcProviders: 
    1
    
      - claimMappings:
          groups:
            claim: groups 
    2
    
            prefix: 'oidc-groups-test:'
          username:
            claim: email 
    3
    
            prefixPolicy: Prefix
            prefix:
              prefixString: 'oidc-user-test:'
        issuer:
          audiences: 
    4
    
          - console-test
          - oc-cli-test
          issuerCertificateAuthority:
            name: keycloak-oidc-ca 
    5
    
          issuerURL: https://keycloak-keycloak.apps.example.com/realms/master 
    6
    
        name: 'keycloak-oidc-server' 
    7
    
        oidcClients:
        - clientID: oc-cli-test 
    8
    
          componentName: cli
          componentNamespace: openshift-console
        - clientID: console-test 
    9
    
          clientSecret:
            name: console-secret 
    10
    
          componentName: console
          componentNamespace: openshift-console
      type: OIDC 
    11
    
      webhookTokenAuthenticator: null 
    12
    Copy to Clipboard Toggle word wrap
    1
    OIDC 공급자 구성입니다. 현재는 하나의 OIDC 공급자 구성만 허용됩니다.
    2
    클러스터 ID에 대한 그룹 이름을 구성하는 클레임의 이름입니다.
    3
    클러스터 ID의 사용자 이름을 구성하는 클레임의 이름입니다.
    4
    이 인증 공급자가 토큰을 발행하는 대상 목록입니다.
    5
    ca-bundle.crt 키가 포함된 구성 맵의 이름입니다. 설정되지 않은 경우 시스템 신뢰가 대신 사용됩니다.
    6
    토큰 발행자의 URL입니다.
    7
    외부 OIDC 공급자의 이름입니다.
    8
    공급자가 OpenShift CLI(oc)에 사용하는 클라이언트 ID입니다.
    9
    공급자가 OpenShift Container Platform 웹 콘솔에 사용하는 클라이언트 ID입니다.
    10
    콘솔 클라이언트의 시크릿 값을 저장하는 시크릿의 이름입니다.
    11
    외부 OIDC ID 공급자를 사용하도록 지정하려면 OIDC로 설정해야 합니다.
    12
    typeOIDC 로 설정된 경우 null 로 설정해야 합니다.

    사용 가능한 모든 매개변수에 대한 자세한 내용은 "OIDC 공급자 구성 매개변수"를 참조하십시오.

  6. 변경 사항을 종료하고 저장하여 새 구성을 적용합니다.
  7. 클러스터가 모든 노드에 새 버전을 롤아웃할 때까지 기다립니다.

    1. 다음 명령을 실행하여 Kubernetes API 서버 Operator 상태를 확인합니다.

      $ oc get co kube-apiserver
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME             VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
      kube-apiserver   4.19.0    True        True          False      85m     NodeInstallerProgressing: 2 node are at revision 8; 1 node is at revision 10
      Copy to Clipboard Toggle word wrap

      위 예제의 메시지는 하나의 노드가 새 버전으로 진행되었으며 두 노드가 아직 업데이트되지 않았음을 보여줍니다. 클러스터 크기에 따라 모든 노드에 새 버전을 롤아웃하는 데 20분 이상 걸릴 수 있습니다.

    2. 문제를 해결하려면 Cluster Authentication Operator 및 kube-apiserver Pod 로그에서 오류가 있는지 확인할 수도 있습니다.

검증

  1. ID 공급자로 인증하여 OpenShift CLI(oc)에 로그인할 수 있는지 확인합니다.

    1. 다음 명령을 실행하여 로그인합니다.

      $ oc login --exec-plugin=oc-oidc \
      1
      
          --issuer-url=https://keycloak-keycloak.apps.example.com/realms/master \
      2
      
          --client-id=oc-cli-test \
      3
      
          --extra-scopes=email --callback-port=8080 \
          --oidc-certificate-authority my-directory/ca-bundle.crt 
      4
      Copy to Clipboard Toggle word wrap
      1
      oc-oidc 를 exec 플러그인 유형으로 지정합니다. oc-oidc 의 값만 허용됩니다.
      2
      ID 공급자의 발행자 URL을 지정합니다.
      3
      OpenShift CLI(oc)의 클라이언트 ID를 지정합니다.
      4
      로컬 머신의 ca-bundle.crt 파일의 경로를 지정합니다.

      출력 예

      Please visit the following URL in your browser: http://localhost:8080
      Copy to Clipboard Toggle word wrap

    2. 브라우저에서 http://localhost:8080 를 엽니다.
    3. ID 공급자의 인증 정보로 인증합니다.

      성공적으로 인증한 후 터미널에 다음 출력과 유사한 메시지가 표시됩니다.

      Logged into "https://api.my-cluster.example.com:6443" as "oidc-user-test:user1@example.com" from an external oidc issuer.
      Copy to Clipboard Toggle word wrap
  2. ID 공급자로 인증하여 OpenShift Container Platform 웹 콘솔에 로그인할 수 있는지 확인합니다.

    1. 브라우저에서 클러스터의 웹 콘솔 URL을 엽니다.

      로그인할 ID 공급자로 리디렉션됩니다.

    2. ID 공급자의 인증 정보로 인증합니다.

      성공적으로 로그인하여 OpenShift Container Platform 웹 콘솔로 리디렉션되었는지 확인합니다.

8.2.1. OIDC 공급자 구성 매개변수

다음 표에는 직접 인증에 사용 가능한 모든 OIDC 공급자 매개변수가 나열되어 있습니다.

Expand
표 8.1. oidcProviders 구성
매개변수설명

claimMappings

ID 공급자가 발행한 JWT 토큰의 클레임을 클러스터 ID로 변환하는 데 Kubernetes API 서버에서 사용할 규칙을 구성합니다.

claimMappings.groups

ID 공급자가 발행한 JWT 토큰의 클레임에서 클러스터 ID 그룹을 구성하는 방법을 구성합니다. 클레임을 참조할 때 클레임이 JWT 토큰에 있는 경우 해당 값은 쉼표로 구분된 그룹 목록이어야 합니다.

claimMappings.groups.claim

이 매핑과 연결된 클러스터 ID 필드에 값이 할당된 JWT 토큰 클레임을 구성합니다.

claimMappings.groups.prefix

JWT 클레임을 클러스터 ID 속성에 매핑하는 프로세스 중에 클러스터 ID 속성에 적용되는 접두사를 구성합니다.

claimMappings.username

ID 공급자가 발행한 JWT 토큰의 클레임에서 클러스터 ID의 사용자 이름을 구성하는 방법을 구성합니다.

claimMappings.username.claim

이 매핑과 연결된 클러스터 ID 필드에 값이 할당된 JWT 토큰 클레임을 구성합니다.

claimMappings.username.prefix

JWT 클레임 값보다 앞에 추가해야 하는 접두사를 구성합니다. prefixPolicyPrefix 로 설정된 경우 설정해야 하며, 그렇지 않은 경우 설정되지 않아야 합니다.

claimMappings.username.prefix.prefixString

JWT 클레임을 클러스터 ID 속성에 매핑하는 프로세스 중에 클러스터 ID 사용자 이름 속성에 적용되는 접두사를 구성합니다. 빈 문자열("")이 아니어야 합니다.

claimMappings.username.prefixPolicy

claim 필드에 지정된 JWT 클레임의 값에 접두사를 어떻게 적용할지 구성합니다. 허용되는 값은 Prefix,NoPrefix, omitted(제공되지 않거나 빈 문자열)입니다.

Prefix 로 설정하면 prefix 필드에 지정된 값이 JWT 클레임의 값에 추가됩니다. prefixPolicyPrefix 인 경우 prefix 필드를 설정해야 합니다.

NoPrefix 로 설정하면 JWT 클레임의 값에 접두사가 앞에 추가되지 않습니다.

생략하면, 이는 의견이 없으며 플랫폼은 시간이 지남에 따라 변경될 수 있는 적용된 접두사를 선택할 수 있음을 의미합니다.

현재 플랫폼은 클레임이 email이 아닌 경우, JWT 클레임 값 앞에 {issuerURL}#을 추가합니다.

claimValidationRules

Kubernetes API 서버에서 ID 공급자가 발행한 JWT 토큰의 클레임을 검증하는 데 사용할 규칙을 구성합니다. 검증 규칙은 AND 작업으로 결합됩니다.

claimValidationRules.requiredClaim

Kubernetes API 서버가 수신 JWT가 이 ID 공급자에 유효한지 확인하는 데 사용하는 필수 클레임 및 값을 구성합니다.

claimValidationRules.requiredClaim.claim

필요한 클레임의 이름을 구성합니다. JWT 클레임에서 가져온 경우 클레임은 문자열 값이어야 합니다. 빈 문자열("")이 아니어야 합니다.

claimValidationRules.requiredClaim.requiredValue

들어오는 JWT 클레임에서 가져올 때 클레임 해야 하는 값을 구성합니다. JWT 클레임의 값이 일치하지 않으면 인증에 대한 토큰이 거부됩니다. 빈 문자열("")이 아니어야 합니다.

claimValidationRules.type

검증 규칙 유형을 구성합니다. 허용되는 값은 RequiredClaim 및 omitted(제공되지 않거나 빈 문자열)입니다.

RequiredClaim 으로 설정하면 들어오는 JWT에 필요한 클레임이 포함되어 있고 해당 값이 필수 값과 일치하는지 검증하도록 Kubernetes API 서버가 구성됩니다. 기본값은 RequiredClaim 입니다.

issuer

플랫폼이 ID 공급자와 상호 작용하는 방법 및 ID 공급자에서 발행한 토큰을 Kubernetes API 서버에서 평가하는 방법을 구성하는 필수 필드입니다.

issuer.audiences

ID 공급자가 발행한 JWT 토큰을 구성하는 필수 필드를 발행해야 합니다. 하나 이상의 항목은 JWT 토큰의 aud 클레임과 일치해야 합니다. 하나 이상의 항목이 포함되어야 하며 10개의 항목을 초과해서는 안 됩니다.

issuer.issuerCertificateAuthority

검색 정보를 가져올 때 Kubernetes API 서버에서 사용하는 인증 기관을 구성하여 ID 공급자에 대한 연결을 검증합니다. 지정하지 않으면 시스템 신뢰가 사용됩니다. 지정된 경우 구성 맵의 data 필드에 있는 ca-bundle.crt 키 아래에 PEM 인코딩 CA 인증서가 포함된 openshift-config 네임스페이스의 구성 맵을 참조해야 합니다.

issuer.issuerCertificateAuthority.name

참조된 구성 맵의 이름입니다.

issuer.issuerURL

ID 공급자가 토큰을 발행하는 데 사용되는 URL을 구성합니다. Kubernetes API 서버는 구성된 ID 공급자의 issuerURL과 JWT의 iss claim와 일치하여 인증 토큰을 처리하는 방법을 결정합니다. 이 필드는 필수이며 https:// 스키마를 사용해야 합니다.

name

ID 공급자와 관련된 사람이 읽을 수 있는 고유 식별자를 구성하는 필수 필드입니다. 이는 여러 ID 공급자를 구분하는 데 사용되며 토큰 검증 또는 인증 메커니즘에 영향을 미치지 않습니다. 빈 문자열("")이 아니어야 합니다.

oidcClients

플랫폼 클라이언트가 ID 공급자의 토큰을 요청해야 하는 클러스터상의 방법을 구성합니다. 항목이 20개를 초과해서는 안 되며 항목에는 네임스페이스/이름 쌍이 있어야 합니다.

oidcClients.clientID

플랫폼 구성 요소에서 ID 공급자에 대한 인증 요청에 사용하는 ID 공급자의 클라이언트 ID를 구성합니다. ID 공급자는 플랫폼 구성 요소에 이 식별자를 수락하여 ID 공급자를 인증 모드로 사용할 수 있어야 합니다. 빈 문자열("")이 아니어야 합니다.

oidcClients.clientSecret

ID 공급자에 대한 인증 요청을 수행할 때 플랫폼 구성 요소에서 사용하는 클라이언트 시크릿을 구성합니다.

지정하지 않으면 ID 공급자에 인증 요청을 수행할 때 클라이언트 시크릿이 사용되지 않습니다.

지정된 경우 .data 필드의 clientSecret 키에 클라이언트 시크릿을 포함하는 openshift-config 네임스페이스의 시크릿을 참조합니다. 클라이언트 시크릿은 ID 공급자에 대한 인증 요청을 수행할 때 사용됩니다.

공용 클라이언트에는 클라이언트 시크릿이 필요하지 않지만 개인 클라이언트는 ID 공급자와 함께 작업하는 데 클라이언트 시크릿이 필요합니다.

oidcClients.clientSecret.name

참조된 보안의 이름입니다.

oidcClients.componentName

ID 공급자를 인증 모드로 사용하도록 구성 중인 플랫폼 구성 요소의 이름을 지정합니다. 구성 요소Namespace 와 함께 고유 식별자로 사용됩니다. 빈 문자열("")이 아니어야 하며 256자를 초과해서는 안 됩니다.

oidcClients.componentNamespace

ID 공급자를 인증 모드로 사용하도록 구성 중인 플랫폼 구성 요소를 지정하는 네임스페이스를 지정합니다. componentName 과 함께 고유 식별자로 사용됩니다. 빈 문자열("")이어야 하며 63자를 초과해서는 안 됩니다.

oidcClients.extraScopes

ID 공급자에 대한 인증 요청을 수행할 때 플랫폼 구성 요소에서 요청해야 하는 추가 범위를 구성합니다. 이 기능은 표준 OIDC 범위 이외의 특정 범위가 요청되어야 하는 클레임 매핑을 구성한 경우에 유용합니다. 생략하면 추가 범위가 요청되지 않습니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat