이 문서에서는 Cloud Deploy를 실행하고 여러 작업 실행을 위해 Cloud Deploy를 호출하는 데 사용되는 서비스 계정에 대해 설명합니다.
Cloud Deploy는 다음 서비스 계정을 사용합니다.
- Cloud Deploy 서비스 에이전트 - Cloud Deploy는 이 서비스 계정을 사용해서 프로젝트와 상호작용합니다. 이 서비스 에이전트를 대체 서비스 계정으로 바꿀 수는 없습니다. 하지만 예를 들어 서비스 계정 또는 비공개 Cloud Build 작업자 풀과 같이 프로젝트 외부의 리소스를 사용하는 경우 등에는 이에 대한 권한을 수정할 수 있습니다. 
- Cloud Deploy 실행 서비스 계정 - Cloud Deploy는 이 서비스 계정을 사용해서 Cloud Build에서 렌더링 및 배포 작업을 실행합니다. 이 계정은 Cloud Storage 버킷 읽기 및 쓰기와 배포 대상 액세스를 위해 충분한 권한이 필요합니다. - 실행을 위한 기본 서비스 계정은 기본 Compute Engine 서비스 계정입니다. 대상 구성에서 대체 서비스 계정을 지정할 수 있습니다. 
- Cloud Deploy 자동화 서비스 계정 - 이는 Cloud Deploy에서 자동화를 수행하는 데 사용하는 서비스 계정입니다. 기본 실행 서비스 계정 또는 다른 서비스 계정일 수 있습니다. 이 서비스 계정에 대한 자세한 내용은 자동화 서비스 계정을 참조하세요. 
서비스 계정 권한 수정 및 대체 서비스 계정 만들기 방법에 대한 자세한 내용은 서비스 계정 만들기 및 관리를 참조하세요.
Cloud Deploy 서비스 에이전트
Cloud Deploy 서비스 에이전트는 Cloud Deploy가 Cloud Deploy에 사용되는 다른 Google Cloud 서비스와 상호작용하기 위해 사용하는 서비스 계정입니다. 이러한 서비스에는 Cloud Build, Pub/Sub, Cloud 감사 로그가 포함됩니다.
이 서비스 계정의 이름은 다음 패턴을 따릅니다.
service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com
이 계정이 프로젝트에서 삭제된 경우 다음과 같이 다시 추가할 수 있습니다.
- Google Cloud 콘솔에서 IAM 페이지를 엽니다. 
- Google 제공 역할 부여 포함을 선택하여 서비스 에이전트를 표시합니다. - 서비스 상담사가 표시되면 나머지 단계를 건너뛰어도 됩니다. 
- 서비스 에이전트가 표시되지 않으면 액세스 권한 부여를 클릭합니다. 
- 새 주 구성원 필드에 다음 형식의 서비스 에이전트 주소를 입력합니다. - service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com
 
- 역할 선택 드롭다운 목록을 클릭하고 Cloud Deploy Service Agent를 선택합니다. 
- 저장을 클릭합니다. 
Cloud Deploy 실행 서비스 계정
기본적으로 Cloud Deploy는 기본 Compute Engine 서비스 계정을 사용하여 실행됩니다.
이 서비스 계정의 이름은 다음 패턴을 따릅니다.
[project-number]-compute@developer.gserviceaccount.com
이 서비스 계정은 여러 제품에서 사용되므로 광범위한 권한을 보유할 수 있습니다. 여기에서는 Cloud Deploy가 다른 서비스 계정으로 실행되도록 실행 환경을 변경하는 것이 좋습니다.
대상 정의에서 executionConfigs.privatePool.serviceAccount 속성 또는 executionConfigs.defaultPool.serviceAccount 속성을 사용해서 각 대상에 대해 실행 서비스 계정을 변경할 수 있습니다.
이러한 속성에 대해 설정하는 서비스 계정에는 Cloud Deploy 프로젝트의 Cloud Deploy Runner 역할이 있어야 합니다. 기본 실행 서비스 계정에 이 역할이 없으면 다음 명령어를 실행합니다.
 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 Kubernetes Engine의 경우 컨테이너 개발자 및 서비스 계정 사용자 역할을 선택할 수 있습니다. Cloud Run의 경우 Cloud Run 개발자 및 서비스 계정 사용자 역할을 선택할 수 있습니다. 맞춤 타겟에서 사용하는 다른 런타임에는 자체 권한이 필요할 수 있습니다.
