Cloud Build 서비스 계정

Cloud Build는 사용자 대신 특별 서비스 계정을 사용하여 빌드를 실행합니다. Cloud Build 서비스 계정의 이메일은 [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com입니다. 이 서비스 계정에는 사용 사례에 불필요하게 광범위한 권한이 있을 수 있습니다. 최소 권한의 원칙에 따라 보안 상황을 개선할 수 있습니다. 이 원칙에 따라 사용자 대신 빌드를 실행할 수 있도록 자체 서비스 계정을 만드는 것이 좋습니다. 이렇게 하면 잘못된 구성이나 악의적인 사용자의 잠재적 영향을 줄일 수 있습니다.

이 페이지에서는 기본적으로 Cloud Build 서비스 계정에 포함된 모든 권한에 대해 설명합니다. Cloud Build 서비스 계정에 권한을 부여하거나 취소하는 방법을 알아보려면 Cloud Build 서비스 계정 액세스 구성을 참조하세요.

Cloud Build 서비스 계정의 기본 권한

Google Cloud 프로젝트에서 Cloud Build API를 사용 설정하면 Cloud Build 서비스 계정이 프로젝트에 자동으로 생성되고 프로젝트의 리소스에 대한 Cloud Build 서비스 계정 역할이 부여됩니다. 이 역할에는 빌드를 업데이트하거나 로그를 작성하는 기능과 같은 여러 권한이 포함됩니다. 서비스 계정은 빌드를 실행하는 데 필요한 경우에만 이러한 작업을 수행합니다. 예를 들어 서비스 계정은 빌드의 소스 코드가 Cloud Source Repositories에 있는 경우 source.repos.get 권한을 사용하여 Cloud Source Repositories에서 코드를 가져옵니다. 빌드 프로세스의 일부로 작업을 수행할 계획이 없다면 최소 권한의 보안 원칙을 준수하기 위해 Cloud Build 서비스 계정에서 해당 권한을 취소하는 것이 좋습니다.

다음 표에는 Cloud Build 서비스 계정 역할에 포함된 권한과 Cloud Build 서비스 계정이 이러한 권한을 사용하는 목적이 나와 있습니다.

권한 설명 권한의 목적
cloudbuild.builds.create 빌드 및 트리거를 만들 수 있습니다. 다음과 같은 경우에 필요합니다.
  • 빌드 트리거를 사용하는 데 필요합니다.
  • 빌드를 생성, 나열, 가져오기, 취소하는 데 필요합니다.
cloudbuild.builds.update 빌드 및 트리거를 업데이트할 수 있습니다.
cloudbuild.builds.list 빌드 및 트리거를 나열할 수 있습니다.
cloudbuild.builds.get 빌드 및 트리거를 가져올 수 있습니다.
cloudbuild.workerpools.use 비공개 풀을 사용할 수 있습니다. 비공개 풀에서 빌드를 실행하는 데 필요합니다.
logging.logEntries.create 로그를 작성할 수 있습니다. Cloud Logging에서 빌드 로그를 만들고 나열하는 데 필요합니다.
logging.logEntries.list 로그를 나열할 수 있습니다.
logging.views.access 로그를 볼 수 있습니다.
pubsub.topics.create Pub/Sub 주제를 만들 수 있습니다. Pub/Sub에 빌드 업데이트를 푸시하는 데 필요합니다.
pubsub.topics.publish Pub/Sub에 게시할 수 있습니다.
remotebuildexecution.blobs.get 빌드를 승인하거나 거부할 수 있는 액세스 권한을 얻을 수 있습니다. 대기 중인 빌드를 승인하거나 거부하는 데 필요합니다.
resourcemanager.projects.get 프로젝트 정보를 가져올 수 있습니다.
resourcemanager.projects.list 프로젝트를 나열할 수 있습니다.
source.repos.get Cloud Source Repositories의 저장소에서 소스 코드를 읽을 수 있습니다. 다음과 같은 경우에 필요합니다.
  • Bitbucket 및 Cloud Source Repositories 트리거를 사용하는 데 필요합니다.
  • Cloud Source Repositories에서 소스 코드를 가져오는 데 필요합니다.
source.repos.list Cloud Source Repositories에서 저장소를 나열할 수 있습니다.
storage.buckets.create Cloud Storage 버킷을 만들 수 있습니다. 다음과 같은 경우에 필요합니다.
  • Container Registry(지원 중단됨)에 이미지를 저장하고 가져오는 데 필요합니다.
  • Cloud Storage에 아티팩트를 저장하고 가져오는 데 필요합니다.
  • gcloud builds submit을 통해 수동으로 빌드를 제출하는 데 필요합니다.
  • 사용자가 만든 로그 버킷에 빌드 로그를 저장하는 데 필요합니다.
storage.buckets.get Cloud Storage 버킷을 가져올 수 있습니다.
storage.buckets.list Cloud Storage 버킷을 나열할 수 있습니다.
storage.objects.list Cloud Storage 객체를 나열할 수 있습니다.
storage.objects.update Cloud Storage 객체를 업데이트할 수 있습니다.
storage.objects.create Cloud Storage 객체를 작성할 수 있습니다.
storage.objects.delete Cloud Storage 객체를 삭제할 수 있습니다.
storage.objects.get Cloud Storage 객체를 읽을 수 있습니다.
artifactregistry.repositories.uploadArtifacts Artifact Registry의 저장소에 아티팩트를 업로드할 수 있습니다. Artifact Registry에서 아티팩트를 관리하는 데 필요합니다.
artifactregistry.repositories.downloadArtifacts Artifact Registry의 저장소에서 아티팩트를 다운로드할 수 있습니다.
artifactregistry.aptartifacts.create Artifact Registry에 Apt 아티팩트를 업로드할 수 있습니다.
artifactregistry.dockerimages.get Artifact Registry에서 Docker 이미지를 가져올 수 있습니다.
artifactregistry.dockerimages.list Artifact Registry에 저장된 Docker 이미지를 나열할 수 있습니다.
artifactregistry.kfpartifacts.create Artifact Registry에 KFP 아티팩트를 업로드할 수 있습니다.
artifactregistry.locations.get Artifact Registry에서 리소스의 위치 정보를 가져올 수 있습니다.
artifactregistry.locations.list Artifact Registry에 지원되는 위치를 나열할 수 있습니다.
artifactregistry.mavenartifacts.get Artifact Registry에서 Maven 패키지를 가져올 수 있습니다.
artifactregistry.mavenartifacts.list Artifact Registry에서 Maven 패키지를 나열할 수 있습니다.
artifactregistry.npmpackages.get Artifact Registry에서 npm 패키지를 가져올 수 있습니다.
artifactregistry.npmpackages.list Artifact Registry에서 npm 패키지를 나열할 수 있습니다.
artifactregistry.projectsettings.get Artifact Registry에서 프로젝트 설정을 가져올 수 있습니다.
artifactregistry.pythonpackages.get Artifact Registry에서 Python 패키지를 가져올 수 있습니다.
artifactregistry.pythonpackages.list Artifact Registry에서 Python 패키지를 나열할 수 있습니다.
artifactregistry.yumartifacts.create Artifact Registry에 Yum 아티팩트를 업로드할 수 있습니다.
artifactregistry.repositories.createOnPush 프로젝트의 gcr.io 호스트 이름에 이미지를 처음 내보낼 때 Artifact Registry에서 gcr.io 저장소를 만들 수 있습니다.
artifactregistry.repositories.get Artifact Registry에서 저장소를 가져올 수 있습니다.
artifactregistry.repositories.list Artifact Registry에서 저장소를 나열할 수 있습니다.
artifactregistry.repositories.listEffectiveTags Artifact Registry에서 아티팩트 태그를 나열할 수 있습니다. Artifact Registry에서 아티팩트 태그를 관리하는 데 필요합니다.
artifactregistry.repositories.listTagBindings Artifact Registry에서 아티팩트의 태그 바인딩 정보를 나열할 수 있습니다.
artifactregistry.tags.create Artifact Registry에서 태그를 만들 수 있습니다.
artifactregistry.tags.get Artifact Registry에서 태그를 가져올 수 있습니다.
artifactregistry.tags.list Artifact Registry에서 태그를 나열할 수 있습니다.
artifactregistry.tags.update Artifact Registry에서 태그를 업데이트할 수 있습니다.
artifactregistry.versions.list Artifact Registry에서 버전을 나열할 수 있습니다.
artifactregistry.versions.get Artifact Registry에서 버전을 가져올 수 있습니다.
containeranalysis.occurrences.create Artifact Analysis 어커런스를 만들 수 있습니다. Cloud Build 서비스 계정은 이러한 권한을 사용하지 않지만 이전 버전과의 호환성을 위해 포함됩니다.
containeranalysis.occurrences.delete Artifact Analysis 어커런스를 삭제할 수 있습니다.
containeranalysis.occurrences.get Artifact Analysis 어커런스를 가져올 수 있습니다.
containeranalysis.occurrences.list Artifact Analysis 어커런스를 나열할 수 있습니다.
containeranalysis.occurrences.update Artifact Analysis 어커런스를 업데이트할 수 있습니다.

빌드 트리거

기본적으로 빌드 트리거는 Cloud Build 서비스 계정을 사용하여 빌드를 실행합니다. 또는 원하는 서비스 계정으로 빌드를 실행하도록 빌드 트리거를 구성할 수 있습니다. 각 트리거를 서로 다른 서비스 계정으로 구성할 수 있습니다.

빌드 트리거에 지정할 서비스 계정을 선택할 경우 다음 사항을 고려하세요.

  • 기본 Cloud Build 서비스 계정: Cloud Build 편집자 역할이 있는 모든 사용자는 트리거를 만들고 직접 실행할 수 있습니다. 예를 들어 사용자는 트리거를 수동으로 실행할 수 있습니다. 모든 사용자는 간접적으로 트리거를 실행할 수도 있습니다. 예를 들어 사용자는 연결된 저장소로 새 소스 코드를 푸시할 때 간접적으로 트리거를 호출할 수 있습니다. Cloud Build 편집자 역할이 있는 모든 사용자는 이전 서비스 계정 및 트리거에 지정된 새 서비스 계정이 기본 Cloud Build 계정인 경우 트리거를 업데이트할 수 있습니다.

  • 사용자 지정 서비스 계정: Cloud Build 편집자 역할과 iam.serviceAccounts.actAs 권한이 있는 모든 사용자는 트리거를 만들고 직접 실행할 수 있습니다. 예를 들어 사용자는 트리거를 수동으로 실행할 수 있습니다. 모든 사용자는 간접적으로 트리거를 실행할 수도 있습니다. 예를 들어 사용자는 연결된 저장소에 새 소스를 푸시할 때 간접적으로 트리거를 호출할 수 있습니다. Cloud Build 편집자 역할이 있는 모든 사용자는 이전에 구성된 서비스 계정 및 트리거에 지정된 새 서비스 계정 모두에 대한 iam.serviceAccounts.actAs 권한을 가지는 경우 트리거를 업데이트할 수 있습니다. 사용자에게 이 권한을 부여하려면 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)과 같이 해당 권한이 포함된 사전 정의된 역할을 부여하면 됩니다. 또는 iam.serviceAccounts.actAs 권한이 있는 커스텀 IAM 역할을 만들어 사용자에게 부여할 수 있습니다. 서비스 계정 권한에 대한 자세한 내용은 서비스 계정 인증 역할을 참조하세요.

