Cloud Build용 커스텀 서비스 계정(1세대)

Cloud Run Functions는 Cloud Run 함수를 빌드하고 배포할 때 Cloud Build를 활용합니다. 기본적으로 Cloud Run Functions는 빌드를 수행할 때 기본 Cloud Build 서비스 계정을 주 구성원으로 사용합니다. 2024년 7월부터 Cloud Build가 새 프로젝트에서 서비스 계정을 사용하는 방법에 대한 기본 동작이 변경되었습니다. 이 변경사항은 Cloud Build 서비스 계정 변경에 자세히 설명되어 있습니다. 이러한 변경사항으로 인해 처음으로 함수를 배포하는 새 프로젝트에서 함수 빌드를 위한 권한이 부족한 기본 Cloud Build 서비스 계정을 사용할 수 있습니다. 이 변경사항의 영향을 받는 경우 다음 중 하나를 수행할 수 있습니다.

  • 기본 서비스 계정 변경에 대한 Cloud Build 안내를 검토하고 변경사항을 선택 해제합니다.

  • 기본 Compute Engine 서비스 계정에 Cloud Build 계정 역할(roles/cloudbuild.builds.builder)을 추가합니다.

  • 함수 배포를 위한 커스텀 Cloud Build 서비스 계정을 만듭니다.

이 문서에서는 함수를 배포할 때 사용자가 만든 서비스 계정을 Cloud Build가 사용할 계정으로 전달하는 방법을 설명합니다.

Google Cloud CLI, Google Cloud 콘솔 또는 Cloud Run Functions API를 사용하여 커스텀 서비스 계정으로 함수를 배포할 수 있습니다.

Cloud Build가 함수를 빌드할 때 사용할 다른 서비스 계정을 제공해야 하는 상황은 다음과 같습니다.

  • VPC-SC 경계에 추가할 서비스 계정을 더 세부적으로 제어하려는 경우

  • 각 권한을 개별적으로 취소하지 않고 Cloud Build를 기본 서비스 계정의 권한과 다른 권한으로 실행하려는 경우

  • 다른 목적에 최적화된 Cloud Build 서비스 계정을 공유하지 않고 함수에 대한 세분화된 Cloud Build 권한을 설정하려는 경우

  • 조직에서 기본 서비스 계정의 사용을 사용 중지한 경우

API 사용 설정

이 기능을 사용하려면 IAM API를 사용 설정해야 합니다.

Google Cloud CLI를 사용하여 Cloud Run 함수를 배포하는 데 필요한 API를 사용 설정하거나 Google Cloud 콘솔을 사용하세요.

gcloud services enable iam.googleapis.com

서비스 계정 구성

이 문서에서는 새 서비스 계정을 만들고 필요한 권한을 부여하는 방법을 설명합니다. 기존 서비스 계정을 사용하려면 사용할 서비스 계정의 이메일 주소가 필요합니다. 자세한 내용은 사용자 지정 서비스 계정 구성을 참조하세요.

다음과 같이 기존 서비스 계정을 보거나 Google Cloud 콘솔을 사용할 수 있습니다.

gcloud iam service-accounts list

서비스 계정 만들기

Google Cloud CLI를 사용하여 서비스 계정을 만들거나 Google Cloud 콘솔을 사용합니다.

gcloud iam service-accounts create SA_EMAIL

SA_EMAIL서비스 계정의 이메일 주소로 바꿉니다.

권한 부여

사용하는 서비스 계정에 다음 역할이 필요합니다.

  • roles/logging.logWriter— Cloud Logging에서 빌드 로그를 저장하는 데 필요합니다.
  • roles/artifactregistry.writer— Artifact Registry에 빌드 이미지를 저장하는 데 필요합니다. 기본 동작의 경우 서비스 계정에 'gcf-artifacts' 및 'cloud-run-source-deploy'라는 저장소에 대한 액세스 권한이 필요합니다. 저장소의 IAM 정책에서 저장소에 대한 액세스 권한을 설정할 수 있습니다. dockerRepository 필드를 통해 자체 아티팩트 저장소를 제공할 수도 있습니다.
  • roles/storage.objectViewer - Cloud Storage 버킷에서 함수 소스를 검색하고 Container Registry에 빌드 이미지를 저장하는 데 필요합니다. 기본 동작의 경우 서비스 계정에 'gcf-sources-*'라는 버킷에 대한 액세스 권한이 필요합니다. 이는 다음과 같은 IAM 조건을 역할 부여에 추가하여 수행할 수 있습니다((resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("gcf-sources-")))).

  • roles/storage.objectAdmin: 컨테이너 레지스트리에 필요합니다(현재 지원 중단됨). 컨테이너 레지스트리에 액세스하려면 *.artifacts.PROJECT_ID.appspot.com이라는 버킷에 대한 액세스 권한이 필요합니다.

Google Cloud CLI를 사용하거나 Google Cloud 콘솔을 사용하여 다음 역할을 부여합니다.

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
    --role=roles/logging.logWriter

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/artifactregistry.writer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectViewer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectAdmin

다음을 바꿉니다.

커스텀 서비스 계정으로 함수 배포

Google Cloud CLI를 사용하여 Cloud Build용 커스텀 서비스 계정을 사용하는 함수를 배포할 수 있습니다.

  • --build-service-account 플래그는 빌드 단계에 사용될 사용자 인증 정보를 보유한 IAM 서비스 계정을 지정합니다. 커스텀 서비스 계정이 제공되지 않으면 함수는 프로젝트의 기본 서비스 계정을 Cloud Build에 사용합니다.
  • 필요한 경우 --build-worker-pool 플래그로 비공개 풀을 지정하여 사용할 수도 있습니다.

gcloud functions deploy FUNCTION_NAME \
   --no-gen2 \
   --region=REGION \
   --project=PROJECT_ID \
   --runtime=RUNTIME \
   --entry-point=CODE_ENTRYPOINT \
   --build-service-account=projects/PROJECT_ID/serviceAccounts/SA_EMAIL \
   --memory=256Mi \
   --trigger-http \
   --source=.

다음을 바꿉니다.