이 페이지에서는 Google Kubernetes Engine의 Identity and Access Management(IAM)와 Kubernetes 역할 기반 액세스 제어(RBAC)의 차이점을 설명하여 프로젝트 내 리소스에 대한 액세스를 관리하는 데 도움을 줍니다.
이 페이지는 권한 액세스를 제어하고 IAM과 RBAC의 차이점과 공통점을 이해하려는 보안 전문가를 대상으로 합니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 태스크에 대해 자세히 알아보려면 일반 GKE Enterprise 사용자 역할 및 태스크를 참조하세요.
Google Cloud 프로젝트를 만들면 만든 사람이 프로젝트의 유일한 사용자가 됩니다. 기본적으로 다른 사용자는 Google Kubernetes Engine(GKE) 리소스를 비롯해 프로젝트나 프로젝트 리소스에 액세스할 수 없습니다. GKE는 역할 기반 액세스 제어(RBAC)를 사용하여 프로젝트 및 클러스터 내의 리소스에 대한 액세스를 관리하는 여러 가지 옵션을 지원합니다.
이 페이지를 읽기 전 다음 내용을 숙지해야 합니다.
이들 메커니즘의 일부는 기능적으로 중복되지만 서로 다른 유형의 리소스를 대상으로 합니다. 각각 이 페이지의 전용 섹션에서 설명하지만 간단히 살펴보면 다음과 같습니다.
Kubernetes에서 기본 제공되는 Kubernetes RBAC는 Kubernetes 클러스터 내 객체에 세분화된 권한을 부여합니다. 이러한 권한은 클러스터 내 ClusterRole 객체 또는 Role 객체로 존재합니다. RoleBinding 객체는Kubernetes 사용자, Google Cloud 사용자, IAM 서비스 계정 또는 Google 그룹스에 역할을 부여합니다.
주로 GKE를 사용하고 클러스터 내 모든 객체 및 작업에 세분화된 권한이 필요한 경우 Kubernetes RBAC를 사용하는 것이 가장 좋습니다.
IAM은 클러스터 및 클러스터 내 객체 유형을 포함한 Google Cloud 리소스를 관리합니다. 권한은 IAM 주 구성원에게 할당됩니다.
IAM 내의 특정 Kubernetes 객체에 권한을 부여하는 메커니즘은 없습니다. 예를 들어 사용자에게 CRD(CustomResourceDefinition)를 만들 수 있는 권한을 부여할 수 있지만 특정 CustomResourceDefinition 한 개만 만들 수 있는 권한을 부여할 수는 없습니다. 또한 프로젝트의 특정 클러스터 또는 특정 네임스페이스로 생성을 제한할 수도 없습니다. IAM 역할은 프로젝트의 모든 클러스터 또는 모든 하위 프로젝트의 모든 클러스터(역할이 폴더 수준에서 적용되는 경우)에 권한을 부여합니다.
여러 Google Cloud 구성요소를 사용하면서 세분화된 Kubernetes 관련 권한을 관리할 필요가 없으면 IAM을 사용하는 것이 좋습니다.
Kubernetes RBAC
Kubernetes에는 Kubernetes 클러스터 내에 있는 세분화된 역할을 만들 수 있는 RBAC 지원 기능이 기본 제공됩니다. 역할은 특정 Kubernetes 객체 또는 특정 유형의 Kubernetes 객체를 대상으로 할 수 있으며 지정된 객체와 관련하여 역할에서 부여하는 작업(동사라고 함)을 정의합니다. RoleBinding도 Kubernetes 객체이며 사용자에게 역할을 부여합니다. GKE에서 사용자는 다음 중 하나일 수 있습니다.
- Google Cloud 사용자
- IAM 서비스 계정
- Kubernetes ServiceAccount
- Google Workspace 사용자
- Google Workspace Google 그룹
- X509 클라이언트 인증서를 사용하여 인증된 사용자
자세한 내용은 역할 기반 액세스 제어를 참조하세요.
IAM
IAM을 사용하면 주 구성원에게 역할을 부여할 수 있습니다. 역할은 권한 모음이며, 주 구성원에게 부여되는 경우 하나 이상의 Google Cloud 리소스에 대한 액세스를 제어합니다. 다음과 같은 유형의 역할을 사용할 수 있습니다.
- 기본 역할은 소유자, 편집자, 뷰어로 제한된 대략적인 권한을 제공합니다.
- 사전 정의된 역할(예: GKE용 사전 정의된 역할)은 기본 역할보다 세분화된 액세스 권한을 제공하며 다양한 일반 사용 사례에 적용됩니다.
- 커스텀 역할을 사용하면 고유한 권한 조합을 만들 수 있습니다.
주 구성원은 다음 중 하나일 수 있습니다.
- 사용자 계정
- 서비스 계정
- Google Workspace Google 그룹
- Google Workspace 도메인
- Cloud ID 도메인
IAM 정책 유형
IAM은 다음과 같은 정책 유형을 지원합니다.
- 허용 정책: 주 구성원에게 역할을 부여합니다. 자세한 내용은 허용 정책을 참조하세요.
- 거부 정책: 주 구성원에게 부여된 역할에 관계없이 주 구성원이 특정 IAM 권한을 사용하지 못하게 합니다. 자세한 내용은 거부 정책을 참조하세요.
IAM 허용 정책이 특정 주 구성원에게 관련 권한이 포함된 역할을 부여하더라도 거부 정책을 사용하면 해당 주 구성원이 프로젝트, 폴더 또는 조직에서 특정 작업을 수행하지 못하도록 제한할 수 있습니다.
IAM 권장사항
일반적인 시나리오를 용이하게 하려면 다음 IAM 사전 정의된 역할을 사용하는 것이 좋습니다.
- Kubernetes Engine 클러스터 뷰어(
roles/container.clusterViewer
): 클러스터 연결만 필요로 하는 DevOps, 엔지니어, 애플리케이션 개발자입니다. - Kubernetes Engine 클러스터 관리자(
roles/container.clusterAdmin
): Google Cloud 프로젝트에서 하나 이상의 클러스터를 관리해야 하는 플랫폼 관리자 및 클러스터 운영자입니다.
사용 가능한 사전 정의된 IAM 역할 목록은 사전 정의된 GKE 역할을 참조하세요.
GKE는 노드에 연결된 IAM 서비스 계정을 사용하여 로깅 및 모니터링과 같은 시스템 태스크를 실행합니다. 이러한 노드 서비스 계정에는 프로젝트에 대한 Kubernetes Engine 기본 노드 서비스 계정(roles/container.defaultNodeServiceAccount
) 역할이 있어야 합니다. 기본적으로 GKE는 프로젝트에 자동으로 생성되는 Compute Engine 기본 서비스 계정을 노드 서비스 계정으로 사용합니다.
Kubernetes RBAC와 IAM 상호작용
IAM과 Kubernetes RBAC는 함께 작동하여 클러스터에 대한 액세스를 관리하는 데 도움이 됩니다. RBAC는 클러스터 및 네임스페이스 수준에서 액세스를 제어하는 반면 IAM은 프로젝트 수준에서 작동합니다. 개체가 클러스터의 리소스를 사용하기 위해서는 어느 수준에서든 충분한 권한을 보유해야 합니다.