승인 역할 구성

이 페이지는 인프라 운영자용으로 작성되었습니다.

이 페이지에서는 Anthos 비공개 모드의 승인 역할, 역할 바인딩, 리소스 액세스 권한에 대해 설명합니다.

승인 역할

Anthos 비공개 모드에는 사전 설정된 4가지 승인 역할이 있습니다.

역할 이름 Kubernetes ClusterRole 이름(관리자 클러스터) 권한
인프라 운영자 anthos-infrastructure-operator 모든 리소스에 대한 전체 읽기 및 쓰기 액세스 권한
인프라 운영자(읽기 전용) anthos-infrastructure-operator-read-only Anthos 관리 센터의 대부분의 항목, ClusterRole/역할, ClusterRole/역할 바인딩, 커스텀 리소스 정의, 보안 비밀에 대한 제한된 읽기 액세스 권한에 대한 읽기 전용 액세스 권한입니다.

사용자는 대시보드를 수정할 수 있는 Grafana에 대한 쓰기 액세스 권한이 있습니다.

플랫폼 관리자 anthos-platform-admin
  • 사용자 클러스터, Anthos 기능 관리, Anthos Identity Service, Anthos Config Management에 대한 읽기 및 쓰기 액세스 권한
  • 머신에 대한 읽기 및 삭제 액세스 권한
  • 부트스트랩 서비스 및 커스텀 리소스 정의에 대한 읽기 전용 액세스 권한
플랫폼 관리자(읽기 전용) anthos-platform-admin-read-only 플랫폼 관리자가 볼 수 있는 모든 항목에 대한 읽기 전용 액세스 권한

사용자는 대시보드를 수정할 수 있는 Grafana에 대한 쓰기 액세스 권한이 있습니다.

ADMIN_KUBECONFIG에 대한 액세스 권한이 있는 모든 사용자는 Kubernetes API 서버에 대한 모든 작업을 허용하는 Kubernetes system:master 그룹의 구성원으로 인증됩니다. 예를 들어 다음을 실행하여 모든 보안 비밀을 나열할 수 있습니다.

kubectl get secrets --all-namespaces --kubeconfig=${ADMIN_KUBECONFIG}

여기서 ${ADMIN_KUBECONFIG}는 관리자 클러스터의 kubeconfig 파일 경로입니다.

ADMIN_KUBECONFIG를 사용한 액세스는 일반 사용자 이름 admin으로 인증되므로 명령어를 실행하는 사람을 추적하기가 어렵습니다. 따라서 ADMIN_KUBECONFIG를 안전한 장소에 보관하고 필요한 경우에만 사용하세요(예를 들어 초기 플랫폼 관리자 역할 바인딩을 설정할 때나 OIDC 오류에서 복구할 때).

관리 센터 및 측정항목 액세스

Anthos 비공개 모드는 이러한 역할 4개에 바인딩된 모든 사용자를 관리 센터 및 측정항목(Grafana) 액세스 허용 목록에 자동으로 동기화합니다.

읽기 전용 액세스 권한이 있는 역할이 관리 센터에서 쓰기 작업을 수행하려고 하면 거부됩니다.

역할 바인딩

관리 센터 콘솔에서 OIDC를 설정할 때 플랫폼 관리자 역할에 바인딩되는 초기 사용자를 설정할 수 있습니다. 초기 플랫폼 관리자 사용자에 대해 로그인된 kubeconfig에는 다른 사용자를 플랫폼 관리자 역할에 바인딩하기 위한 2가지 접근 방법이 있습니다.

(권장) OIDC 제공업체에서 GroupMembership을 설정하고 그룹을 기반으로 역할 바인딩 만들기

이 접근 방법은 그룹 중 하나를 사전 설정된 역할에 바인딩하여 해당 그룹의 모든 구성원에게 사전 설정된 역할과 동일한 액세스 권한을 부여합니다.

시작하기 전에

