이전 액세스 범위에서 이전

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

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

액세스 범위는 노드에 대한 권한을 지정하고 작업 부하가 애플리케이션 기본 사용자 인증 정보(ADC)를 사용하는 경우 노드에서 실행되는 작업 부하에 대한 권한을 지정하기 위해 이전에 사용된 방법입니다. Kubernetes 버전 1.10 이전을 실행하는 클러스터에서는 클러스터의 기본 서비스 계정에 기본 액세스 범위 집합이 부여되었습니다. 이러한 클러스터에는 gcloud 및 Google Cloud Platform Console에 의해 compute-rwstorage-ro 액세스 범위가 부여되었습니다.

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

액세스 범위 변경사항

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

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

내 작업 부하에 미치는 영향

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

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

범위를 재정의하고, 작업 부하에 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"

작업 부하를 위한 커스텀 서비스 계정 구성

Cloud Identity & Access Management(Cloud IAM)는 GCP 프로젝트 내에서 사용자 및 서비스 계정에 승인된 역할을 부여하기 위한 액세스 제어 시스템입니다. 서비스 계정은 애플리케이션 배포 등과 같은 작업을 사용자 대신 수행하는 특수한 Google 계정입니다. Cloud IAM을 사용하여 서비스 계정을 만들고 Cloud IAM 정책 결합을 사용해서 계정을 보호할 수 있습니다.

작업 부하에 Compute Engine 액세스가 필요한 경우 서비스 계정에 Compute Engine 관리자 역할을 부여합니다. 작업 부하에 Container Registry에서 비공개 이미지 가져오기가 필요한 경우 Storage ObjectViewer 역할을 부여합니다.

서비스 계정 만들기

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: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에 저장된 비공개 이미지에 대한 액세스 권한을 서비스 계정에 부여하는 방법을 알아보려면 사용자 및 기타 프로젝트에 레지스트리에 대한 액세스 권한 부여를 참조하세요.

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

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

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

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

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

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

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

콘솔

GCP 콘솔을 사용하여 클러스터를 만들려면 다음 단계를 수행하세요.

  1. GCP 콘솔에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

  2. 클러스터 만들기를 클릭합니다.

  3. 마스터 버전에서 최신 Kubernetes 1.10 버전을 선택합니다.

  4. 원하는 대로 클러스터를 구성합니다. 아직은 만들기를 클릭하지 마세요.

  5. 기본 노드 풀에 대해 고급 수정을 클릭합니다.

  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
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine 문서