GKE의 액세스 범위


이 페이지에서는 Google Kubernetes Engine(GKE) 클러스터의 노드에 부여되는 기본 액세스 범위를 설명합니다.

액세스 범위란 무엇인가요?

액세스 범위는 노드에 대한 권한과 워크로드에서 애플리케이션 기본 사용자 인증 정보(ADC)를 사용하는 경우 노드에서 실행되는 워크로드에 대한 권한을 부여하는 기존 방법입니다. 액세스 범위는 클라이언트 라이브러리나 gcloud CLI에서 API 호출에 사용되는 OAuth 범위를 정의합니다.

고유한 액세스 범위를 지정하지 않는 것이 좋습니다. 대신 IAM 권한 또는 Kubernetes 역할 기반 액세스 제어(RBAC)를 사용하여 특정 IAM 서비스 계정이나 Kubernetes 서비스 계정에 대한 액세스를 부여해야 합니다.

기본 액세스 범위

새 GKE 클러스터를 만들 때 Google Cloud는 노드에서 사용하는 서비스 계정을 기반으로 노드에 기본 액세스 범위 집합을 할당합니다. 이러한 액세스 범위는 GKE의 특정 기능을 사용 설정합니다. Standard 클러스터를 만들 때 --scopes 플래그를 사용하여 수동으로 액세스 범위를 설정할 수도 있습니다. Autopilot 클러스터 또는 노드 풀 기존 노드 풀의 액세스 범위는 수정할 수 없습니다. 대신 새 범위로 새 노드 풀을 만들고 해당 노드 풀로 워크로드를 마이그레이션합니다.

다음 섹션에서는 커스텀 서비스 계정 지정 여부와 액세스 범위 수동 지정 여부에 따라 GKE에서 노드에 추가하는 기본 액세스 범위를 설명합니다.

Autopilot 클러스터

서비스 계정 액세스 범위를 직접 지정했나요? GKE에서 추가하는 액세스 범위
Compute Engine 기본 서비스 계정 아니요
  • https://www.googleapis.com/auth/devstorage.read_only
  • https://www.googleapis.com/auth/service.management.readonly
  • https://www.googleapis.com/auth/servicecontrol
  • https://www.googleapis.com/auth/trace.append
  • https://www.googleapis.com/auth/logging.write: Cloud Logging이 사용 설정된 경우에 추가됨
  • https://www.googleapis.com/auth/monitoring: Cloud Monitoring이 사용 설정된 경우에 추가됨
수동으로 지정된 범위
커스텀 서비스 계정 아니요 https://www.googleapis.com/auth/cloud-platform
수동으로 지정된 범위

Standard 클러스터

서비스 계정 액세스 범위가 수동으로 지정됐는지 여부 GKE 액세스 범위
Compute Engine 기본 서비스 계정 아니요
  • https://www.googleapis.com/auth/devstorage.read_only
  • https://www.googleapis.com/auth/service.management.readonly
  • https://www.googleapis.com/auth/servicecontrol
  • https://www.googleapis.com/auth/trace.append
  • https://www.googleapis.com/auth/logging.write: Cloud Logging이 사용 설정된 경우에 추가됨
  • https://www.googleapis.com/auth/monitoring: Cloud Monitoring이 사용 설정된 경우에 추가됨
  • 수동으로 지정된 범위
  • https://www.googleapis.com/auth/monitoring.write
  • https://www.googleapis.com/auth/logging.write: Cloud Logging이 사용 설정된 경우에 추가됨
  • https://www.googleapis.com/auth/monitoring: Cloud Monitoring이 사용 설정된 경우에 추가됨
커스텀 서비스 계정 아니요
  • https://www.googleapis.com/auth/userinfo.email
  • https://www.googleapis.com/auth/cloud-platform
  • 수동으로 지정된 범위
  • https://www.googleapis.com/auth/monitoring.write
  • https://www.googleapis.com/auth/logging.write: Cloud Logging이 사용 설정된 경우에 추가됨
  • https://www.googleapis.com/auth/monitoring: Cloud Monitoring이 사용 설정된 경우에 추가됨

워크로드를 위한 커스텀 서비스 계정 구성

IAM은 Google Cloud 프로젝트 내의 사용자 및 서비스 계정에 승인된 역할을 부여하기 위한 액세스 제어 시스템입니다. 서비스 계정은 사용자를 대신하여 애플리케이션 배포와 같은 작업을 수행하는 특수한 Google 계정입니다. IAM을 사용하여 서비스 계정을 만든 다음 IAM 정책 binding을 사용하여 계정을 보호합니다.

워크로드에 Compute Engine 액세스가 필요한 경우 서비스 계정에 Compute Engine 관리자 역할을 부여합니다. 워크로드가 Artifact Registry에서 비공개 이미지를 가져와야 하는 경우 Artifact Registry 저장소에 대한 액세스 제어 구성을 참조하세요.

서비스 계정 만들기

kubernetes-engine-node-sa라는 이름이 지정된 커스텀 서비스 계정을 만들려면 다음 명령어를 실행하세요.

export NODE_SA_NAME=kubernetes-engine-node-sa
gcloud iam service-accounts create $NODE_SA_NAME \
  --display-name "GKE Node Service Account"
export NODE_SA_EMAIL=`gcloud iam service-accounts list --format='value(email)' \
  --filter='displayName:GKE Node Service Account'`

최소 역할 부여

GKE 노드가 작동하는 데 필요한 최소한의 역할과 권한을 사용해 서비스 계정을 구성하려면 다음 명령어를 실행합니다. 여기서 $PROJECT프로젝트 ID입니다.

export PROJECT=`gcloud config get-value project`
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/monitoring.metricWriter
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/monitoring.viewer
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/logging.logWriter

추가 역할 부여

서비스 계정에 Compute Engine 관리자 역할을 부여하려면 다음 명령어를 실행하세요.

gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/compute.admin

Artifact Registry에 저장된 비공개 이미지에 대한 액세스 권한을 서비스 계정에 부여하는 방법은 Google Kubernetes Engine 클러스터에 대한 액세스 권한 부여를 참조하세요.

커스텀 서비스 계정으로 클러스터 또는 노드 풀 만들기

커스텀 서비스 계정을 사용하는 클러스터를 만들려면 다음 명령어를 실행하세요.

gcloud container clusters create --service-account=$NODE_SA_EMAIL

기존 클러스터에서 노드 풀을 만들려면 다음 명령어를 사용하세요.

gcloud container node-pools create --service-account=$NODE_SA_EMAIL