승인 역할
Anthos 비공개 모드에는 사전 설정된 승인 역할 4개가 제공됩니다.
역할 이름 | Kubernetes ClusterRole 이름(관리자 클러스터)
|
권한 |
인프라 운영자 | cluster-admin | 모든 리소스에 대한 전체 읽기 및 쓰기 액세스 권한 |
인프라 운영자(읽기 전용) | 보기 | 역할, 역할 결합, 보안 비밀을 제외한 관리 센터의 대부분의 항목에 대한 읽기 전용 액세스 권한
사용자는 현재 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
를 사용한 액세스는 일반 사용자 이름 admin
으로 인증되므로 명령어를 실행하는 사람을 추적하기가 어렵습니다.
따라서 ADMIN_KUBECONFIG
를 안전한 장소에 보관하고 필요한 경우에만(예: 초기 플랫폼 연산자 역할 결합을 설정할 때나 OIDC 오류에서 복구할 때) 사용하세요.
중요: 사용자 및 그룹에 system:
프리픽스가 붙어있지 않은지 확인하세요. system:
프리픽스는 Kubernetes 시스템용으로 예약되어 있습니다.
웹 콘솔 및 측정항목 액세스
Anthos 비공개 모드는 이러한 역할 4개에 결합된 모든 사용자를 관리 센터 및 측정항목(Grafana) 액세스 허용 목록에 자동으로 동기화합니다.
읽기 전용 액세스 권한이 있는 역할이 관리 센터에서 쓰기 작업을 수행하려고 하면 거부됩니다.
역할 바인딩
웹 콘솔에서 OIDC를 설정할 때 플랫폼 관리자 역할에 binding된 초기 사용자를 설정할 수 있습니다. 초기 플랫폼 관리자 사용자에 대해 로그인된 kubeconfig에는 다른 사용자를 플랫폼 관리자 역할에 binding하기 위한 2가지 접근 방법이 있습니다.
접근 방법 I: (권장) OIDC 공급자에 GroupMembership을 설정하고 그룹을 기준으로 역할 바인딩 만들기
이 접근 방법은 그룹 중 하나를 사전 설정된 역할에 binding하여 해당 그룹의 모든 구성원에게 사전 설정된 역할과 동일한 액세스 권한을 부여합니다.
시작하기 전에 다음 항목을 확인하세요.
- 그룹이 시작된 OIDC 제공업체를 확인합니다.
- 'OIDC 프로필' 탭의 '그룹 클레임' 필드는 OIDC 제공업체 측의 그룹 멤버십 정보를 포함하는 클레임 이름과 동일해야 합니다. Anthos 비공개 모드는 여기에 기본값
groups
를 지정하지만, OIDC 제공업체에 다른 값이 포함된 경우, 'OIDC 프로필' 탭에서 이를 설정했는지 확인해야 합니다. - 'OIDC 프로필' 탭에서 '그룹 프리픽스'를 기록해 둡니다. 모든 그룹 이름 앞에 그룹 프리픽스를 포함해야 합니다. 예를 들어 그룹 프리픽스로
gid-
가 사용되고 OIDC 제공업체에 'admin-group' 그룹이 있으면gid-admin-group
을 사용해야 합니다.-
구분 기호는 그룹 프리픽스의 일부이며, 시스템이 구분 기호를 추가하지 않습니다.
관리 센터 UI에서 액세스 관리 탭을 사용하여 그룹을 기준으로 역할 바인딩을 관리할 수 있습니다.
현재 로그인된 계정보다 많은 권한을 갖는 역할로 binding을 업데이트하거나 추가할 수 없습니다. 예를 들어 플랫폼 관리자로 로그인되어 있으면 그룹을 인프라 운영자 역할에 binding할 수 없습니다.
또는 다음 명령어를 실행하여 그룹을 기준으로 역할 바인딩을 만듭니다. 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
에 추가된 모든 사용자에게 플랫폼 관리자 권한이 있습니다.
마찬가지로 다음 명령어를 사용하여 그룹을 플랫폼 관리자(읽기 전용) 역할에 binding할 수 있습니다.
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
권한 에스컬레이션을 방지하기 위해 플랫폼 관리자는 그룹을 인프라 운영자 또는 인프라 운영자(읽기 전용) 역할에 binding할 수 없습니다. 인프라 운영자의 첫 번째 그룹을 초기화하려면 ADMIN-KUBECONFIG
가 필요합니다.
kubectl create clusterrolebinding anthos-platform-operator-group-binding \
--kubeconfig=${ADMIN_KUBECONFIG} --clusterrole=cluster-admin --group=gid-anthos-platform-operator-group
그런 후 로그인된 인프라 운영자 계정에 KUBECONFIG
를 사용하여 다른 그룹을 모든 역할에 binding할 수 있습니다.
# Bind a group to Infrastructure Operator (Read Only):
kubectl create clusterrolebinding anthos-platform-operator-read-only-binding \
--clusterrole=view --group=gid-anthos-platform-operator-read-only-group --kubeconfig=${ADMIN_OIDC_KUBECONFIG}
접근 방법 II: 사용자를 기준으로 역할 바인딩 만들기
사용자 역할을 기준으로 역할 결합을 만들 수도 있습니다. 역할 결합을 만드는 명령어는 그룹을 사용하는 것과 비슷합니다. --group
을 --user
로 바꿔야 합니다.
또한 OIDC 프로필의 사용자 프리픽스를 모든 사용자 이름에 추가해야 합니다.
예를 들어 OIDC 제공업체가 사용자 프리픽스 uid-
를 갖도록 설정되었고 joedoe@example.com
을 역할에 binding하려면 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}
하나의 역할 바인딩을 삭제하여 사용자의 액세스 권한을 삭제하려면 해당 binding을 삭제하는 대신 기존 binding을 업데이트할 수 있습니다(예: charlie@example.com
의 플랫폼 관리자 취소).
kubectl patch clusterrolebinding charlie-platform-admin-binding \
-p '{"subjects":[]}' --kubeconfig=${ADMIN_OIDC_KUBECONFIG}
인프라 운영자에게 ClusterRoleBinding
을 삭제하도록 요청할 수도 있습니다.
권장사항: Kubernetes는 액세스 권한이 적은 사용자가 더 많은 액세스 권한을 가진 사용자의 binding을 삭제하지 못하도록 하므로 ClusterRoleBinding
에 대한 삭제 권한이 플랫폼 관리자에게 부여되지 않습니다. 해당 그룹에서 사용자를 삭제할 수 있으므로 OIDC 공급자의 그룹을 사용하여 사용자를 관리하는 것이 좋습니다.
참고
- 자세한 내용은 공식 설명서의 역할 기반 액세스 제어(RBAC)에서 확인할 수 있습니다.
- 사용자 클러스터에는 사전 설정된 승인 역할이 설정되지 않았습니다. 각 사용자 클러스터 액세스의 Kubernetes API 서버 액세스는 kubeconfig가 있는 모든 사용자에게 공개됩니다.
- 플랫폼 관리자는 플랫폼 관리자가 더 높은 권한이 있는 사용자의 역할 결합을 삭제하지 못하도록 역할 결합을 삭제할 수 없습니다. 사용자의 액세스 권한을 취소하려면 사용자를 빈 제목 목록에 binding하는 역할 바인딩을 업데이트하면 됩니다. 액세스 관리 UI의 삭제 작업은 또한 동일한 이유로 인해 binding을 삭제하는 대신 역할 바인딩을 빈 제목 목록으로 업데이트합니다.
- ClusterRoleBinding의 이름은 고유해야 합니다. 같은 이름의 클러스터 역할 바인딩이 여러 개 있으면 마지막으로 적용하거나 만든 항목만 적용됩니다.
각 사전 설정된 역할에 대한 Kubernetes 리소스 액세스 권한
이 섹션에서는 각 사전 설정된 역할에 대한 모든 Kubernetes 리소스 액세스 권한의 세부정보를 제공합니다.
인프라 운영자
인프라 운영자는 모든 리소스에 대해 모든 동사를 수행할 수 있는 Kubernetes 기본 제공 cluster-admin
역할에 해당합니다.
인프라 운영자(읽기 전용)
인프라 운영자(읽기 전용)는 Role
, ClusterRole
, RoleBinding
, ClusterRoleBinding
, Secret
을 제외하고 모든 리소스를 읽을 수 있는 k8s 기본 제공 view
역할에 해당합니다.
사용자 클러스터 kubeconfig와 같은 많은 유용한 정보가 Secrets
로 저장되기 때문에 인프라 운영자(읽기 전용)가 완전히 작동하지 않습니다.
플랫폼 관리자
플랫폼 관리자는 다음과 같은 액세스 권한을 가질 수 있습니다.
리소스 | 동사 |
---|---|
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 |
domainidpmappings.managementcenter.anthos.cloud.google.com | get, list, watch, create, update, delete |
domainidpmappings.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 |
플랫폼 관리자는 또한 사용자 클러스터에 cluster-admin
역할로 인증된 사용자가 kubeconfig를 얻을 수 있도록 secrets
에 대한 읽기 액세스 권한을 갖습니다.
플랫폼 관리자는 또한 Logmon 구성을 위해 kube-system
에서 logmon
라벨로 secrets
및 configmaps
를 읽고 쓸 수 있습니다.
플랫폼 관리자(읽기 전용)
플랫폼 관리자(읽기 전용)는 다음을 제외하고 플랫폼 관리자와 동일한 액세스 권한을 갖습니다.
- 모든 쓰기 관련 동사(create, update, delete)는 부여되지 않습니다.
- 사용자 클러스터에 대한 액세스를 위해 플랫폼 관리자(읽기 전용)는 사용자 클러스터에서
view
역할로 인증된 kubeconfig만 읽을 수 있습니다.