시작하기 전에 다음 항목을 확인하세요.

  • 그룹이 시작된 OIDC 제공업체를 확인합니다.
  • OIDC 프로필 탭의 그룹스 클레임 필드는 OIDC 공급업체 측의 그룹 구성원 정보가 포함된 클레임 이름과 동일해야 합니다. Anthos 비공개 모드에서는 이 필드에 기본값 groups가 적용되지만 OIDC 제공업체가 다른 값을 가진 경우 OIDC 프로필 탭에서 이를 설정해야 합니다.
  • OIDC 프로필 탭에서 그룹 프리픽스를 기록해 둡니다. 모든 그룹 이름 앞에 그룹 프리픽스를 포함해야 합니다. 예를 들어 그룹 프리픽스로 gid-가 사용되고 OIDC 제공업체에 'admin-group' 그룹이 있으면 gid-admin-group을 사용해야 합니다. - 구분 기호는 그룹 프리픽스의 일부이며, 시스템이 구분 기호를 추가하지 않습니다.

관리 센터 콘솔을 사용하여 바인딩 관리

관리 센터 콘솔의 액세스 탭을 사용하여 그룹을 기준으로 역할 바인딩을 관리할 수 있습니다. 클러스터 만들기 중 ID 프로필 적용

현재 로그인된 계정보다 많은 권한을 갖는 역할로 바인딩을 업데이트하거나 추가할 수 없습니다. 예를 들어 플랫폼 관리자로 로그인되어 있으면 그룹을 인프라 운영자 역할에 바인딩할 수 없습니다.

kubectl을 사용하여 바인딩 관리

또는 다음 명령어를 실행하여 그룹을 기준으로 역할 바인딩을 만듭니다. group=에 전달되는 값은 그룹 프리픽스가 추가된 OIDC 제공업체의 그룹 이름과 동일해야 합니다.

kubectl create clusterrolebinding anthos-platform-admin-group-binding \
--kubeconfig=ADMIN_OIDC_KUBECONFIG --clusterrole=anthos-platform-admin \
--group=gid-anthos-platform-admin-group

이제 OIDC 제공업체에서 anthos-platform-admin-group에 추가한 모든 사용자에게 모든 플랫폼 관리자 권한이 포함됩니다.

마찬가지로 다음 명령어를 사용하여 그룹을 플랫폼 관리자(읽기 전용) 역할에 바인딩할 수 있습니다.

kubectl create clusterrolebinding anthos-platform-admin-read-only-group-binding \
  --kubeconfig=ADMIN_OIDC_KUBECONFIG --clusterrole=anthos-platform-admin-read-only \
  --group=gid-anthos-platform-admin-read-only-group

권한 에스컬레이션을 방지하기 위해 플랫폼 관리자는 그룹을 인프라 운영자 또는 인프라 운영자(읽기 전용) 역할에 바인딩할 수 없습니다. 인프라 운영자의 첫 번째 그룹을 초기화하려면 ADMIN_KUBECONFIG가 필요합니다.

kubectl create clusterrolebinding anthos-platform-operator-group-binding \
  --kubeconfig=${ADMIN_KUBECONFIG} --clusterrole=anthos-infrastructure-operator --group=gid-anthos-platform-operator-group

그런 후 로그인된 인프라 운영자 계정KUBECONFIG를 사용하여 다른 그룹을 모든 역할에 바인딩할 수 있습니다.

# Bind a group to infrastructure operator (read-only):
kubectl create clusterrolebinding anthos-platform-operator-read-only-binding \
  --clusterrole=anthos-infrastructure-operator-read-only --group=gid-anthos-platform-operator-read-only-group --kubeconfig=${ADMIN_OIDC_KUBECONFIG}

사용자를 기반으로 역할 바인딩 만들기

사용자 역할을 기준으로 역할 바인딩을 만들 수도 있습니다. 역할 바인딩을 만드는 명령어는 그룹을 사용하는 것과 비슷합니다. --group--user로 바꿉니다.

