Google 그룹스를 사용하여 Connect 게이트웨이 설정

이 가이드는 승인을 위해 Google 그룹스를 사용하여 프로젝트의 서비스 계정이 사용할 Connect 게이트웨이를 설정해야 하는 플랫폼 관리자를 대상으로 합니다. 이 페이지를 읽기 전 개요에 설명된 개념을 숙지해야 합니다. 개별 계정을 승인하려면 기본 설정을 참고하세요.

이 설정을 사용하면 사용자가 Google Cloud CLI, Connect 게이트웨이, Google Cloud 콘솔을 사용하여 구성된 Fleet 클러스터에 로그인할 수 있습니다.

이 기능은 Google Workspace 또는 Cloud ID 버전과 연결된 Google 그룹스를 사용합니다.

지원되는 클러스터 유형

Connect 게이트웨이를 통해 Google 그룹스로 다음 클러스터 유형에 대한 액세스 제어를 설정할 수 있습니다.

이전 목록에 없는 환경에서 이 기능을 사용하려면 Cloud Customer Care 또는 Connect 게이트웨이팀에 문의하세요.

작동 방식

개요의 설명대로 Google 그룹스(즉, Google Workspace에서 만든 그룹)의 멤버십을 기준으로 사용자에 클러스터에 대한 액세스 권한을 부여하는 것이 유용한 경우가 많습니다. 그룹 멤버십을 기준으로 승인하면 계정마다 별도의 승인을 설정할 필요가 없으므로 정책을 보다 간단하고 간편하게 관리하고 감사할 수 있습니다. 따라서 예를 들어 사용자가 팀에 가입하거나 탈퇴할 때 클러스터에서 직접 개별 사용자를 추가/삭제할 필요 없이 팀에 클러스터 액세스 권한을 간편하게 공유할 수 있습니다. 클러스터에 로그인하는 각 사용자에 대한 Google 그룹스 멤버십 정보를 가져오도록 Connect 게이트웨이를 구성할 수 있습니다. 그런 다음 액세스 제어 정책에서 이 정보를 사용할 수 있습니다.

다음은 이 서비스가 사용 설정된 클러스터를 인증하고 명령어를 실행하는 사용자의 일반적인 흐름을 보여줍니다. 이 흐름이 성공하려면 다음과 같은 그룹의 클러스터에 RBAC 정책이 있어야 합니다.

  1. alice@example.com 사용자를 구성원으로 포함합니다.

  2. gke-security-groups@example.com의 중첩된 그룹입니다.

게이트웨이 Google 그룹스 과정을 보여주는 다이어그램

  1. 사용자 alice@example.com이 Google ID를 사용하여 로그인하고 명령줄에서 클러스터를 사용하려는 경우 Connect 게이트웨이 사용의 설명대로 클러스터의 게이트웨이 kubeconfig를 가져옵니다.
  2. 사용자는 kubectl 명령어를 실행하거나Google Cloud 콘솔에서 Google Kubernetes Engine 워크로드 또는 객체 브라우저 페이지를 열어 요청을 보냅니다.
  3. Connect 서비스에서 요청을 수신하며 IAM에서 승인 검사를 수행합니다.
  4. Connect 서비스는 클러스터에서 실행 중인 Connect 에이전트로 요청을 전달합니다. 이 요청은 클러스터에서 인증과 승인에 사용할 사용자 인증 정보와 함께 제공됩니다.
  5. Connect 에이전트는 Kubernetes API 서버에 요청을 전달합니다.
  6. Kubernetes API 서버는 클러스터의 anthos-identity-service 포드로 요청을 전달하여 요청의 유효성을 검사합니다.
  7. anthos-identity-service 포드는 Kubernetes API 서버에 사용자 및 그룹 정보를 반환합니다. 그러면 Kubernetes API 서버가 이 정보를 사용하여 클러스터에 구성된 RBAC 정책에 따라 요청을 승인할 수 있습니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud CLI를 설치합니다.

  3. 외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  4. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init
  5. 이 가이드를 완료하는 데 필요한 권한이 있는지 확인합니다.

  6. Connect Gateway, GKE Connect, GKE Hub, Anthos Identity Service, Cloud Resource Manager API를 사용 설정합니다.

    API 사용 설정에 필요한 역할

    API를 사용 설정하려면 serviceusage.services.enable 권한이 포함된 서비스 사용량 관리자 IAM 역할 (roles/serviceusage.serviceUsageAdmin)이 필요합니다. 역할 부여 방법 알아보기

    gcloud services enable connectgateway.googleapis.com gkeconnect.googleapis.com gkehub.googleapis.com anthosidentityservice.googleapis.com cloudresourcemanager.googleapis.com
  7. Google Cloud CLI를 설치합니다.

  8. 외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  9. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init
  10. 이 가이드를 완료하는 데 필요한 권한이 있는지 확인합니다.

  11. Connect Gateway, GKE Connect, GKE Hub, Anthos Identity Service, Cloud Resource Manager API를 사용 설정합니다.

    API 사용 설정에 필요한 역할

    API를 사용 설정하려면 serviceusage.services.enable 권한이 포함된 서비스 사용량 관리자 IAM 역할 (roles/serviceusage.serviceUsageAdmin)이 필요합니다. 역할 부여 방법 알아보기

    gcloud services enable connectgateway.googleapis.com gkeconnect.googleapis.com gkehub.googleapis.com anthosidentityservice.googleapis.com cloudresourcemanager.googleapis.com
  12. Google Cloud외부 클러스터의 경우 클러스터의 인증 구성요소가 Cloud ID API를 호출해야 합니다. 클러스터의 이그레스 트래픽이 프록시를 통과해야 하는 네트워크 정책이 있는지 확인합니다.

