IAM 정책 만들기

이 페이지에서는 Google Kubernetes Engine(GKE)에서 승인을 위해 ID 및 액세스 관리(IAM) 정책을 만드는 방법을 설명합니다.

개요

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

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

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

시작하기 전에

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

다음 방법 중 하나를 사용하여 기본 gcloud 설정을 진행합니다.

  • gcloud init를 사용하여 기본값 설정 과정을 진행합니다.
  • gcloud config를 사용하여 프로젝트 ID, 영역, 리전을 개별적으로 설정합니다.

gcloud init 사용

One of [--zone, --region] must be supplied: Please specify location 오류가 표시되면 이 섹션을 완료합니다.

  1. gcloud init를 실행하고 다음 안내를 따르세요.

    gcloud init

    원격 서버에서 SSH를 사용하는 경우 --console-only 플래그를 사용하여 다음 명령어로 브라우저를 실행하지 못하게 할 수 있습니다.

    gcloud init --console-only
  2. 안내를 따라 gcloud에서 Google Cloud 계정을 사용하도록 승인합니다.
  3. 새 구성을 만들거나 기존 구성을 선택합니다.
  4. Google Cloud 프로젝트를 선택합니다.
  5. 영역 클러스터의 기본 Compute Engine 영역 또는 리전 또는 Autopilot 클러스터의 리전을 선택합니다.

gcloud config 사용

  • 기본 프로젝트 ID를 설정합니다.
    gcloud config set project PROJECT_ID
  • 영역 클러스터를 사용하는 경우 기본 컴퓨팅 영역을 설정합니다.
    gcloud config set compute/zone COMPUTE_ZONE
  • Autopilot 또는 리전 클러스터를 사용하는 경우 기본 컴퓨팅 리전을 설정합니다.
    gcloud config set compute/region COMPUTE_REGION
  • gcloud를 최신 버전으로 업데이트합니다.
    gcloud components update

Kubernetes RBAC와 상호작용

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

IAM 및 RBAC는 함께 작동 가능하며, 클러스터의 리소스를 사용하기 위해서는 어느 수준에서든 충분한 권한이 항목에 있어야 합니다.

IAM 역할

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

사전 정의된 GKE 역할

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

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

역할 이름 설명 최하위 리소스
roles/container.admin Kubernetes Engine 관리자

클러스터 및 관련 Kubernetes API 객체를 전체 관리할 수 있는 액세스 권한을 제공합니다.

노드에서 서비스 계정을 설정하려면 Compute Engine 기본 서비스 계정에 대한 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)도 있어야 합니다.

프로젝트
roles/container.clusterAdmin Kubernetes Engine 클러스터 관리자

클러스터 관리에 대한 액세스 권한을 제공합니다.

노드에서 서비스 계정을 설정하려면 Compute Engine 기본 서비스 계정에 대한 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)도 있어야 합니다.

프로젝트
roles/container.clusterViewer Kubernetes Engine 클러스터 뷰어 GKE 클러스터를 가져오고 나열할 수 있는 액세스 권한입니다.
roles/container.developer Kubernetes Engine 개발자 클러스터 내에서 Kubernetes API 객체에 대한 액세스를 제공합니다. 프로젝트
roles/container.hostServiceAgentUser Kubernetes Engine 호스트 서비스 에이전트 사용자 호스트 프로젝트의 Kubernetes Engine 서비스 계정에서 클러스터 관리를 위한 공유 네트워크 리소스를 구성하도록 허용합니다. 또한 호스트 프로젝트의 방화벽 규칙을 검사할 수 있는 액세스 권한을 부여합니다.
roles/container.viewer Kubernetes Engine 뷰어 GKE 리소스에 대한 읽기 전용 액세스 권한을 제공합니다. 프로젝트

각 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.*

맞춤 역할

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

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

IAM 역할로 부여되는 권한 보기

gcloud 명령줄 도구 또는 Cloud Console을 사용하여 각 역할에서 부여되는 권한을 확인할 수 있습니다.

gcloud

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

gcloud iam roles describe roles/ROLE

ROLE을 IAM 역할로 바꿉니다. GKE 역할에는 roles/container.라는 프리픽스가 붙습니다.

예를 들면 다음과 같습니다.

gcloud iam roles describe roles/container.admin

콘솔

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

  1. Cloud Console의 IAM 메뉴에서 역할 섹션으로 이동합니다.

    IAM 페이지로 이동

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

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

IAM 역할 관리

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

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

예시

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

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

다음 단계