이전 액세스 범위에서 마이그레이션

이 페이지에서는 Kubernetes 버전 1.10 이상을 실행하는 클러스터의 액세스 범위 변경사항을 설명합니다. 이 변경사항은 클러스터와 Cloud Storage 및 Compute Engine 간의 상호작용에만 영향을 미칩니다.

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

액세스 범위는 노드에 대한 권한과 워크로드가 애플리케이션 기본 사용자 인증 정보(ADC)를 사용하는 경우에 노드에서 실행되는 워크로드에 대한 권한을 지정하기 위해 사용하던 기존의 메서드입니다. Kubernetes 버전 1.10 이전을 실행하는 클러스터에서는 클러스터의 기본 서비스 계정에 기본 액세스 범위 집합이 부여되었습니다. gcloud 및 Google Cloud Console에서 이러한 클러스터에 다음과 같은 액세스 범위가 부여되었습니다.

  • compute-rw: 모든 Compute Engine API 메서드에 대한 전체 액세스 권한을 부여합니다.
  • storage-ro: Container Registry에 저장된 비공개 이미지를 포함한 모든 Cloud Storage 리소스에 대한 읽기 전용 액세스 권한을 부여합니다.

액세스 범위 변경사항

Kubernetes 버전 1.10부터 gcloud 및 Cloud Console은 새로운 클러스터 및 새로운 노드 풀의 compute-rw 액세스 범위를 더 이상 기본적으로 부여하지 않습니다. 또한 --scopesgcloud container create에 지정된 경우, gcloud는 더 이상 compute-rw 또는 storage-ro를 자동으로 추가하지 않습니다.

이러한 변경에 따라 기본 서비스 계정에는 클러스터 실행에 필요한 권한만 포함되며, 이로 인해 프로젝트 보안이 향상됩니다.

내 워크로드에 미치는 영향

해당 작업 부하에서 이러한 범위로 액세스 권한이 부여되는 API 호출이 필요하지 않은 경우에는 필요한 조치가 없습니다.

하지만 워크로드에 Compute Engine 또는 Cloud Storage와의 상호작용 권한이 필요한 경우에는 워크로드가 영향을 받을 수 있습니다. 동등한 Identity and Access Management(IAM) 역할이 있는 커스텀 서비스 계정을 만드는 것이 좋습니다.

범위를 재정의하고, 워크로드에 Cloud Storage와의 상호작용 권한이 필요한 경우(Container Registry에서 비공개 컨테이너 이미지 가져오기 포함) storage-ro 범위도 포함해야 합니다.

또는 1.10 이전 클러스터의 동작을 복제하기 위해서는 이전 액세스 범위로 돌아가기를 참조하세요.

영향

Compute Engine 및 Cloud Storage는 필요한 범위가 없는 Kubernetes 1.10 클러스터에서 실행되는 애플리케이션에 403 오류를 반환합니다.

또한 범위가 부족한 요청에 대한 응답에는 필요한 범위가 설명된 HTTP 헤더가 포함되어 있습니다. 예를 들면 다음과 같습니다.

WWW-Authenticate: Bearer realm="https://accounts.google.com/", error=insufficient_scope, scope="https://www.googleapis.com/auth/compute.readonly"

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

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

워크로드에 Compute Engine 액세스가 필요한 경우 서비스 계정에 Compute Engine 관리자 역할을 부여합니다. 워크로드에 Container 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

스토리지 객체 뷰어 역할을 부여하려면 다음 명령어를 실행하세요.

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

Container Registry에 저장된 비공개 이미지에 서비스 계정 액세스 권한을 부여하는 메서드는 IAM 권한 부여를 참조하세요.

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

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

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

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

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

이전 액세스 범위로 되돌리기

Kubernetes version 1.10 이상을 실행하는 클러스터에서 기존 액세스 범위를 계속 사용하려면 수동으로 범위를 추가해야 합니다.

Console

Cloud Console을 사용하여 클러스터를 만들려면

  1. Cloud Console에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

  2. 만들기를 클릭합니다.

  3. 원하는 대로 클러스터를 구성합니다.

  4. 제어 영역 버전에서 정적 버전 또는 출시 채널과 버전을 선택합니다.

  5. 탐색창의 노드 풀에서 default-pool을 펼치고 보안을 클릭합니다.

  6. 액세스 범위 섹션에서 각 API에 액세스 설정을 선택합니다.

  7. Compute Engine에서 읽기/쓰기를 선택합니다.

  8. 스토리지에서 읽기 전용을 선택합니다.

  9. 만들기를 클릭합니다.

gcloud

클러스터를 만들려면 다음 명령어를 실행하세요.

gcloud container clusters create example-cluster --scopes compute-rw,gke-default

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

gcloud container node-pools create example-pool --scopes compute-rw,gke-default