또한 OIDC 프로필의 사용자 프리픽스를 모든 사용자 이름에 추가해야 합니다. 예를 들어 OIDC 제공업체가 사용자 프리픽스 uid-를 갖도록 설정되었고 joedoe@example.com을 역할에 바인딩하려면 uid-joedoe@example.com을 사용합니다.

관리 센터 콘솔의 액세스 탭을 사용하여 사용자에 대한 역할 바인딩을 관리할 수도 있습니다.

다음은 charlie@example.com에 대한 역할 바인딩을 만들고 플랫폼 관리자 권한을 부여하는 샘플 명령어입니다.

kubectl create clusterrolebinding charlie-platform-admin-binding \
  --clusterrole=anthos-platform-admin --user=uid-charlie@example.com --kubeconfig=ADMIN_OIDC_KUBECONFIG

하나의 역할 바인딩을 삭제하여 사용자의 액세스 권한을 삭제하려면 해당 바인딩을 삭제하는 대신 기존 바인딩을 업데이트할 수 있습니다(예: charlie@example.com의 플랫폼 관리자 취소).

kubectl patch clusterrolebinding charlie-platform-admin-binding \
  -p '{"subjects":[]}' --kubeconfig=${ADMIN_OIDC_KUBECONFIG}

인프라 운영자에게 ClusterRoleBinding을 삭제하도록 요청할 수도 있습니다.

참고

  • 승인에 대한 상세 설명은 RBAC 승인 사용을 참조하세요.
  • 사전 설정된 승인 역할은 사용자 클러스터에 설정되지 않습니다. 각 사용자 클러스터 액세스의 Kubernetes API 서버 액세스는 kubeconfig가 있는 모든 사용자에게 공개됩니다.
  • 플랫폼 관리자는 플랫폼 관리자가 더 높은 권한이 있는 사용자의 역할 바인딩을 삭제하지 못하도록 역할 바인딩을 삭제할 수 없습니다. 사용자의 액세스 권한을 취소하려면 사용자를 빈 제목 목록에 결합하는 역할 결합을 업데이트하면 됩니다. 관리 센터 콘솔의 ID 및 액세스 페이지에 있는 삭제 작업도 동일한 이유로 바인딩을 삭제하는 대신 역할 바인딩을 빈 제목 목록으로 업데이트합니다.
  • ClusterRoleBinding 리소스 이름은 고유해야 합니다. 동일한 이름으로 여러 개의 클러스터 역할 결합이 있으면 최근에 적용되었거나 생성된 결합만 적용됩니다.

각 사전 설정된 역할에 대한 Kubernetes 리소스 액세스 권한

이 섹션에서는 각 사전 설정된 역할에 대한 모든 Kubernetes 리소스 액세스 권한의 세부정보를 제공합니다.

인프라 운영자

인프라 운영자 역할은 어떠한 리소스에 대해 어떠한 동사도 수행할 수 있는 Kubernetes anthos-infrastructure-operator 역할에 해당합니다.

인프라 운영자(읽기 전용)

인프라 운영자(읽기 전용) 역할은 Secret에 대한 제한된 읽기 액세스 권한으로 여기에 나열된 ApiGroups의 모든 리소스를 읽을 수 있는 Kubernetes anthos-infrastructure-operator-read-only 역할에 해당합니다. Secret에 대한 읽기 액세스 권한은 로깅 및 모니터링을 위해 kube-systemlogmon 라벨이 있는 관리자 클러스터 액세스 토큰, 사용자 클러스터 kubeconfig, 보안 비밀로만 제한됩니다.

