외부 ID로 AWS용 GKE에 인증

직원 ID 제휴는 Google Cloud 서비스에 대해 Google 이외의 ID로 액세스하도록 권한을 부여합니다. AWS용 GKE의 맥락에서 Google 사용자 인증 정보를 사용하지 않고도 기존 외부 ID를 사용하여 GKE 클러스터를 만들거나 액세스할 수 있습니다.

직원 ID 제휴를 사용할 경우의 이점은 다음과 같습니다.

  • 여러 플랫폼 또는 제공업체 간에 중복된 계정이 필요하지 않습니다.
  • 여러 플랫폼에서 구성할 필요 없이 권한을 한 번만 설정하면 됩니다.
  • 로그인과 비밀번호가 더 적게 필요하므로 사용자 액세스가 간소화됩니다.

시작하기 전에

GKE 클러스터에 액세스하도록 외부 사용자 또는 그룹을 사용 설정하기 전에 다음 단계를 수행해야 합니다.

  1. 외부 사용자 또는 그룹이 AWS용 GKE의 API를 사용할 수 있도록 직원 ID 제휴를 구성합니다.

  2. 클러스터에 액세스할 수 있도록 외부 사용자 또는 그룹에 gkemulticloud.viewer 역할을 할당합니다. Google Cloud 콘솔에서 클러스터를 볼 수 있도록 container.clusterViewer 역할을 할당합니다.

    참고로 역할은 권한 모음입니다. 항목(사용자, 그룹 또는 서비스 계정)에 역할을 할당하면 역할에 포함된 모든 권한이 항목에 부여됩니다.

    사용자

    개별 사용자의 경우 gkemulticloud.viewer 역할을 할당해야 합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.viewer" \
      --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • WORKFORCE_POOL_ID: Google Cloud에서 직원 ID 풀을 고유하게 식별하는 ID. ID 형식을 지정할 때는 쿼리 매개변수의 IAM 문서에서 제공하는 권장 가이드라인을 따라야 합니다.
    • SUBJECT_VALUE: 외부 사용자를 고유하게 식별하는 ID. 예를 들어 ID는 alex@cymbalgroup.com 같은 이메일 주소일 수 있습니다.

    그룹

    그룹의 경우 gkemulticloud.viewer 역할을 할당해야 합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.viewer" \
      --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • WORKFORCE_POOL_ID: Google Cloud에서 직원 ID 풀을 고유하게 식별하는 ID. ID 형식을 지정할 때는 쿼리 매개변수의 IAM 문서에서 제공하는 권장 가이드라인을 따라야 합니다.
    • GROUP_ID: 외부 그룹을 고유하게 식별하는 ID
  3. 선택사항: 외부 사용자 또는 그룹에 적절한 Identity and Access Management(IAM) 역할을 할당합니다. 이 단계는 사용자 또는 그룹에 클러스터를 만들거나 업데이트할 수 있는 권한을 부여하려는 경우에만 필요합니다. 단순히 클러스터에 액세스하는 데에는 필요하지 않습니다.

    사용자

    개별 사용자의 경우 gkemulticloud.admin 역할을 할당해야 합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.admin" \
      --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • WORKFORCE_POOL_ID: Google Cloud에서 직원 ID 풀을 고유하게 식별하는 ID. ID 형식을 지정할 때는 쿼리 매개변수의 IAM 문서에서 제공하는 권장 가이드라인을 따라야 합니다.
    • SUBJECT_VALUE: 외부 사용자를 고유하게 식별하는 ID. 예를 들어 ID는 alex@cymbalgroup.com 같은 이메일 주소일 수 있습니다.

    그룹

    그룹의 경우 gkemulticloud.admin 역할을 할당해야 합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.admin" \
      --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • WORKFORCE_POOL_ID: Google Cloud에서 직원 ID 풀을 고유하게 식별하는 ID. ID 형식을 지정할 때는 쿼리 매개변수의 IAM 문서에서 제공하는 권장 가이드라인을 따라야 합니다.
    • GROUP_ID: 외부 그룹을 고유하게 식별하는 ID

AWS용 GKE에 필요한 API 역할 및 권한에 대한 자세한 내용은 API 역할 및 권한을 참조하세요.

GKE 클러스터에 대한 외부 액세스 권한 부여

외부 사용자 또는 그룹이 GKE 클러스터에 액세스할 수 있도록 직원 ID 제휴를 설정하는 방법에는 두 가지가 있습니다.

방법 #1에서는 RBAC 파일을 정의하고 이를 클러스터에 적용해야 합니다. 이 방법을 사용하면 사용자에게 광범위한 액세스 권한을 부여하지 않고 리소스에 대한 읽기 전용 액세스 권한을 부여하는 등 권한을 세부적으로 제어할 수 있습니다.

방법 #2를 사용하려면 클러스터를 만들거나 업데이트할 때 외부 ID에 대한 액세스 권한을 지정해야 합니다. 이 방법에서는 지정된 사용자 또는 그룹에 전체 관리자 권한을 부여합니다.

