GKE 네임스페이스로 배포 제한

Google Kubernetes Engine (GKE)에 배포하면 기본 Google Cloud Deploy 실행 서비스 계정이 대상 클러스터의 모든 네임스페이스에 액세스할 수 있습니다. 서비스 계정을 1개의 네임스페이스에만 배포하도록 구성할 수 있습니다.

  1. 실행 서비스 계정에 roles/container.developer IAM 역할이 없는지 확인합니다.

  2. 서비스 계정에 roles/container.clusterViewer 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
     --member="serviceAccount:SERVICE_ACCOUNT" \
     --role="roles/container.clusterViewer"
    

    이 역할은 서비스 계정이 클러스터에서 인증하도록 허용하지만 그 외에는 다른 작업을 하지 않습니다.

  3. 네임스페이스에 관리자 액세스 권한을 부여하는 Kubernetes RBAC 역할을 만듭니다.

    이 예시에서 RBAC 역할에는 clouddeploy.developer IAM 역할과 동일한 광범위한 권한이 있습니다. 권한 에스컬레이션의 위험을 최소화하려면 이러한 권한을 애플리케이션에 필요한 최소 수준으로 변경하는 것이 좋습니다. 자세한 내용은 GKE RBAC 문서를 참조하세요.

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: admin
      namespace: NAMESPACE
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    
  4. 선택한 네임스페이스의 RBAC 역할을 Google Cloud Deploy 실행 서비스 계정에 결합하는 RoleBinding를 만듭니다.

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: admin
      namespace: NAMESPACE
    subjects:
    # Google Cloud user account
    - kind: User
      name: SERVICE_ACCOUNT
    roleRef:
      kind: Role
      name: admin
      apiGroup: rbac.authorization.k8s.io
    

    이 매니페스트는 admin 역할을 실행 서비스 계정에 바인딩하는 RBAC 정책을 정의합니다. NAMESPACE는 서비스 계정에 액세스 권한을 부여할 네임스페이스입니다. 서비스 계정은 클러스터의 다른 네임스페이스에 액세스할 수 없습니다.

  5. 클러스터에 RBAC 매니페스트를 적용합니다.

    kubectl apply -f YAML_NAME