Google Cloud Deploy 서비스 계정

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 문서에서는 Google Cloud Deploy를 실행하고 여러 작업 실행을 위해 Google Cloud Deploy를 호출하는 데 사용되는 서비스 계정에 대해 설명합니다.

Google Cloud Deploy에는 두 가지 서비스 계정이 사용됩니다.

  • Google Cloud Deploy 서비스 에이전트

    Google Cloud Deploy는 이 서비스 에이전트를 사용해서 프로젝트와 상호작용합니다. 이 서비스 에이전트를 대체 서비스 계정으로 바꿀 수는 없습니다. 하지만 예를 들어 서비스 계정 또는 비공개 Cloud Build 작업자 풀과 같이 프로젝트 외부의 리소스를 사용하는 경우 등에는 이에 대한 권한을 수정할 수 있습니다.

  • Google Cloud Deploy 실행 서비스 계정

    Google Cloud Deploy는 이 서비스 계정을 사용해서 Cloud Build에서 렌더링 및 배포 작업을 실행합니다. 이 계정은 Cloud Storage 버킷 읽기 및 쓰기와 배포 대상 액세스를 위해 충분한 권한이 필요합니다.

    실행을 위한 기본 서비스 계정은 기본 Compute Engine 서비스 계정입니다. 대상 구성에서 대체 서비스 계정을 지정할 수 있습니다.

서비스 계정 권한 수정 및 대체 서비스 계정 만들기 방법에 대한 자세한 내용은 서비스 계정 만들기 및 관리를 참조하세요.

Google Cloud Deploy 서비스 에이전트

Google Cloud Deploy 서비스 에이전트는 Google Cloud Deploy가 Google Cloud Deploy에 사용되는 Google Cloud 서비스와 상호작용하기 위해 사용하는 서비스 계정입니다. 이러한 서비스에는 Cloud Build, Pub/Sub, Cloud 감사 로그가 포함됩니다.

이 서비스 계정의 이름은 다음 패턴을 따릅니다.

service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com

이 서비스 에이전트를 대체 서비스 계정으로 바꿀 수는 없습니다. 하지만 실행 환경의 일부로 구성된 다른 프로젝트의 비공개 풀에 대해 액세스를 허용하는 등의 경우에는 권한을 추가해야 할 수 있습니다.

Google Cloud Deploy 실행 서비스 계정

기본적으로 Google Cloud Deploy는 기본 Compute Engine 서비스 계정을 사용하여 실행됩니다. 이 서비스 계정은 매니페스트 렌더링 및 대상에 배포를 위해 이를 포함하는 프로젝트에서 충분한 권한을 갖고 있습니다.

이 서비스 계정의 이름은 다음 패턴을 따릅니다.

[project-number]-compute@developer.gserviceaccount.com

이 기본 서비스 계정은 포괄적인 권한을 갖습니다. 여기에서는 Google Cloud Deploy가 다른 서비스 계정으로 실행되도록 실행 환경을 변경하는 것이 좋습니다. 대상 정의executionConfigs.privatePool.serviceAccount 속성 또는 executionConfigs.defaultPool.serviceAccount 속성을 사용해서 각 대상에 대해 실행 서비스 계정을 변경할 수 있습니다.

이러한 속성에 대해 설정하는 서비스 계정에는 Cloud Deploy 프로젝트의 roles/clouddeploy.jobRunner 역할이 있어야 합니다. 기본 실행 서비스 계정에 이 권한이 없으면 다음 명령어를 실행합니다.

 gcloud projects add-iam-policy-binding PROJECT_ID \
     --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
     --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
     --role="roles/clouddeploy.jobRunner"

생성할 서비스 계정

렌더링 및 배포에 기본 실행 서비스 계정을 사용하지 않도록 선택한 경우에는 하나 이상의 대체 서비스 계정을 사용하도록 만들어야 합니다. 이러한 서비스 계정은 Google Cloud Deploy에서 실행되며 대상 구성에 구성되어 있습니다.

2개 이상을 만드는 한 가지 이유는 특정 서비스 계정 또는 프로덕션 대상과 같이 제한된 대상을 배포하도록 계정을 지정하기 위한 것입니다.

한 가지 가능한 방법은 전달 파이프라인별로 구분된 서비스 계정을 사용하는 것입니다. 이러한 각 서비스 계정에는 렌더링 및 배포에 충분한 권한이 있는 역할이 포함됩니다.

Google Kubernetes Engine에 배포하는 경우 서비스 계정을 네임스페이스 1개로 제한할 수 있습니다.

다른 프로젝트의 서비스 계정 사용

실행 환경에서 배포 파이프라인을 만드는 프로젝트와 다른 프로젝트에 있는 서비스 계정을 지정할 수 있습니다.

  1. 서비스 계정을 소유하는 프로젝트에서 프로젝트 간 SA 조직 정책을 사용 설정합니다.

  2. Google Cloud Deploy 서비스 에이전트(service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com)에 서비스 계정에 대한 iam.serviceAccounts.actAs 권한을 부여합니다.

    해당 권한이 포함된 roles/iam.serviceAccountUser 역할도 부여할 수 있습니다.

  3. Cloud Build 서비스 에이전트(service-<project-number>@gcp-sa-cloudbuild.iam.gserviceaccount.com)에 roles/iam.serviceAccountTokenCreator 역할을 부여합니다.

  4. gcloud deploy releases creategcloud deploy rollouts create 호출자에게 서비스 계정에 대한 iam.serviceAccounts.actAs 권한을 부여합니다.

필수 권한

  • 렌더링 구성에 사용되는 서비스 계정은 Google Cloud Deploy 리소스가 저장된 Cloud Storage 버킷에 액세스하기 위해 충분한 권한이 있어야 합니다(전달 파이프라인, 출시 버전, 출시).

    roles/clouddeploy.jobRunner 역할에는 렌더링 서비스 계정(privatePool 또는 defaultPool)에 필요한 모든 권한이 포함되어 있습니다.

  • 배포에 사용되는 서비스 계정은 대상 클러스터에 배포를 위해 충분한 권한 Cloud Storage 버킷 액세스를 위한 권한이 있어야 합니다.

  • 출시 버전을 만들기 위해 Google Cloud Deploy를 호출하는 서비스 계정에는 clouddeploy.releaser 역할이 있어야 합니다. 또한 매니페스트를 렌더링하는 서비스 계정을 사용하려면 iam.serviceAccount.actAs 권한이 있어야 합니다(예를 들어 roles/iam.serviceAccountUser 역할 사용).

  • 출시 버전을 승격하기 위해 또는 rollout을 만들기 위해 Google Cloud Deploy를 호출하는 서비스 계정은 대상에 배포되는 서비스 계정을 사용하기 위한 iam.serviceAccount.actAs 권한이 있어야 합니다.

다음 단계