Cloud Build용 커스텀 서비스 계정
Cloud Run 함수는 Cloud Run 함수를 빌드하고 배포할 때 Cloud Build를 활용합니다. 기본적으로 Cloud Run 함수는 빌드를 수행할 때 기본 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 함수 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/iam.serviceAccountUser
— 서비스 계정에는 이 역할이 필요하지 않지만 함수를 배포하는 사용자에게 이 역할이 필요합니다.roles/logging.logWriter
— Cloud Logging에서 빌드 로그를 저장하는 데 필요합니다.roles/artifactregistry.writer
— Artifact Registry에 빌드 이미지를 저장하는 데 필요합니다.roles/storage.objectAdmin
- Cloud Storage 버킷에서 함수 소스를 검색하고 Container Registry에 빌드 이미지를 저장하는 데 필요합니다.
Google Cloud CLI를 사용하거나 Google Cloud 콘솔을 사용하여 다음 역할을 부여합니다.
gcloud projects add-iam-policy-binding SA_PROJECT_ID \
--member=user:DEPLOYING_USER_EMAIL \
--role=roles/iam.serviceAccountUser
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.objectAdmin
다음을 바꿉니다.
- PROJECT_ID: Google Cloud 프로젝트 ID
- SA_EMAIL: 서비스 계정의 이메일 주소
- SA_PROJECT_ID: 서비스 계정의 프로젝트 ID
- DEPLOYING_USER_EMAIL: 함수를 배포하는 사용자의 이메일 주소
커스텀 서비스 계정으로 함수 배포
Google Cloud CLI를 사용하여 Cloud Build용 커스텀 서비스 계정을 사용하는 함수를 배포할 수 있습니다.
--build-service-account
플래그는 빌드 단계에 사용될 사용자 인증 정보를 보유한 IAM 서비스 계정을 지정합니다. 커스텀 서비스 계정이 제공되지 않으면 함수는 프로젝트의 기본 서비스 계정을 Cloud Build에 사용합니다.- 필요한 경우
--build-worker-pool
플래그로 비공개 풀을 지정하여 사용할 수도 있습니다.
gcloud functions deploy FUNCTION_NAME \
--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=.
다음을 바꿉니다.
- FUNCTION_NAME: 함수를 배포하는 데 사용한 이름
- REGION: 함수를 배포할 Google Cloud 리전의 이름(예:
us-west1
) - PROJECT_ID: Google Cloud 프로젝트 ID
- RUNTIME: 함수를 실행할 지원되는 런타임 버전의 런타임 ID(예:
nodejs18
) - CODE_ENTRYPOINT: 소스 코드에 있는 함수의 진입점. 이것은 함수가 실행될 때 수행되는 코드입니다.
- SA_EMAIL: 서비스 계정의 이메일 주소