이 문서에서는 Google Kubernetes Engine(GKE) 클러스터에 인증을 수행하도록 외부 ID 공급업체를 구성하는 방법을 설명합니다.
개요
GKE용 ID 서비스는 GKE 클러스터에 인증을 수행하도록 기존 ID 솔루션을 확장합니다. OpenID Connect(OIDC) 지원을 통해 조직에서 사용자 계정 만들기, 사용 설정, 중지를 위한 표준 절차를 사용해서 Kubernetes 클러스터에 대해 액세스를 관리할 수 있습니다. GKE용 ID 서비스는 OIDC ID 공급업체로 제한됩니다.
시작하기 전에
이 문서를 읽기 전에 다음 인증 및 OpenID 개념을 숙지해야 합니다.
헤드리스 시스템은 지원되지 않습니다. 브라우저 기반 인증 흐름은 사용자 동의를 구하고 사용자 계정을 승인하는 데 사용됩니다.
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
GKE용 ID 서비스 사용자
이 문서의 태스크는 사용자가 다음 중 하나에 해당할 때 적용됩니다.
클러스터 관리자: 클러스터를 한 개 이상 만들고 클러스터를 사용하는 개발자의 인증 구성 파일을 만드는 경우
개발자: 하나 이상의 클러스터에서 워크로드를 실행하고 OIDC를 사용하여 인증하는 경우
작동 방식
클러스터 관리자는 GKE 클러스터에서 GKE용 ID 서비스를 설정하고 사용하기 위해 다음을 수행합니다.
클러스터 관리자가 GKE용 ID 서비스를 구성한 후에는 개발자가 로그인하고 클러스터에 인증을 수행할 수 있습니다.
클러스터에서 GKE용 ID 서비스 사용 설정
이 섹션은 클러스터 관리자를 대상으로 작성되었습니다.
기본적으로 Identity and Access Management(IAM)는 클러스터 인증을 위한 ID 공급업체로 구성됩니다. 타사 ID 공급업체로 OIDC를 사용하려면 Google Cloud CLI를 사용하여 신규 또는 기존 클러스터에서 GKE용 ID 서비스를 사용 설정하면 됩니다.
새 클러스터에서 GKE용 ID 서비스 사용 설정
GKE용 ID 서비스가 사용 설정된 클러스터를 만들려면 다음 명령어를 실행하세요.
gcloud container clusters create CLUSTER_NAME \
--enable-identity-service
CLUSTER_NAME
을 새 클러스터 이름으로 바꿉니다.
기존 클러스터에서 GKE용 ID 서비스 사용 설정
기존 클러스터에서 GKE용 ID 서비스를 사용 설정하려면 다음 명령어를 실행하세요.
gcloud container clusters update CLUSTER_NAME \
--enable-identity-service
CLUSTER_NAME
을 클러스터 이름으로 바꿉니다.
GKE용 ID 서비스에서 생성된 Kubernetes 객체
다음 표에서는 클러스터에서 GKE용 ID 서비스를 사용 설정할 때 생성된 Kubernetes 객체에 대해 설명합니다.
Kubernetes 객체 | |
---|---|
anthos-identity-service |
Namespace GKE용 ID 서비스 배포에 사용됩니다. |
kube-public |
Namespace default 클라이언트 구성 파일에 사용됩니다. |
gke-oidc-envoy |
LoadBalancer OIDC 요청의 엔드포인트입니다. 기본적으로 외부입니다. 비공개 클러스터 또는 네트워크 정책이 엄격한 클러스터에 생성된 경우에는 엔드포인트가 클러스터 Virtual Private Cloud 내부에 있습니다. anthos-identity-service 네임스페이스에 생성됩니다. |
gke-oidc-service |
ClusterIP gke-oidc-envoy 배포와 gke-oidc-service 배포 사이의 통신을 지원합니다.anthos-identity-service 네임스페이스에 생성됩니다. |
gke-oidc-envoy |
Deployment gke-oidc-envoy LoadBalancer에 노출된 프록시를 실행합니다. gke-oidc-service 와 통신하여 ID 토큰을 검증합니다. Kubernetes API 서버의 프록시 역할을 하며 API 서버에 요청을 전달할 때 사용자를 가장합니다.anthos-identity-service 네임스페이스에 생성됩니다. |
gke-oidc-service |
Deployment ID 토큰의 유효성을 검사하고 ClientConfig 리소스에 대한 허용 웹훅 검증을 제공합니다.anthos-identity-service 네임스페이스에 생성됩니다. |
gke-oidc-operator |
Deployment 클라이언트 구성 및 gke-oidc-envoy LoadBalancer를 조정합니다. anthos-identity-service 네임스페이스에 생성됩니다. |
gke-oidc-certs |
Secret LoadBalancer에 대한 클러스터 인증 기관(CA) 및 TLS 인증서를 포함합니다. anthos-identity-service 네임스페이스에 생성됩니다. |
default |
ClientConfig CRD 선호 인증 방법, ID 공급업체 구성, 사용자 및 그룹 클레임 매핑과 같은 OIDC 매개변수를 포함합니다. ID 토큰 검증에 사용됩니다. 개발자들에게 배포하기 전 클러스터 관리자가 OIDC 설정을 구성하는 데 사용됩니다. kube-public 네임스페이스에 생성됩니다. |
GKE용 ID 서비스 구성
이 섹션은 클러스터 관리자를 대상으로 작성되었습니다.
default
ClientConfig를 다운로드하고 수정하여 GKE용 ID 서비스를 구성할 수 있습니다.
default
ClientConfig를 다운로드합니다.kubectl get clientconfig default -n kube-public -o yaml > client-config.yaml
원하는 설정으로
spec.authentication
섹션을 업데이트하세요.apiVersion: authentication.gke.io/v2alpha1 kind: ClientConfig metadata: name: default namespace: kube-public spec: name: cluster-name server: https://192.168.0.1:6443 authentication: - name: oidc oidc: clientID: CLIENT_ID certificateAuthorityData: OIDC_PROVIDER_CERTIFICATE extraParams: EXTRA_PARAMS issuerURI: ISSUER_URI cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc kubectlRedirectURI: KUBECTL_REDIRECT_URL scopes: SCOPES userClaim: USER groupsClaim: GROUPS userPrefix: USER_PREFIX groupPrefix: GROUP_PREFIX
다음을 바꿉니다.
CLIENT_ID
: OIDC 공급업체에 대해 인증 요청을 수행하는 클라이언트 애플리케이션의 ID입니다.OIDC_PROVIDER_CERTIFICATE
: (선택사항) OIDC 공급업체에 대한 PEM 인증서입니다. 이 필드는 OIDC 공급업체가 자체 서명된 인증서를 사용하는 경우에 유용할 수 있습니다. GKE용 ID 서비스에는 기본적으로 공개 루트 집합이 포함됩니다.EXTRA_PARAMS
: OIDC 제공업체에 전송할 추가적인 키-값 매개변수입니다.- 그룹을 승인하려면
resource=token-groups-claim
을 사용하세요. - Microsoft Azure 및 Okta를 인증하려면
prompt=consent
를 사용합니다. - Cloud ID의 경우
prompt=consent,access_type=offline
을 사용하세요.
- 그룹을 승인하려면
ISSUER_URI
: OIDC 승인 요청을 전송할 URL입니다(예시:https://example.com/adfs
). Kubernetes API 서버는 이 URL을 사용하여 토큰을 확인할 수 있도록 공개 키를 검색합니다. URI는 HTTPS를 사용해야 합니다. Cloud ID의 경우https://accounts.google.com
을 사용하세요.KUBECTL_REDIRECT_URL
: 승인을 위해kubectl oidc login
에 사용되는 리디렉션 URL입니다. 일반적으로http://localhost:PORT/callback
형식입니다. 여기서PORT
는 개발자 워크스테이션에서 사용 가능한1024
이상의 포트입니다(예:http://localhost:10000/callback
). 이 URL을 OIDC 제공업체에 클라이언트 애플리케이션의 승인된 리디렉션 URL로 등록해야 합니다. Google ID를 OIDC 공급업체로 사용하는 경우 리디렉션 URI 설정을 참조하세요.SCOPES
: OIDC 제공업체에 전송할 추가적인 범위입니다.- Microsoft Azure 및 Okta에는
offline_access
범위가 필요합니다. - Cloud ID의 경우
openid, email
을 사용하여email
클레임에 이메일 주소가 포함된 ID 토큰을 가져옵니다.
- Microsoft Azure 및 Okta에는
USER
: ID 토큰의 사용자 클레임입니다.GROUPS
: ID 토큰의 그룹 클레임입니다.USER_PREFIX
: 기존 이름과 충돌을 방지하기 위해 사용자 클레임에 추가된 프리픽스입니다. 기본적으로 발급자 프리픽스가 Kubernetes API server에 제공된userID
앞에 붙습니다(사용자 클레임이email
이 아닌 경우). 그 결과 사용자 식별자는ISSUER_URI#USER
가 됩니다. 프리픽스를 사용하는 것을 권장하지만, 사용자는USER_PREFIX
를-
로 설정하여 프리픽스를 사용 중지할 수 있습니다.GROUP_PREFIX
: 기존 이름과 충돌을 방지하기 위해 그룹 클레임에 추가되는 프리픽스입니다. 예를 들어 이름이foobar
인 그룹이 2개 있는 경우gid-
프리픽스를 추가하세요. 결과 그룹은gid-foobar
입니다.
업데이트된 구성을 적용합니다.
kubectl apply -f client-config.yaml
이 구성을 적용하면 GKE용 ID 서비스가 클러스터 내에서 실행되고
gke-oidc-envoy
부하 분산기 뒤에서 요청을 처리합니다.spec.server
필드의 IP 주소는 부하 분산기의 IP 주소여야 합니다.spec.server
필드를 변경하면kubectl
명령어가 실패할 수 있습니다.client-config.yaml
구성 파일의 사본을 만듭니다.cp client-config.yaml login-config.yaml
spec.authentication.oidc
섹션의clientSecret
설정을 사용하여login-config.yaml
구성 파일을 업데이트합니다.clientSecret: CLIENT_SECRET
CLIENT_SECRET
를 OIDC 클라이언트 애플리케이션과 OIDC 제공업체 사이의 공유 보안 비밀로 바꿉니다.업데이트된
login-config.yaml
파일을 개발자에게 배포합니다.
엄격한 정책으로 클러스터에서 GKE용 ID 서비스 구성
비공개 클러스터와 같이 네트워크 정책이 엄격한 클러스터에서 예상대로 작동하도록 GKE용 ID 서비스를 구성하려면 다음을 수행합니다.
- 제어 영역이
ClientConfig
검증 웹훅과 통신할 수 있도록 TCP 포트15000
에 대해 방화벽 규칙을 추가합니다. gke-oidc-envoy
가 내부 부하 분산기로 생성되었으면 이를 VPC에 노출합니다.- 클러스터 내에서 트래픽을 거부하는 정책이 있으면
gke-oidc-envoy
배포가gke-oidc-service
배포와 통신할 수 있도록 TCP 포트8443
에 대해 방화벽 규칙을 추가합니다.
GKE용 ID 서비스 구성요소 버전 0.2.20 이상에서는 TCP 포트 15000
을 사용하지 않습니다. 구성요소 버전이 0.2.20 이상인 경우 포트 15000
에 대한 방화벽 규칙을 추가할 필요가 없습니다. 구성요소 버전을 확인하려면 다음 명령어를 실행합니다.
kubectl describe deployment gke-oidc-envoy -n anthos-identity-service \
| grep "components.gke.io/component-name: gke-oidc" -A1
부하 분산기에 커스텀 속성 추가
GKE용 ID 서비스를 구성한 후 고정 IP 주소와 같은 커스텀 주석 및 속성을 gke-oidc-envoy
부하 분산기에 추가할 수 있습니다. gke-oidc-envoy
서비스를 삭제하려면 다음 명령어를 실행합니다.
kubectl edit service gke-oidc-envoy -n anthos-identity-service
GKE에 TCP/UDP 부하 분산 구성 방법에 대한 문서를 참조하세요.
클러스터의 RBAC 정책 만들기
이 섹션은 클러스터 관리자를 위해 작성되었습니다.
관리자가 Kubernetes 역할 기반 액세스 제어(RBAC)를 사용하여 인증된 클러스터 사용자에게 액세스 권한을 부여할 수 있습니다. 클러스터에 대해 RBAC를 구성하려면 사용자는 각 개발자에게 RBAC 역할을 부여해야 합니다. 특정 네임스페이스의 리소스에 대한 액세스 권한을 부여하려면 Role과 RoleBinding을 만듭니다. 전체 클러스터에서 리소스에 대한 액세스 권한을 부여하려면 ClusterRole 및 ClusterRoleBinding을 만듭니다.
예를 들어 사용자가 클러스터 간의 모든 보안 비밀 객체를 확인해야 한다고 가정해보세요. 다음 단계에서는 이 사용자에게 필요한 RBAC 역할을 부여합니다.
다음 ClusterRole 매니페스트를
secret-viewer-cluster-role.yaml
로 저장하세요. 이 역할이 부여된 사람은 클러스터의 모든 보안 비밀을 가져오고, 보고, 나열할 수 있습니다.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-viewer rules: - apiGroups: [""] # The resource type for which access is granted resources: ["secrets"] # The permissions granted by the ClusterRole verbs: ["get", "watch", "list"]
ClusterRole 매니페스트를 적용합니다.
kubectl apply -f secret-viewer-cluster-role.yaml
다음 ClusterRoleBinding 매니페스트를
secret-viewer-cluster-role-binding.yaml
로 저장합니다. binding은 클라이언트 구성 파일에 정의된 사용자 이름에secret-viewer
역할을 부여합니다.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: people-who-view-secrets subjects: - kind: User name: ISSUER_URI#USER apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-viewer apiGroup: rbac.authorization.k8s.io
다음을 바꿉니다.
ISSUER_URI
: 클라이언트 구성 파일의spec.authentication.oidc.issuerURI
에서 가져온 발급기관 URI입니다.USER
: 클라이언트 구성 파일의spec.authentication.oidc.userClaim
에 구성된 클레임 이름 아래에 있는 토큰의 사용자 식별자
ClusterRoleBinding 매니페스트를 적용합니다.
kubectl apply -f secret-viewer-cluster-role-binding.yaml
클러스터에 로그인 및 인증
이 섹션은 개발자를 위해 작성되었습니다.
관리자로부터 OIDC 구성 파일을 받으면 클러스터에 인증을 수행할 수 있습니다.
관리자가 제공한
login-config.yaml
파일을 다운로드합니다.별도의 OIDC 구성요소를 제공하는 Google Cloud CLI SDK를 설치하세요. 다음 명령어를 실행하여 이를 설치할 수 있습니다.
gcloud components install kubectl-oidc
클러스터에 인증을 수행합니다.
kubectl oidc login --cluster=CLUSTER_NAME --login-config=login-config.yaml
인증 프로세스를 완료하도록 웹브라우저가 열립니다.
인증된 후에는
kubectl
명령어를 실행하여 다음을 수행할 수 있습니다.kubectl get pods
GKE용 ID 서비스 사용 중지
이 섹션은 클러스터 관리자를 대상으로 작성되었습니다.
gcloud CLI를 사용하여 GKE용 ID 서비스를 사용 중지할 수 있습니다. GKE용 ID 서비스를 사용 중지하려면 다음 명령어를 실행하세요.
gcloud container clusters update CLUSTER_NAME \
--no-enable-identity-service
다음 단계
- 워크로드 배포 자세히 알아보기
- OpenID Connect 자세히 알아보기
- 범위 및 클레임 자세히 알아보기