필요한 역할

Connect 게이트웨이와 클러스터를 구성하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 편집자 (roles/editor) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

사용자 및 그룹 설정

이 기능을 사용하려는 그룹이 다음과 같이 설정되어 있는지 확인합니다.

  1. 조직의 Google Workspace에 gke-security-groups@YOUR-DOMAIN 형식의 그룹이 있는지 확인합니다. 이러한 그룹이 없으면 조직에서 그룹 만들기의 안내에 따라 Google 관리 콘솔을 사용하여 그룹을 만듭니다.
  2. 다른 그룹에 그룹 추가의 안내에 따라 액세스 제어에 사용할 그룹을 gke-security-groups의 중첩 그룹으로 추가합니다. 개별 사용자는 gke-security-groups의 구성원으로 추가하지 마세요.

이 기능을 사용하려는 사용자 계정은 그룹과 동일한 도메인 이름을 사용해야 합니다.

그룹 지원 구성

Connect 게이트웨이는 클러스터의 인증 구성요소를 사용하여 그룹 멤버십 정보를 가져옵니다. 필수 구성요소를 사용 설정하려면 클러스터 유형에 따라 다음 문서 중 하나를 참고하세요.

다음 섹션에서는 그룹 지원을 사용 설정하도록 ClientConfig 커스텀 리소스를 업데이트하는 방법을 보여줍니다. 이 섹션은 Google Distributed Cloud 클러스터에만 적용됩니다.Google Cloud기반 GKE, AWS용 GKE, Azure용 GKE와 같은 다른 유형의 클러스터의 경우 그룹에 IAM 역할 부여 섹션으로 건너뛰세요.

Distributed Cloud의 경우 개별 클러스터 또는 Fleet의 그룹 지원을 구성할 수 있습니다. 사용하는 클러스터 유형에 따라 그룹 지원을 구성하는 방법이 다음과 같이 결정됩니다.

  • Distributed Cloud(연결형): 개별 클러스터만 해당 Fleet 수준 구성은 지원되지 않습니다.
  • VMware 및 베어메탈용 Google Distributed Cloud (소프트웨어만 해당): 개별 클러스터 또는 플릿

GKE Fleet API를 사용하여 그룹 지원 구성

VMware 및 베어메탈용 Google Distributed Cloud (소프트웨어 전용)의 경우 플릿 수준에서 그룹 지원을 구성할 수 있습니다. 이전에 다른 ID 공급업체와 같은 Fleet 수준 인증을 구성한 경우 그룹 인증이 이미 사용 설정되어 있습니다. 하지만 네트워크 정책에 따라 이그레스 트래픽이 프록시를 통과해야 하는 경우 해당 프록시에 관한 정보로 기존 구성을 업데이트해야 합니다.