또한 기본 Cloud Build 서비스 계정과 사용자 지정 서비스 계정은 트리거를 사용하여 빌드를 호출하는 사용자에게 승격된 빌드 시간 권한을 제공할 수 있습니다. 기본 Cloud Build 서비스 계정과 연결된 빌드 트리거를 사용할 경우 다음 보안 영향에 유의하세요.

  • Google Cloud 프로젝트에 대한 액세스 권한이 없지만 프로젝트에서 빌드 트리거와 연결된 저장소에 쓰기 액세스 권한이 있는 사용자는 빌드 중인 코드를 변경할 수 있는 권한을 갖습니다.
  • 또한 GitHub pull 요청 트리거를 사용하는 경우, 저장소에 대해 읽기 액세스 권한이 있는 사용자가 pull 요청을 제출하여, pull 요청에 코드 변경사항이 포함된 빌드를 트리거할 수 있습니다. GitHub pull 요청 트리거를 만들 때 주석 제어 옵션을 선택하여 이 동작을 사용 중지할 수 있습니다. 이 옵션을 선택하면 저장소 소유자 또는 공동작업자가 /gcbrun에 댓글을 작성할 때만 빌드가 시작됩니다. GitHub 트리거주석 제어 사용에 관한 자세한 내용은 GitHub 트리거 만들기를 참조하세요.

제한사항

ID 토큰을 사용하여 서비스 간에 인증해야 하는 경우에는 사용자 지정 서비스 계정을 사용하여 빌드를 실행해야 합니다. 기본 Cloud Build 서비스 계정은 ID 토큰을 생성하는 데 사용될 수 없습니다.

예를 들어 Cloud Functions, Cloud Run 또는 App Engine과 같은 서버리스 플랫폼 애플리케이션을 사용하고 있고 Cloud Build에서 애플리케이션을 호출하려는 경우 서비스 간 인증에 필요한 권한으로 구성된 사용자 지정 서비스 계정이 필요합니다.

자세한 내용은 서비스 간 액세스 승인을 참조하세요.

다음 단계