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 서버를 사용하여 인증을 다시 사용해야 하는 경우를 대비해 기존 인증 구성을 백업해 두었습니다.
프로세스
-
설치 프로그램에서 생성된
kubeconfig파일을 사용하거나 클러스터 관리자로 로그인하는 다른 장기적 방법을 사용하고 있는지 확인하세요. 다음 명령을 실행하여 웹 콘솔에서 인증할 수 있는 비밀을 만듭니다.
oc create secret generic console-secret \ --from-literal=clientSecret=<secret_value> \ -n openshift-config$ oc create secret generic console-secret \ --from-literal=clientSecret=<secret_value> \1 -n openshift-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<secret_value>를ID 공급자의콘솔 테스트클라이언트에 대한 비밀번호 값으로 바꾸세요.
선택 사항: 다음 명령을 실행하여 공급자의 인증 기관 번들을 포함하는 구성 맵을 만듭니다.
oc create configmap keycloak-oidc-ca --from-file=ca-bundle.crt=my-directory/ca-bundle.crt \ -n openshift-config$ oc create configmap keycloak-oidc-ca --from-file=ca-bundle.crt=my-directory/ca-bundle.crt \1 -n openshift-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 제공자의
ca-bundle.crt파일 경로를 지정하세요.
다음 명령을 실행하여 인증 구성을 편집합니다.
oc edit authentication.config/cluster
$ oc edit authentication.config/clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 유형필드를OIDC로 설정하고, 공급자에 대한oidcProviders필드를 구성하고,webhookTokenAuthenticator필드를null로 설정하여 인증 구성을 업데이트합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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 공급자 구성 매개변수"를 참조하세요.
- 종료하고 변경 사항을 저장하여 새 구성을 적용합니다.
클러스터가 모든 노드에 새로운 개정판을 롤아웃할 때까지 기다립니다.
다음 명령을 실행하여 Kubernetes API 서버 운영자 상태를 확인하세요.
oc get co kube-apiserver
$ oc get co kube-apiserverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
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
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 10Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 예의 메시지는 한 노드가 새로운 개정판으로 진행되었고 두 노드는 아직 업데이트되지 않았음을 보여줍니다. 클러스터 크기에 따라 모든 노드에 새로운 개정판을 적용하는 데 20분 이상 걸릴 수 있습니다.
-
문제를 해결하려면 Cluster Authentication Operator 및
kube-apiserverPod 로그에서 오류를 확인할 수도 있습니다.
검증
ID 공급자를 통해 인증하여 OpenShift CLI(
oc)에 로그인할 수 있는지 확인하세요.다음 명령을 실행하여 로그인하세요.
oc login --exec-plugin=oc-oidc \ --issuer-url=https://keycloak-keycloak.apps.example.com/realms/master \ --client-id=oc-cli-test \ --extra-scopes=email --callback-port=8080 \ --oidc-certificate-authority my-directory/ca-bundle.crt$ 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.crt4 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Please visit the following URL in your browser: http://localhost:8080
Please visit the following URL in your browser: http://localhost:8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 브라우저에서 http://localhost:8080을 엽니다.
신원 제공자의 자격 증명을 사용하여 인증합니다.
성공적으로 인증되면 터미널에 다음 출력과 비슷한 메시지가 표시됩니다.
Logged into "https://api.my-cluster.example.com:6443" as "oidc-user-test:user1@example.com" from an external oidc issuer.
Logged into "https://api.my-cluster.example.com:6443" as "oidc-user-test:user1@example.com" from an external oidc issuer.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ID 공급자를 통해 인증하여 OpenShift Container Platform 웹 콘솔에 로그인할 수 있는지 확인하세요.
브라우저에서 클러스터의 웹 콘솔 URL을 엽니다.
로그인을 위해 ID 공급자로 리디렉션됩니다.
신원 제공자의 자격 증명을 사용하여 인증합니다.
성공적으로 로그인했고 OpenShift Container Platform 웹 콘솔로 리디렉션되었는지 확인하세요.
8.2.1. OIDC 공급자 구성 매개변수 링크 복사링크가 클립보드에 복사되었습니다!
다음 표는 직접 인증에 사용할 수 있는 모든 OIDC 공급자 매개변수를 나열합니다.
| 매개변수 | 설명 |
|---|---|
|
| Kubernetes API 서버에서 ID 공급자가 발급한 JWT 토큰의 클레임을 클러스터 ID로 변환하는 데 사용할 규칙을 구성합니다. |
|
| ID 공급자가 발급한 JWT 토큰의 클레임을 바탕으로 클러스터 ID 그룹을 구성하는 방법을 구성합니다. 클레임을 참조할 때, 클레임이 JWT 토큰에 존재하는 경우 해당 값은 쉼표로 구분된 그룹 목록이어야 합니다. |
|
| 이 매핑과 연관된 클러스터 ID 필드에 값이 할당되는 JWT 토큰 클레임을 구성합니다. |
|
| JWT 클레임을 클러스터 ID 속성에 매핑하는 과정 중에 클러스터 ID 속성에 적용되는 접두사를 구성합니다. |
|
| ID 공급자가 발급한 JWT 토큰의 클레임에서 클러스터 ID의 사용자 이름을 구성하는 방법을 구성합니다. |
|
| 이 매핑과 연관된 클러스터 ID 필드에 값이 할당되는 JWT 토큰 클레임을 구성합니다. |
|
|
JWT 클레임 값에 추가되어야 하는 접두사를 구성합니다. |
|
|
JWT 클레임을 클러스터 ID 속성에 매핑하는 과정에서 클러스터 ID 사용자 이름 속성에 적용되는 접두사를 구성합니다. 빈 문자열( |
|
|
생략하면 의견이 없다는 뜻이며, 플랫폼이 적용할 접두사를 선택하게 되며 이는 시간이 지남에 따라 변경될 수 있습니다.
현재 플랫폼은 클레임이 |
|
|
ID 공급자가 발급한 JWT 토큰의 클레임을 검증하기 위해 Kubernetes API 서버에서 사용할 규칙을 구성합니다. 검증 규칙은 |
|
| Kubernetes API 서버가 이 ID 공급자에 대해 수신 JWT가 유효한지 확인하는 데 사용하는 필수 클레임과 값을 구성합니다. |
|
|
필요한 클레임의 이름을 구성합니다. JWT 클레임에서 가져온 경우 클레임은 문자열 값이어야 합니다. 빈 문자열( |
|
|
수신 JWT 클레임에서 가져올 때 |
|
|
검증 규칙의 유형을 구성합니다. 허용되는 값은
|
|
| 플랫폼이 ID 공급자와 상호 작용하는 방식과 ID 공급자로부터 발급된 토큰이 Kubernetes API 서버에서 평가되는 방식을 구성하는 필수 필드입니다. |
|
|
ID 공급자가 발급한 JWT 토큰을 발급해야 하는 허용 대상을 구성하는 필수 필드입니다. 최소한 하나의 항목이 JWT 토큰의 |
|
|
검색 정보를 가져올 때 Kubernetes API 서버에서 ID 공급자에 대한 연결을 검증하는 데 사용되는 인증 기관을 구성합니다. 지정하지 않으면 시스템 신뢰가 사용됩니다. 지정된 경우, config 맵의 |
|
| 참조된 구성 맵의 이름입니다. |
|
|
ID 공급자가 토큰을 발급하는 데 사용되는 URL을 구성합니다. Kubernetes API 서버는 JWT의 |
|
|
ID 공급자와 연관된 고유한 사람이 읽을 수 있는 식별자를 구성하는 필수 필드입니다. 이는 여러 ID 공급자를 구별하는 데 사용되며 토큰 검증이나 인증 메커니즘에는 영향을 미치지 않습니다. 빈 문자열( |
|
| 클러스터 내 플랫폼 클라이언트가 ID 공급자에게 토큰을 요청하는 방법을 구성합니다. 항목은 20개를 초과할 수 없으며 항목에는 고유한 네임스페이스/이름 쌍이 있어야 합니다. |
|
|
플랫폼 구성 요소가 ID 공급자에 대한 인증 요청에 사용하는 ID 공급자의 클라이언트 식별자를 구성합니다. ID 공급자는 플랫폼 구성 요소가 ID 공급자를 인증 모드로 사용할 수 있도록 이 식별자를 허용해야 합니다. 빈 문자열( |
|
| 플랫폼 구성 요소가 ID 공급자에게 인증 요청을 할 때 사용하는 클라이언트 비밀번호를 구성합니다. 지정하지 않으면 ID 공급자에 대한 인증 요청을 할 때 클라이언트 비밀번호가 사용되지 않습니다.
이 옵션을 지정하면 공개 클라이언트는 클라이언트 비밀이 필요하지 않지만, 개인 클라이언트는 ID 공급자와 작업하기 위해 클라이언트 비밀이 필요합니다. |
|
| 참조된 보안의 이름입니다. |
|
|
ID 공급자를 인증 모드로 사용하도록 구성 중인 플랫폼 구성 요소의 이름을 지정합니다. |
|
|
ID 공급자를 인증 모드로 사용하도록 구성 중인 플랫폼 구성 요소를 지정하는 네임스페이스를 지정합니다. |
|
| ID 공급자에 대한 인증 요청을 수행할 때 플랫폼 구성 요소에서 요청해야 하는 추가 범위를 구성합니다. 이 기능은 표준 OIDC 범위 이외의 특정 범위가 요청되어야 하는 클레임 매핑을 구성한 경우에 유용합니다. 생략하면 추가 범위가 요청되지 않습니다. |