Fleet 수준에서 그룹 지원을 구성하려면 다음 옵션 중 하나를 선택합니다.

콘솔

  1. Google Cloud 콘솔에서 GKE ID 서비스 페이지로 이동합니다.

    GKE ID 서비스로 이동

  2. ID 서비스 사용 설정을 클릭합니다.

  3. 구성할 VMware 및 베어메탈용 Google Distributed Cloud (소프트웨어 전용) 클러스터를 선택합니다.

  4. 구성 업데이트를 클릭합니다. ID 서비스 클러스터 구성 수정 창이 열립니다.

  5. ID 공급업체 구성 섹션에서 ID 공급업체를 유지, 추가, 업데이트 또는 삭제하도록 선택할 수 있습니다.

  6. 계속을 클릭하여 다음 구성 단계로 이동합니다. 이 설정에 적합한 클러스터를 하나 이상 선택한 경우 Google 인증 섹션이 표시됩니다.

  7. 사용 설정을 선택하여 선택한 클러스터에 Google 인증을 사용 설정합니다. 프록시를 통해 Google ID 공급업체에 액세스해야 하는 경우 프록시 세부정보를 입력합니다.

  8. 구성 업데이트를 클릭합니다. 이렇게 하면 선택한 클러스터에 ID 구성이 적용됩니다.

gcloud

  1. Fleet 수준 인증 관리 설정에 설명된 대로 Fleet 수준 ID 서비스 기능을 사용 설정하고 클러스터를 구성합니다.
  2. ClientConfig 사양이 포함된 auth-config.yaml 파일에 다음 필드를 추가합니다.

    spec:
      authentication:
      - name: google-authentication-method
        google:
          disable: false
    

    google.disable 필드의 false 값을 사용하면 그룹 지원이 사용 설정됩니다. 그룹 지원을 사용 중지하려면 이 값을 true로 수정합니다.

  3. 선택사항: 프록시를 통해 Google ID 공급업체에 액세스해야 하는 경우 위의 구성에 proxy 필드를 추가합니다.

    spec:
      authentication:
      - name: google-authentication-method
        google:
          disable: false
        proxy: PROXY_URL
    

    PROXY_URL를 Google ID에 연결할 프록시 서버 주소로 바꿉니다. 예를 들면 http://user:password@10.10.10.10:8888입니다.

  4. Fleet의 클러스터에 구성을 적용합니다.

    gcloud container fleet identity-service apply \
    --membership=CLUSTER_NAME \
    --config=/path/to/auth-config.yaml

    CLUSTER_NAME을 Fleet 내에서 클러스터의 고유한 멤버십 이름으로 바꿉니다.

Fleet 수준에서 그룹 지원을 설정하면 Fleet 컨트롤러가 구성을 관리합니다. Fleet 수준 구성은 특정 클러스터의 구성에 적용한 로컬 변경사항을 덮어씁니다.

개별 클러스터에 그룹 지원 구성

Distributed Cloud 연결을 비롯한 모든 Distributed Cloud 클러스터의 경우 각 클러스터에서 default ClientConfig를 업데이트하여 그룹 지원을 사용 설정합니다.

  1. 클러스터의 멤버십 세부정보를 가져옵니다.

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get memberships membership -o yaml
    

    USER_CLUSTER_KUBECONFIG를 클러스터의 kubeconfig 파일 경로로 바꾸세요. kubeconfig에 여러 컨텍스트가 있으면 현재 컨텍스트가 사용됩니다. 명령어를 사용하기 전 현재 컨텍스트를 올바른 클러스터로 재설정해야 할 수 있습니다.

    응답에서 spec.owner.id 필드를 참고하여 클러스터의 멤버십 세부정보를 가져옵니다. 멤버십 식별자는 //gkehub.googleapis.com/projects/PROJECT_NUMBER/locations/global/memberships/MEMBERSHIP 형식입니다.

    출력은 다음과 비슷합니다.

    id: //gkehub.googleapis.com/projects/123456789/locations/global/memberships/xy-ab12cd34ef
    
  2. 클러스터에서 default ClientConfig를 열어 수정합니다.

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-public edit clientconfig default
    
  3. 그룹 지원을 사용 설정하려면 spec.authentication 필드에 google 필드를 추가합니다.

    spec:
      internalServer: https://kubernetes.default.svc
      authentication:
      - google:
          audiences:
          - "CLUSTER_IDENTIFIER"
        name: google-authentication-method
    

    CLUSTER_IDENTIFIER을 클러스터의 멤버십 세부정보로 바꿉니다.

    internalServer 필드의 값이 https://kubernetes.default.svc인지 확인합니다.

  4. 선택사항: 프록시를 통해 Google ID 공급업체에 액세스해야 하는 경우 위의 구성에 proxy 필드를 추가합니다.

    spec:
      internalServer: https://kubernetes.default.svc
      authentication:
      - google:
          audiences:
          - "CLUSTER_IDENTIFIER"
        name: google-authentication-method
        proxy: PROXY_URL
    

    PROXY_URL를 Google ID에 연결할 프록시 서버 주소로 바꿉니다. 예를 들면 http://user:password@10.10.10.10:8888입니다.

