IAM 정책 만들기


이 페이지에서는 Google Kubernetes Engine(GKE)에서 승인을 위해 Identity and Access Management(IAM) 정책을 만드는 방법을 설명합니다.

개요

모든 Google Cloud, GKE, Kubernetes API 호출을 사용하려면 요청 수행 계정에 필요한 권한이 있어야 합니다. 기본적으로 개발자를 제외한 어떤 사람도 프로젝트나 해당 리소스에 액세스할 수 없습니다. IAM을 사용하면 프로젝트에 액세스할 수 있는 사용자와 이러한 사용자가 수행할 수 있는 작업을 관리할 수 있습니다. IAM 권한은 Kubernetes RBAC와 함께 작동하여 클러스터나 네임스페이스에 있는 특정 객체에 대한 액세스를 세부적으로 제어할 수 있습니다. IAM은 GKE와 관련된 몇 가지 사전 정의된 역할을 제공하지만 프로젝트와 조직 수준의 권한에 더욱 중점을 두고 있습니다.

사용자와 서비스 계정에 Google Cloud 프로젝트에 대한 액세스 권한을 부여하려면 프로젝트 팀원으로 추가한 후 팀원에게 역할을 할당합니다. 역할은 계정이 액세스할 수 있는 Google Cloud 리소스와 이러한 계정이 수행할 수 있는 작업을 정의합니다.

GKE에서는 IAM을 사용하여 클러스터에 액세스하여 작업을 수행할 수 있는 사용자 및 서비스 계정도 관리할 수 있습니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

Kubernetes RBAC와 상호작용

Kubernetes의 기본 역할 기반 액세스 제어(RBAC) 시스템을 통해 클러스터의 리소스에 대한 액세스 권한을 관리할 수도 있습니다. RBAC는 클러스터 및 네임스페이스 수준에서 액세스를 제어하는 반면 IAM은 프로젝트 수준에서 작동합니다.

IAM과 RBAC가 함께 작동할 수 있습니다. 항목이 클러스터의 리소스와 함께 작동하려면 충분한 RBAC 및 IAM 권한이 있어야 합니다.

IAM 역할

다음 섹션에서는 Google Cloud에서 제공되는 IAM 역할을 설명합니다.

사전 정의된 GKE 역할

IAM은 특정 Google Cloud 리소스에 대한 액세스 권한을 부여하고 다른 리소스에 승인되지 않은 액세스를 방지하는 사전 정의된 역할을 제공합니다.

IAM은 GKE에 다음과 같은 사전 정의된 역할을 제공합니다.

Role Title Description Lowest resource
roles/container.admin Kubernetes Engine Admin

Provides access to full management of clusters and their Kubernetes API objects.

To set a service account on nodes, you must also have the Service Account User role (roles/iam.serviceAccountUser) on the user-managed service account that your nodes will use.

  • Project
roles/container.clusterAdmin Kubernetes Engine Cluster Admin

Provides access to management of clusters.

To set a service account on nodes, you must also have the Service Account User role (roles/iam.serviceAccountUser) on the user-managed service account that your nodes will use.

  • Project
roles/container.clusterViewer Kubernetes Engine Cluster Viewer

Provides access to get and list GKE clusters.

roles/container.defaultNodeServiceAccount Kubernetes Engine Default Node Service Account Beta Least privilege role to use as the default service account for GKE Nodes.
roles/container.developer Kubernetes Engine Developer

Provides access to Kubernetes API objects inside clusters.

  • Project
roles/container.hostServiceAgentUser Kubernetes Engine Host Service Agent User

Allows the Kubernetes Engine service account in the host project to configure shared network resources for cluster management. Also gives access to inspect the firewall rules in the host project.

roles/container.viewer Kubernetes Engine Viewer

Provides read-only access to resources within GKE clusters, such as nodes, pods, and GKE API objects.

  • Project

각 역할의 개별 권한에 대한 전체 목록은 Google Kubernetes Engine 역할을 참조하세요. gcloud CLI나 Google Cloud 콘솔을 사용하여 각 IAM 역할의 권한을 볼 수도 있습니다. 자세한 내용은 IAM 역할에서 부여한 권한 보기를 참조하세요.

기본 IAM 역할

기본 IAM 역할은 모든 Google Cloud 리소스에 대한 전역, 프로젝트 수준의 액세스 권한을 사용자에게 부여합니다. 프로젝트와 클러스터를 안전하게 유지하려면 가능한 한 사전 정의된 역할을 사용합니다.

기본 역할에 대한 자세한 내용은 IAM 문서의 기본 역할을 참조하세요.

서비스 계정 사용자 역할

서비스 계정 사용자는 Google Cloud 사용자 계정에 서비스 계정에서 작업을 수행하는 것처럼 작업을 수행할 수 있는 권한을 부여합니다.

  • iam.serviceAccountUser 역할을 프로젝트의 사용자에게 부여하면 이후에 생성될 수 있는 서비스 계정을 포함하여 이 프로젝트의 모든 서비스 계정에 부여된 모든 역할이 사용자에게 부여됩니다.

  • iam.serviceAccountUser 역할을 특정 서비스 계정의 사용자에게 부여하면 이 서비스 계정에 부여된 모든 역할이 사용자에게 부여됩니다.

