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


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

중요

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
    <secret_value>를 ID 공급자의 콘솔 테스트 클라이언트에 대한 비밀번호 값으로 바꾸세요.
  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. 유형 필드를 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
    유형이 OIDC 로 설정된 경우 null 로 설정해야 합니다.

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

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

    1. 다음 명령을 실행하여 Kubernetes API 서버 운영자 상태를 확인하세요.

      $ 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
      exec 플러그인 유형으로 oc-oidc를 지정합니다. 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. 신원 제공자의 자격 증명을 사용하여 인증합니다.

      성공적으로 인증되면 터미널에 다음 출력과 비슷한 메시지가 표시됩니다.

      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. 신원 제공자의 자격 증명을 사용하여 인증합니다.

      성공적으로 로그인했고 OpenShift Container Platform 웹 콘솔로 리디렉션되었는지 확인하세요.

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

다음 표는 직접 인증에 사용할 수 있는 모든 OIDC 공급자 매개변수를 나열합니다.

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

claimMappings

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

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 , 생략(제공되지 않거나 빈 문자열)입니다.

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

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

생략하면 의견이 없다는 뜻이며, 플랫폼이 적용할 접두사를 선택하게 되며 이는 시간이 지남에 따라 변경될 수 있습니다.

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

claimValidationRules

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

claimValidationRules.requiredClaim

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

claimValidationRules.requiredClaim.claim

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

claimValidationRules.requiredClaim.requiredValue

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

claimValidationRules.type

검증 규칙의 유형을 구성합니다. 허용되는 값은 RequiredClaim 이며 생략됩니다(제공되지 않거나 빈 문자열).

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

issuer

플랫폼이 ID 공급자와 상호 작용하는 방식과 ID 공급자로부터 발급된 토큰이 Kubernetes API 서버에서 평가되는 방식을 구성하는 필수 필드입니다.

issuer.audiences

ID 공급자가 발급한 JWT 토큰을 발급해야 하는 허용 대상을 구성하는 필수 필드입니다. 최소한 하나의 항목이 JWT 토큰의 aud 클레임과 일치해야 합니다. 최소한 1개의 항목이 포함되어야 하며 10개를 초과할 수 없습니다.

issuer.issuerCertificateAuthority

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

issuer.issuerCertificateAuthority.name

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

issuer.issuerURL

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

name

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

oidcClients

클러스터 내 플랫폼 클라이언트가 ID 공급자에게 토큰을 요청하는 방법을 구성합니다. 항목은 20개를 초과할 수 없으며 항목에는 고유한 네임스페이스/이름 쌍이 있어야 합니다.

oidcClients.clientID

플랫폼 구성 요소가 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