ApiGroups 리소스 동사
"" configmaps get, list, watch
"" endpoints get, list, watch
"" persistentvolumeclaims get, list, watch
"" persistentvolumeclaims/status get, list, watch
"" pods get, list, watch
"" replicationcontrollers get, list, watch
"" replicationcontrollers/scale get, list, watch
"" serviceaccounts get, list, watch
"" services get, list, watch
"" services/status get, list, watch
"" bindings get, list, watch
"" events get, list, watch
"" limitranges get, list, watch
"" namespaces/status get, list, watch
"" pods/log get, list, watch
"" pods/status get, list, watch
"" replicationcontrollers/status get, list, watch
"" resourcequotas get, list, watch
"" resourcequotas/status get, list, watch
"" namespaces get, list, watch
apiextensions.k8s.io customresourcedefinitions get, list, watch
apps * get, list, watch
autoscaling * get, list, watch
batch * get, list, watch
cert-manager.io * get, list, watch
extensions * get, list, watch
metrics.k8s.io * get, list, watch
networking.k8s.io * get, list, watch
policy * get, list, watch
rbac.authorization.k8s.io * get, list, watch
addons.gke.io * get, list, watch
authentication.gke.io * get, list, watch
baremetal.cluster.gke.io * get, list, watch
cluster.x-k8s.io * get, list, watch
managementcenter.anthos.cloud.google.com * get, list, watch

플랫폼 관리자

플랫폼 관리자 역할은 다음 액세스 권한을 갖습니다.

리소스 동사
namespaces get, list, watch, create, update
pods get, list, watch
services get, list, watch
events get, list, watch
configmaps get, list, watch
deployments get, list, watch
daemonsets get, list, watch
replicasets get, list, watch
statefulsets get, list, watch
jobs get, list, watch
cronjobs get, list, watch
memberships.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
onpremuserclusters.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
clusters.baremetal.cluster.gke.io get, list, watch, create
nodepools.baremetal.cluster.gke.io get, list, watch, create
clusters.cluster.x-k8s.io get, list, watch
machines.baremetal.cluster.gke.io get, list, watch
inventorymachines.baremetal.cluster.gke.io get, list, watch
addresspools.managementcenter.anthos.cloud.google.com get, list, watch
bootstrapservicebindings.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
bootstrapservices.managementcenter.anthos.cloud.google.com get, list, watch
bootstrapservicebindingitems.managementcenter.anthos.cloud.google.com get, list, watch
adminoperators.managementcenter.anthos.cloud.google.com get, list, watch
clientconfigs.authentication.gke.io get, list, watch, create, update, delete
configmanagementbindings.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
configmanagementfeaturespecs.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
configmanagementbindingitems.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
servicemeshbindings.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
servicemeshfeaturespecs.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
servicemeshbindingitems.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
identityservicebindings.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
identityservicefeaturespecs.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
identityservicebindingitems.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
updatablecomponents.managementcenter.anthos.cloud.google.com get, list, watch
domainconfigs.managementcenter.anthos.cloud.google.com get, list, watch, create, update, delete
logmons.addons.gke.io get, list, watch, create, update, delete
clusterrolebindings.rbac.authorization.k8s.io get, list, watch, create, update
customresourcedefinitions.apiextensions.k8s.io get, list, watch

플랫폼 관리자는 사용자 클러스터에 cluster-admin 역할로 인증된 사용자가 kubeconfig를 얻을 수 있도록 secrets에 대한 읽기 액세스 권한을 갖습니다.

플랫폼 관리자는 Logmon 구성을 위해 kube-system에서 logmon 라벨로 secretsconfigmaps를 읽고 쓸 수 있습니다.

플랫폼 관리자(읽기 전용)

플랫폼 관리자(읽기 전용)는 다음을 제외하고 플랫폼 관리자와 동일한 액세스 권한을 갖습니다.

  • 모든 쓰기 관련 동사(create, update, delete)는 부여되지 않습니다.
  • 사용자 클러스터에 대한 액세스를 위해 플랫폼 관리자(읽기 전용)는 사용자 클러스터에서 view 역할로 인증된 kubeconfig만 읽을 수 있습니다.

다음 단계