이 역할에는 다음 권한이 포함됩니다.

  • iam.serviceAccounts.actAs
  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list

ServiceAccountUser 역할에 대한 자세한 내용은 IAM 문서의 ServiceAccountUser를 참조하세요.

다음 명령어는 서비스 계정 사용자 역할을 부여하는 구문을 보여줍니다.

gcloud iam service-accounts add-iam-policy-binding \
  SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --member=user:USER \
  --role=roles/iam.serviceAccountUser

다음을 바꿉니다.

  • SA_NAME: 서비스 계정의 이름입니다.
  • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
  • USER: 사용자의 이메일 주소입니다.

호스트 서비스 에이전트 사용자 역할

호스트 서비스 에이전트 사용자 역할은 공유 VPC 클러스터에서만 사용됩니다. 이 역할에는 다음 권한이 포함됩니다.

  • compute.firewalls.get
  • container.hostServiceAgent.*
  • dns.networks.bindDNSResponsePolicy
  • dns.networks.bindPrivateDNSPolicy
  • dns.networks.bindPrivateDNSZone

커스텀 역할

사전 정의된 역할이 요구사항을 충족하지 않는 경우 직접 정의한 권한이 포함된 커스텀 역할을 만들 수 있습니다.

커스텀 역할을 만들고 할당하는 방법은 커스텀 역할 만들기 및 관리를 참조하세요.

IAM 역할에서 부여한 권한 보기

gcloud CLI나 Google Cloud 콘솔을 사용하여 각 역할에서 부여하는 권한을 볼 수 있습니다.

gcloud

특정 역할로 부여되는 권한을 보려면 다음 명령어를 실행하세요.

gcloud iam roles describe roles/ROLE

ROLE을 IAM 역할로 바꿉니다. GKE 역할에는 gcloud iam roles describe roles/container.admin과 같이 roles/container 프리픽스가 추가됩니다.

콘솔

특정 역할에서 부여되는 권한을 확인하려면 다음 단계를 수행하세요.

  1. Google Cloud 콘솔에서 IAM 및 관리자 페이지의 역할 섹션으로 이동합니다.

    IAM 및 관리자로 이동

  2. GKE의 역할을 보려면 필터 테이블 필드에 Kubernetes Engine을 입력합니다.

  3. 보려는 역할을 선택합니다. 역할에 대한 설명과 할당된 권한 목록이 표시됩니다.

IAM 역할 관리

사용자의 IAM 역할과 권한을 관리하는 방법은 IAM 문서의 프로젝트 구성원에게 액세스 권한 부여, 변경, 취소를 참조하세요.

서비스 계정서비스 계정에 역할 부여를 참조하세요.

예시

GKE에서 IAM의 작동 방식에 대한 몇 가지 예시는 다음과 같습니다.

  • 새로운 직원이 입사했습니다. Google Cloud 프로젝트에 새 직원을 추가해야 하지만 프로젝트의 클러스터와 다른 Google Cloud 리소스에 대한 보기 권한만 필요합니다. 프로젝트 소유자는 새 직원에게 프로젝트 수준의 Compute 뷰어 역할을 할당합니다. 이 역할은 Compute Engine 리소스인 노드를 가져오고 나열할 수 있는 읽기 전용 액세스 권한을 제공합니다.
  • 이 직원이 작업에 참여함으로써 gcloud 또는 Google Cloud 콘솔을 사용하여 클러스터를 업데이트해야 합니다. 이 작업을 수행하려면 container.clusters.update 권한이 필요하므로 프로젝트 소유자는 직원에게 Kubernetes Engine 클러스터 관리자 역할을 할당합니다. 이제 직원의 권한에는 Kubernetes Engine 클러스터 관리자 역할과 Compute 뷰어 역할이 모두 부여되었습니다.
  • 직원이 배포에서 발생한 문제의 원인을 조사해야 합니다. 클러스터에서 실행 중인 포드를 확인하기 위해 kubectl get pods를 실행해야 합니다. 이 직원에게는 이미 Compute 뷰어 역할이 있지만 포드를 나열할 수는 없습니다. 이 직원에게는 Kubernetes Engine 뷰어 역할이 필요합니다.
  • 직원이 새 클러스터를 만들어야 합니다. 프로젝트 소유자는 이 직원에게 PROJECT_NUMBER-compute@developer.gserviceaccount.com 서비스 계정의 서비스 계정 사용자 역할을 부여하여 직원 계정에서 Compute Engine의 기본 서비스 계정에 액세스할 수 있도록 합니다. 이 서비스 계정에는 다양한 권한 집합을 제공하는 편집자 역할이 있습니다.

다음 단계