생성할 서비스 계정
렌더링 및 배포에 기본 실행 서비스 계정을 사용하지 않도록 선택한 경우에는 하나 이상의 대체 서비스 계정을 사용하도록 만들어야 합니다. 이러한 서비스 계정은 Cloud Deploy에서 실행되며 대상 구성에 구성되어 있습니다.
2개 이상을 만드는 한 가지 이유는 특정 서비스 계정 또는 프로덕션 대상과 같이 제한된 대상을 배포하도록 계정을 지정하기 위한 것입니다.
한 가지 가능한 방법은 전달 파이프라인별로 구분된 서비스 계정을 사용하는 것입니다. 이러한 각 서비스 계정에는 렌더링 및 배포에 충분한 권한이 있는 역할이 포함됩니다.
Google Kubernetes Engine에 배포하기 위해서는 서비스 계정을 하나의 네임스페이스로 제한할 수 있습니다.
다른 프로젝트의 서비스 계정 사용
실행 환경에서 대상을 만드는 프로젝트와 다른 프로젝트에 있는 서비스 계정을 지정할 수 있습니다.
- 서비스 계정을 소유하는 프로젝트에서 프로젝트 간 SA 조직 정책을 사용 설정합니다. 
- Cloud Deploy 서비스 에이전트( - service-<project-number>@gcp-sa-clouddeploy.iam.gserviceaccount.com)에 서비스 계정에 대한- iam.serviceAccounts.actAs권한을 부여합니다.- 이 경우 - project-number는 대상을 만든 프로젝트입니다.- 또한 프로젝트와 Cloud Deploy가 실행 중인 프로젝트와 다른 프로젝트에 있는 각 서비스 계정에서 해당 권한이 포함된 - roles/iam.serviceAccountUser역할을 부여할 수도 있습니다.
- Cloud Build 서비스 에이전트( - service-<project-number>@gcp-sa-cloudbuild.iam.gserviceaccount.com)에- roles/iam.serviceAccountTokenCreator역할을 부여합니다.- 이 경우 - project-number는 대상을 만든 프로젝트이며 이 역할은 서비스 계정의 프로젝트에 부여됩니다.- 서비스 계정이 Cloud Deploy가 실행 중인 프로젝트와 다른 프로젝트에 있는 경우 대상 실행 환경에 구성된 서비스 계정마다 이 역할을 부여해야 합니다. 
- 서비스 계정 또는 - roles/iam.serviceAccountUser역할에 대한- gcloud deploy releases create및- gcloud deploy rollouts create- iam.serviceAccounts.actAs권한 호출자를 부여합니다.
필수 권한
- 렌더링 구성에 사용되는 서비스 계정은 Google Cloud Deploy 리소스가 저장된 Cloud Storage 버킷에 액세스하기 위해 충분한 권한이 있어야 합니다(배포 파이프라인, 출시 버전, 출시). - roles/clouddeploy.jobRunner역할에는 렌더링 서비스 계정(- privatePool또는- defaultPool)에 필요한 모든 권한이 포함되어 있습니다.
- 배포에 사용되는 서비스 계정은 대상 클러스터에 배포를 위해 충분한 권한 및 Cloud Storage 버킷 액세스를 위한 권한이 있어야 합니다. 
- 출시 버전을 만들기 위해 Cloud Deploy를 호출하는 서비스 계정에는 - clouddeploy.releaser역할이 있어야 합니다. 또한 매니페스트를 렌더링하는 서비스 계정을 사용하려면- iam.serviceAccount.actAs권한이 있어야 합니다(예를 들어- roles/iam.serviceAccountUser역할 사용).
- 출시 버전을 승격하기 위해 또는 - rollout을 만들기 위해 Cloud Deploy를 호출하는 서비스 계정은 대상에 배포되는 서비스 계정을 사용하기 위한- iam.serviceAccount.actAs권한이 있어야 합니다(예를 들어- roles/iam.serviceAccountUser역할 사용).
- 자동화에 대해 구성된 서비스 계정에는 자동화할 작업을 실행할 수 있는 권한이 있어야 합니다. 자세히 알아보기 
자동화 서비스 계정
출시의 일부 작업을 자동화할 수 있습니다. Cloud Deploy는 기본 실행 서비스 계정, 실행 서비스 계정으로 사용되는 기본이 아닌 서비스 계정 또는 다른 서비스 계정일 수 있는 자동화 서비스 계정을 사용하여 이러한 자동화를 실행합니다.
자동화 서비스 계정에 대해 자세히 알아보세요.
다음 단계
- IAM에 대해 알아보기
- 사전 정의된 Cloud Deploy 역할 자세히 알아보기
- 서비스 계정 만들기 및 관리 방법 알아보기