원하는 액세스 제어 수준에 가장 적합한 방법을 선택하세요. 보다 세분화된 권한의 경우 방법 #1을, 전체 클러스터 관리자 권한을 부여하는 경우 방법 #2를 선택합니다.

방법 1: RBAC 파일 사용

GKE 클러스터에 외부 액세스 권한을 부여하는 첫 번째 방법은 RBAC 파일을 사용하는 것입니다. 다음 단계를 따르세요.

  1. 주체(사용자 또는 그룹)와 GKE 클러스터 내에서 부여할 권한을 포함하는 RBAC YAML 파일을 정의합니다. 다음은 개별 사용자 및 그룹에 대한 RBAC YAML 구성 예시입니다.

    사용자

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: gateway-cluster-admin-user
    subjects:
    - kind: User
      name: principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    

    다음을 바꿉니다.

    • WORKFORCE_POOL_ID: Google Cloud에서 직원 ID 풀을 고유하게 식별하는 ID. ID 형식을 지정할 때는 쿼리 매개변수의 IAM 문서에서 제공하는 권장 가이드라인을 따라야 합니다.
    • SUBJECT_VALUE: 외부 사용자를 고유하게 식별하는 ID. 예를 들어 ID는 alex@cymbalgroup.com 같은 이메일 주소일 수 있습니다.

    그룹

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: gateway-cluster-admin-group
    subjects:
    - kind: Group
      name: principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    

    다음을 바꿉니다.

    • WORKFORCE_POOL_ID: Google Cloud에서 직원 ID 풀을 고유하게 식별하는 ID. ID 형식을 지정할 때는 쿼리 매개변수의 IAM 문서에서 제공하는 권장 가이드라인을 따라야 합니다.
    • GROUP_ID: 외부 그룹을 고유하게 식별하는 ID
  2. 구성하려는 GKE 클러스터를 식별하고 다음 명령어를 사용하여 활성 컨텍스트로 설정합니다.

      kubectl config use-context CLUSTER_CONTEXT
    

    CLUSTER_CONTEXT를 클러스터에 적절한 컨텍스트 이름으로 바꿉니다.

  3. 원하는 GKE 클러스터를 활성 컨텍스트로 설정한 상태에서 다음 명령어를 사용하여 RBAC 구성을 클러스터에 적용합니다.

    kubectl apply -f RBAC_PATH
    

    RBAC_PATH를 자신이 만들거나 수정한 RBAC 파일의 경로로 바꿉니다.

    이 명령어를 실행하면 RBAC 구성에 지정된 사용자 또는 그룹에게 RBAC 규칙에 정의된 대로 타겟팅된 GKE 클러스터의 액세스 및 관리가 가능한 권한이 부여됩니다.

  4. 후속 권한 변경이 필요한 경우 RBAC 파일을 수정하고 앞의 단계를 반복하여 RBAC 파일을 클러스터에 다시 적용합니다.

방법 2: 클러스터 생성 또는 업데이트 중에 외부 ID에 액세스 권한 부여

방법 #2에서는 클러스터 생성 또는 업데이트 프로세스 중에 외부 ID에 액세스 권한을 부여합니다.

클러스터를 만들려면 클러스터 만들기의 단계를 따릅니다. 클러스터를 업데이트하려면 클러스터 업데이트의 단계를 따릅니다.

클러스터를 만들거나 업데이트하기 위해 gcloud 명령어를 실행할 때는 다음과 같이 admin-users 또는 admin-groups 매개변수를 지정합니다.

gcloud container aws clusters [create|update] CLUSTER_NAME \
    --location=LOCATION
    --admin-users=principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject SUBJECT_VALUE \
    --admin-groups=principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터 이름
  • LOCATION: 클러스터가 관리되는 Google Cloud 리전
  • WORKFORCE_POOL_ID: Google Cloud에서 직원 ID 풀을 고유하게 식별하는 ID. ID 형식을 지정할 때는 쿼리 매개변수의 IAM 문서에서 제공하는 권장 가이드라인을 따라야 합니다.
  • SUBJECT_VALUE: 외부 사용자를 고유하게 식별하는 ID. 예를 들어 ID는 alex@cymbalgroup.com 같은 이메일 주소일 수 있습니다.
  • GROUP_ID: 외부 그룹을 고유하게 식별하는 ID

외부 ID에 GKE 클러스터에 대한 액세스 권한 부여 요약

방법 #1 또는 방법 #2를 수행한 후 지정된 외부 사용자 또는 그룹이 Google Cloud 콘솔을 사용하여 클러스터 세부정보를 연결하고 볼 수 있습니다. 또는 gcloud CLI에서 ID와 함께 kubectl을 사용하여 클러스터를 관리, 조작, 통신할 수 있습니다.

GKE 클러스터에 대해 kubectl 명령어를 실행하려면 kubeconfig 항목 생성 방법을 참조하세요.