이 페이지는 인프라 운영자용으로 작성되었습니다.
이 페이지에서는 연결 해제 모드에서 실행되는 Anthos의 승인 역할, 역할 바인딩, 리소스 액세스 권한을 설명합니다.
승인 역할
연결 해제 모드에서 실행되는 Anthos에는 다음 4가지 사전 설정된 승인 역할이 있습니다.
역할 이름 | Kubernetes ClusterRole 이름(관리자 클러스터)
|
권한 |
인프라 운영자 | anthos-infrastructure-operator | 모든 리소스에 대한 전체 읽기 및 쓰기 액세스 권한 |
인프라 운영자(읽기 전용) | anthos-infrastructure-operator-read-only | Anthos 관리 센터의 대부분의 항목, ClusterRole/역할, ClusterRole/역할 바인딩, 커스텀 리소스 정의, 보안 비밀에 대한 제한된 읽기 액세스 권한에 대한 읽기 전용 액세스 권한입니다. 사용자는 대시보드를 수정할 수 있는 Grafana에 대한 쓰기 액세스 권한이 있습니다. |
플랫폼 관리자 | anthos-platform-admin |
|
플랫폼 관리자(읽기 전용) | 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
을 사용해야 합니다.-
구분 기호는 그룹 프리픽스의 일부이며, 시스템이 구분 기호를 추가하지 않습니다.
관리 센터 콘솔을 사용하여 바인딩 관리
관리 센터 콘솔의 액세스 탭을 사용하여 그룹을 기준으로 역할 바인딩을 관리할 수 있습니다.
현재 로그인된 계정보다 많은 권한을 갖는 역할로 바인딩을 업데이트하거나 추가할 수 없습니다. 예를 들어 플랫폼 관리자로 로그인되어 있으면 그룹을 인프라 운영자 역할에 바인딩할 수 없습니다.
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-system
에 logmon
라벨이 있는 관리자 클러스터 액세스 토큰, 사용자 클러스터 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
라벨로 secrets
및 configmaps
를 읽고 쓸 수 있습니다.
플랫폼 관리자(읽기 전용)
플랫폼 관리자(읽기 전용)는 다음을 제외하고 플랫폼 관리자와 동일한 액세스 권한을 갖습니다.
- 모든 쓰기 관련 동사(create, update, delete)는 부여되지 않습니다.
- 사용자 클러스터에 대한 액세스를 위해 플랫폼 관리자(읽기 전용)는 사용자 클러스터에서
view
역할로 인증된 kubeconfig만 읽을 수 있습니다.