Google 그룹스에 IAM 역할 부여

게이트웨이를 통해 연결된 클러스터와 상호작용하려면 그룹에 다음과 같은 추가 Google Cloud 역할이 필요합니다.

  • roles/gkehub.gatewayAdmin. 이 역할을 통해 그룹 구성원이 Connect Gateway API에 액세스할 수 있습니다.
    • 그룹 구성원에게 연결된 클러스터에 대한 읽기 전용 액세스 권한만 필요한 경우 roles/gkehub.gatewayReader를 대신 사용할 수 있습니다.
    • 그룹 구성원에게 연결된 클러스터에 대한 읽기/쓰기 액세스 권한이 필요한 경우 roles/gkehub.gatewayEditor를 대신 사용할 수 있습니다.
  • roles/gkehub.viewer. 이 역할을 통해 그룹 구성원이 등록된 클러스터 멤버십을 볼 수 있습니다.

다음과 같이 gcloud projects add-iam-policy-binding 명령어를 사용하여 이러한 역할을 부여합니다.

gcloud projects add-iam-policy-binding --member=group:GROUP_NAME@DOMAIN --role=GATEWAY_ROLE PROJECT_ID
gcloud projects add-iam-policy-binding --member=group:GROUP_NAME@DOMAIN --role=roles/gkehub.viewer PROJECT_ID

각 항목의 의미는 다음과 같습니다.

  • GROUP_NAME은 역할을 부여할 Google 그룹입니다.
  • DOMAIN은 Google Workspace 도메인입니다.
  • GROUP_NAME@DOMAINgke-security-groups@DOMAIN 아래에 중첩된 그룹입니다.
  • GATEWAY_ROLEroles/gkehub.gatewayAdmin, roles/gkehub.gatewayReader 또는 gkehub.gatewayEditor 중 하나입니다.
  • PROJECT_ID는 사용자의 프로젝트입니다.

IAM 권한 및 역할 부여에 대한 자세한 내용은 리소스에 대한 액세스 권한 부여, 변경, 취소를 참조하세요.

역할 기반 액세스 제어(RBAC) 정책 구성

마지막으로 각 클러스터의 Kubernetes API 서버는 지정된 그룹에서 게이트웨이를 통해 들어오는 kubectl 명령어를 승인할 수 있어야 합니다. 각 클러스터에 대해 그룹이 클러스터에 대해 가지고 있는 권한을 지정하는 RBAC 권한 정책을 추가해야 합니다.

다음 예시에서는 cluster-admin-team 그룹의 구성원에게 cluster-admin 권한을 부여하고, 정책 파일을 /tmp/admin-permission.yaml로 저장하고, 이를 현재 컨텍스트와 연결된 클러스터에 적용하는 방법을 확인할 수 있습니다. 또한 gke-security-groups 그룹 아래에 cluster-admin-team 그룹을 포함해야 합니다.

cat <<EOF > /tmp/admin-permission.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: gateway-cluster-admin-group
subjects:
- kind: Group
  name: cluster-admin-team@example.com
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
EOF
# Apply permission policy to the cluster.
kubectl apply --kubeconfig=KUBECONFIG_PATH -f /tmp/admin-permission.yaml

RBAC 권한 지정에 대한 자세한 내용은 RBAC 승인 사용을 참조하세요.

다음 단계