역할 기반 액세스 제어

이 페이지에서는 Google Kubernetes Engine의 역할 기반 액세스 제어에 대한 개요를 제공합니다.

개요

Kubernetes RBAC(역할 기반 액세스 제어) 시스템을 사용하면 클러스터에서 실행되는 API 리소스에 사용자가 액세스하는 방법을 세밀하게 제어할 수 있습니다. RBAC를 사용하여 클러스터 사용자에 대해 권한을 동적으로 구성하고 사용자가 상호작용할 수 있는 리소스 종류를 정의할 수 있습니다.

전체 클러스터에 또는 클러스터 내부의 특정 네임스페이스에 적용되는 RBAC 권한을 만들 수 있습니다. 클러스터 전체 권한은 특정 API 리소스에 대한 특정 사용자 액세스를 제한하는 데 유용합니다(예: 보안 정책 또는 보안 비밀). 네임스페이스 특정 권한은 각각의 고유 네임스페이스 내에서 작동하는 여러 사용자 그룹이 있는 경우에 유용합니다. RBAC는 해당 네임스페이스 내에 있는 클러스터 리소스에 대해서만 사용자가 액세스할 수 있도록 보장하는 데 도움이 됩니다.

시작하기 전에

이 작업을 준비하려면 다음 단계를 수행하세요.

  • Google Kubernetes Engine API가 사용 설정되었는지 확인합니다.
  • Google Kubernetes Engine API 사용 설정
  • Cloud SDK가 설치되었는지 확인합니다.
  • 기본 프로젝트 ID를 설정합니다.
    gcloud config set project [PROJECT_ID]
  • 영역 클러스터를 사용하는 경우 기본 컴퓨팅 영역을 설정합니다.
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 지역 클러스터를 사용하는 경우 기본 컴퓨팅 지역을 설정합니다.
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud를 최신 버전으로 업데이트합니다.
    gcloud components update

Identity and Access Management와 상호작용

GKE는 또한 Cloud IAM(Identity and Access Management)을 사용하여 클러스터에 대한 액세스를 제어합니다. 하지만 Cloud IAM은 프로젝트별 기준으로 작동합니다. 즉, 사용자가 특정 GCP 프로젝트에 있는 클러스터에 액세스하기 위해서는 프로젝트 수준의 권한이 필요합니다.

RBAC 권한은 각 클러스터 내의 리소스 액세스에 대해 세부적인 제어 기능을 제공합니다. 따라서 Cloud IAM과 RBAC는 함께 작동 가능하며, 사용자는 클러스터에 있는 리소스를 사용하기 위해 어느 수준에서든 충분한 권한이 있어야 합니다.

역할 기반 액세스 제어를 사용하기 위한 기본 요건

다음 명령어를 실행하여 Kubernetes에서 역할을 만들 수 있는 능력을 사용자에게 부여해야 합니다. [USER_ACCOUNT]는 사용자의 이메일 주소입니다.

kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user [USER_ACCOUNT]

역할 기반 액세스 제어 설정

클러스터의 rbac.authorization.k8s.io API 그룹에서 객체를 만들어서 RBAC 권한을 정의합니다. kubectl 명령줄 인터페이스를 사용하거나 프로그래매틱 방식으로 객체를 만들 수 있습니다.

2가지 종류의 객체를 만들어야 합니다.

  1. 사용자 집합에 대해 허용되는 리소스 유형 및 작업을 정의하는 Role 또는 ClusterRole 객체
  2. 하나 이상의 특정 사용자와 Role(또는 ClusterRole)을 연결하는 RoleBinding 또는 ClusterRoleBinding

RBAC 권한은 순수하게 부가적입니다. 여기에는 '거부' 규칙이 없습니다. RBAC 권한 구조를 만들 때는 클러스터 리소스에 대한 액세스 권한을 사용자에게 '부여'하는 것을 고려해야 합니다.

Role에서 권한 정의

Kubernetes Role 또는 ClusterRole API 객체 내에서 권한을 정의합니다. Role은 단일 네임스페이스 내의 리소스에 대한 액세스 권한을 부여하고, ClusterRole은 전체 클러스터의 리소스에 대한 액세스 권한을 부여합니다.

Role(또는 ClusterRole) 객체 내에서 rules 집합으로 권한을 정의합니다. rules는 해당 역할의 네임스페이스, 리소스 유형, 허용 가능한 작업을 결정합니다. 예를 들어 특정 네임스페이스의 모든 포드 리소스에 대해 읽기 액세스 권한(get, watch, list와 같은 작업)을 부여하는 Role을 만들 수 있습니다.

RoleClusterRole 비교

ClusterRole 권한은 전체 클러스터에 적용되기 때문에 이를 사용하면 Role로 액세스할 수 있는 여러 종류의 리소스에 대한 액세스를 제어할 수 있습니다. 예를 들면 다음과 같습니다.

  • 노드와 같은 클러스터 범위의 리소스
  • /healthz와 같은 리소스가 아닌 엔드포인트
  • 모든 네임스페이스 간의 네임스페이스로 지정된 리소스(예: 네임스페이스에 관계없이 전체 클러스터 간의 모든 포드)

RoleBinding으로 사용자에 권한 할당

Role(또는 ClusterRole)을 만든 후에는 사용자 집합에 Role(또는 ClusterRole)의 권한을 부여하기 위해 RoleBinding(또는 ClusterRoleBinding) 객체를 만들어야 합니다. 사용자는 개별 사용자이거나 Kubernetes 서비스 계정일 수 있습니다.

RoleBinding(또는 ClusterRoleBinding)에는 사용자 목록이 포함되며, 해당 사용자에게 부여하는 Role(또는 ClusterRole) 참조가 포함됩니다.

API 사용 및 예

Kubernetes API를 사용해서 RBAC에 필요한 Role, ClusterRole, RoleBinding, ClusterRoleBinding 객체를 만드는 방법에 대한 자세한 내용은 Kubernetes 문서의 역할 기반 액세스 제어 승인 사용을 참조하세요.

주의사항

다음 섹션에서는 Kubernetes의 RBAC 지원과 관련된 주의사항을 설명합니다.

기본 검색 역할

클러스터는 기본 ClusterRoles 및 ClusterRoleBindings 집합을 사용해서 생성됩니다. 유효한 사용자 인증 정보로 수행된 요청은 system:authenticated 그룹에 배치되고, 다른 모든 요청은 system:unauthenticated에 배치됩니다. 기본적으로 system:authenticatedsystem:unauthenticated 모두 system:basic-usersystem:discovery ClusterRole을 부여합니다. system:basic-user ClusterRole은 사용자가 SelfSubjectAccessReview로 클러스터에서 자신의 권한을 테스트할 수 있게 해줍니다. system:discovery 역할은 사용자가 클러스터에 추가된 CustomResourceDefinitions 정보를 드러낼 수 있는 검색 API를 읽을 수 있게 해줍니다.

system:discovery ClusterRole에서 허용되는 API 엔드포인트를 보려면 다음 명령어를 실행하세요.

kubectl get clusterroles system:discovery -o yaml

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine