시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치했으면
gcloud components update명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
필요한 역할
IAM 서비스 계정 및 역할을 관리하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
-
클러스터 프로젝트에 대한 보안 관리자 (
roles/iam.securityAdmin) -
별도의 프로젝트에서 서비스 계정을 구성합니다.
서비스 계정 프로젝트의 보안 관리자 (
roles/iam.securityAdmin)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
GKE에 필요한 최소 역할 부여
GKE는 노드에 연결된 IAM 서비스 계정을 사용하여 로깅 및 모니터링과 같은 시스템 태스크를 실행합니다. 적어도 이러한 노드 서비스 계정에는 프로젝트에 대한 Kubernetes Engine 기본 노드 서비스 계정(roles/container.defaultNodeServiceAccount) 역할이 있어야 합니다. 기본적으로 GKE는 프로젝트에 자동으로 생성되는 Compute Engine 기본 서비스 계정을 노드 서비스 계정으로 사용합니다.
조직에서 iam.automaticIamGrantsForDefaultServiceAccounts 조직 정책 제약조건을 적용하는 경우 프로젝트의 기본 Compute Engine 서비스 계정에 GKE에 필요한 권한이 자동으로 부여되지 않을 수 있습니다.
다음 섹션에서는 기본 Compute Engine 서비스 계정 또는 새로 만든 커스텀 서비스 계정에 roles/container.defaultNodeServiceAccount 역할을 부여하는 방법을 보여줍니다.
기본 Compute Engine 서비스 계정 구성
Compute Engine 기본 서비스 계정에 roles/container.defaultNodeServiceAccount 역할을 부여하려면 다음 단계를 완료합니다.
콘솔
- 시작 페이지로 이동합니다.
- 프로젝트 번호 필드에서 클립보드에 복사를 클릭합니다.
- IAM 페이지로 이동합니다.
- 액세스 권한 부여를 클릭합니다.
- 새 주 구성원 필드에 다음 값을 지정합니다.
PROJECT_NUMBER-compute@developer.gserviceaccount.comPROJECT_NUMBER를 복사한 프로젝트 번호로 바꿉니다. - 역할 선택 메뉴에서 Kubernetes Engine 기본 노드 서비스 계정 역할을 선택합니다.
- 저장을 클릭합니다.
gcloud
- Google Cloud 프로젝트 번호를 찾습니다.
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
PROJECT_ID를 프로젝트 ID로 바꿉니다.출력은 다음과 비슷합니다.
12345678901
- Compute Engine 기본 서비스 계정에
roles/container.defaultNodeServiceAccount역할을 부여합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
PROJECT_NUMBER를 이전 단계의 프로젝트 번호로 바꿉니다.
커스텀 노드 서비스 계정 구성
커스텀 서비스 계정을 만들고 GKE에 필요한 역할을 부여하려면 다음 단계를 완료하세요.
콘솔
- 서비스 계정 페이지로 이동합니다.
- 서비스 계정 만들기를 클릭합니다.
- 서비스 계정의 이름을 입력합니다. 서비스 계정 ID 필드에는 이름을 기반으로 서비스 계정의 고유 ID가 자동으로 생성됩니다.
- 만들고 계속하기를 클릭합니다.
- 역할 선택 메뉴에서 Kubernetes Engine 기본 노드 서비스 계정 역할을 선택합니다.
- 완료를 클릭합니다.
gcloud
- 서비스 계정을 만듭니다.
gcloud iam service-accounts create SA_NAME
SA_NAME을 서비스 계정을 식별하는 고유한 이름으로 바꿉니다. - 서비스 계정에 Kubernetes Engine 기본 노드 서비스 계정(
roles/container.defaultNodeServiceAccount) 역할을 부여합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role=roles/container.defaultNodeServiceAccount
다음을 바꿉니다.
PROJECT_ID: Google Cloud 프로젝트 IDSA_NAME: 생성한 서비스 계정의 이름
Terraform
IAM 서비스 계정을 만들고 프로젝트에 대한 roles/container.defaultNodeServiceAccount 역할을 부여합니다.
구성 커넥터
참고: 이 단계에는 구성 커넥터가 필요합니다. 설치 안내를 따라 클러스터에 구성 커넥터를 설치합니다.
- 서비스 계정을 만들려면 다음 리소스를
service-account.yaml로 다운로드합니다.다음을 바꿉니다.
[SA_NAME]: 새 서비스 계정의 이름으로 바꿉니다.[DISPLAY_NAME]: 서비스 계정의 표시 이름입니다.
- 서비스 계정을 만듭니다.
kubectl apply -f service-account.yaml
roles/logging.logWriter역할을 서비스 계정에 적용합니다.- 다음 리소스를
policy-logging.yaml로 다운로드합니다.다음을 바꿉니다.
[SA_NAME]: 서비스 계정의 이름입니다.[PROJECT_ID]: Google Cloud 프로젝트 ID입니다.
- 역할을 서비스 계정에 적용합니다.
kubectl apply -f policy-logging.yaml
- 다음 리소스를
roles/monitoring.metricWriter역할을 서비스 계정에 적용합니다.- 다음 리소스를
policy-metrics-writer.yaml로 다운로드합니다.[SA_NAME]및[PROJECT_ID]를 자체 정보로 바꿉니다.다음을 바꿉니다.
[SA_NAME]: 서비스 계정의 이름입니다.[PROJECT_ID]: Google Cloud 프로젝트 ID입니다.
- 역할을 서비스 계정에 적용합니다.
kubectl apply -f policy-metrics-writer.yaml
- 다음 리소스를
roles/monitoring.viewer역할을 서비스 계정에 적용합니다.- 다음 리소스를
policy-monitoring.yaml로 다운로드합니다.다음을 바꿉니다.
[SA_NAME]: 서비스 계정의 이름입니다.[PROJECT_ID]: Google Cloud 프로젝트 ID입니다.
- 역할을 서비스 계정에 적용합니다.
kubectl apply -f policy-monitoring.yaml
- 다음 리소스를
roles/autoscaling.metricsWriter역할을 서비스 계정에 적용합니다.- 다음 리소스를
policy-autoscaling-metrics-writer.yaml로 다운로드합니다.다음을 바꿉니다.
[SA_NAME]: 서비스 계정의 이름입니다.[PROJECT_ID]: Google Cloud 프로젝트 ID입니다.
- 역할을 서비스 계정에 적용합니다.
kubectl apply -f policy-autoscaling-metrics-writer.yaml
- 다음 리소스를
서비스 계정을 다른 프로젝트의 리소스에도 사용할 수 있습니다. 자세한 내용은 프로젝트 간 서비스 계정 가장 사용 설정을 참조하세요.
주 구성원이 커스텀 서비스 계정을 연결하도록 허용
클러스터 또는 노드 풀을 만들 때 커스텀 서비스 계정을 연결할 수 있습니다. 주 구성원 (예: 플랫폼 관리자)이 커스텀 서비스 계정을 사용하여 GKE 리소스를 만들 수 있도록 하려면 커스텀 서비스 계정에 대한 서비스 계정 사용자(roles/iam.serviceAccountUser) 역할을 해당 주 구성원에게 부여합니다. 이 역할을 부여하려면 다음 옵션 중 하나를 선택하세요.
콘솔
Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.
리소스 선택기에서 맞춤 서비스 계정이 포함된 프로젝트를 선택합니다.
GKE 노드와 함께 사용할 커스텀 서비스 계정의 체크박스를 선택합니다.
액세스 관리를 클릭합니다. 액세스 관리 창이 열립니다.
주 구성원 추가를 클릭합니다. 액세스 권한 부여 창이 열립니다.
새 주 구성원 필드에 관리자 그룹과 같은 주 구성원을 지정합니다.
역할 선택 드롭다운 메뉴에서 서비스 계정 사용자 역할을 선택합니다.
저장을 클릭합니다. 액세스 권한 부여 창이 닫힙니다.
액세스 관리 창을 닫습니다.
gcloud
roles/iam.serviceAccountUser 역할을 부여합니다.
gcloud iam service-accounts add-iam-policy-binding \
SA_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
--member=PRINCIPAL \
--role=roles/iam.serviceAccountUser
다음을 바꿉니다.
SA_NAME: 맞춤 서비스 계정의 이름입니다.SERVICE_ACCOUNT_PROJECT_ID: 맞춤 서비스 계정이 포함된 프로젝트 ID입니다.PRINCIPAL: 주 구성원 식별자(예:user:baklavainthebalkans@example.com)
구성 커넥터
참고: 이 단계에는 구성 커넥터가 필요합니다. 설치 안내를 따라 클러스터에 구성 커넥터를 설치하세요.
서비스 계정에 iam.serviceAccountUser 역할을 적용합니다. 다음 리소스를 policy-service-account-user.yaml로 다운로드합니다. [SA_NAME] 및 [PROJECT_ID]를 자체 정보로 바꿉니다.
kubectl apply -f policy-service-account-user.yaml
서비스 계정에 역할을 부여하면 해당 주 구성원이 서비스 계정을 사용하여 클러스터와 노드 풀을 만들 수 있습니다. 자세한 내용은 다음 문서를 참조하세요.
프로젝트 간 서비스 계정 사용 구성
노드 서비스 계정이 클러스터와 동일한 프로젝트에 있지 않은 경우 클러스터 프로젝트의 서비스 에이전트에게 서비스 계정에 대한 추가 권한이 필요합니다. 자세한 내용은 노드 서비스 계정 및 프로젝트 서비스 에이전트를 참고하세요.
클러스터 프로젝트에 없는 노드 서비스 계정에 필요한 역할을 부여하려면 다음 단계를 따르세요.
- 프로젝트 간 서비스 계정 연결을 사용 설정하려면 조직 정책을 업데이트하세요.
클러스터 프로젝트의 서비스 에이전트에 커스텀 서비스 계정에 대한 필수 역할을 부여하려면 다음 옵션 중 하나를 선택합니다.
콘솔
Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.
GKE 노드와 함께 사용하기 위해 만든 커스텀 서비스 계정의 체크박스를 선택합니다.
액세스 관리를 클릭합니다. 액세스 관리 창이 열립니다.
클러스터 프로젝트의 Compute Engine 서비스 에이전트에 서비스 계정 토큰 생성자 역할을 부여합니다.
- 액세스 관리 창에서 주 구성원 추가를 클릭합니다. 액세스 권한 부여 창이 열립니다.
새 주 구성원 필드에 클러스터 프로젝트의 Compute Engine 서비스 에이전트 이메일 주소를 지정합니다.
service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.comCLUSTER_PROJECT_NUMBER를 클러스터 프로젝트의 프로젝트 번호로 바꿉니다.역할 선택 메뉴에서 서비스 계정 토큰 생성자 역할을 선택합니다.
저장을 클릭합니다. 액세스 권한 부여 창이 닫힙니다.
클러스터 프로젝트의 GKE 서비스 에이전트에 서비스 계정 사용자 역할을 부여합니다.
- 액세스 관리 창에서 주 구성원 추가를 클릭합니다. 액세스 권한 부여 창이 열립니다.
새 주 구성원 필드에 클러스터 프로젝트의 GKE 서비스 에이전트 이메일 주소를 지정합니다.
service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com역할 선택 메뉴에서 서비스 계정 사용자 역할을 선택합니다.
저장을 클릭합니다. 액세스 권한 부여 창이 닫힙니다.
액세스 관리 창을 닫습니다.
gcloud
클러스터 프로젝트의 프로젝트 번호를 가져옵니다.
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'CLUSTER_PROJECT_ID를 클러스터 프로젝트의 프로젝트 ID로 바꿉니다.출력은
123456789과 비슷합니다.클러스터 프로젝트의 Compute Engine 서비스 에이전트에 맞춤 서비스 계정의
roles/iam.serviceAccountTokenCreator역할을 부여합니다.gcloud iam service-accounts add-iam-policy-binding \ SA_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member=service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator다음을 바꿉니다.
SA_NAME: 커스텀 서비스 계정의 이름입니다.SERVICE_ACCOUNT_PROJECT_ID: 맞춤 서비스 계정이 포함된 프로젝트의 프로젝트 ID입니다.CLUSTER_PROJECT_NUMBER: 클러스터 프로젝트의 프로젝트 번호입니다.
클러스터 프로젝트의 GKE 서비스 에이전트에 맞춤 서비스 계정의
roles/iam.serviceAccountUser역할을 부여합니다.gcloud iam service-accounts add-iam-policy-binding \ SA_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member=service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountUser
비공개 저장소에서 이미지 가져오기 허용
비공개 Artifact Registry 저장소에 이미지가 있는 경우 노드 서비스 계정에 해당 저장소에 대한 액세스 권한을 부여해야 합니다. 기본 Compute Engine 서비스 계정을 사용하더라도 저장소가 다른 프로젝트에 있는 경우 서비스 계정에 저장소 액세스 권한을 부여해야 할 수 있습니다.
Artifact Registry에서 비공개 이미지를 가져오려면 저장소에 대한 Artifact Registry 리더 역할(roles/artifactregistry.reader)을 노드 서비스 계정에 부여합니다.
콘솔
Google Cloud 콘솔에서 저장소 페이지로 이동합니다.
저장소의 체크박스를 선택합니다.
정보 패널 표시를 클릭합니다. 저장소 정보 창이 열립니다.
권한 탭에서 주 구성원 추가를 클릭합니다. 액세스 권한 부여 창이 열립니다.
새 주 구성원 필드에 노드 서비스 계정의 이메일 주소를 지정합니다.
역할 선택을 클릭하여 역할 선택 대화상자를 엽니다.
Artifact Registry 리더 역할을 선택합니다.
저장을 클릭합니다.
gcloud
저장소에 대한 roles/artifactregistry.reader 역할을 부여합니다.
gcloud artifacts repositories add-iam-policy-binding REPOSITORY_NAME \
--member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
--project=REPOSITORY_PROJECT_ID \
--role=roles/artifactregistry.reader
다음을 바꿉니다.
REPOSITORY_NAME: Artifact Registry 저장소의 이름입니다.SERVICE_ACCOUNT_EMAIL: 노드 서비스 계정의 이메일 주소입니다.REPOSITORY_PROJECT_ID: 저장소가 포함된 프로젝트의 프로젝트 ID입니다.
구성 커넥터
참고: 이 단계에는 구성 커넥터가 필요합니다. 설치 안내를 따라 클러스터에 구성 커넥터를 설치하세요.
다음 매니페스트를
policy-artifact-registry-reader.yaml로 저장합니다.다음을 바꿉니다.
- SA_NAME: IAM 서비스 계정의 이름입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- REPOSITORY_NAME: Artifact Registry 저장소의 이름입니다.
Artifact Registry 리더 역할을 서비스 계정에 부여합니다.
kubectl apply -f policy-artifact-registry-reader.yaml