Cloud Build 用のカスタム サービス アカウント

概要

Cloud Functions は、Cloud Functions の関数をビルドしてデプロイするときに Cloud Build を利用します。デフォルトでは、Cloud Functions はビルドを実行する際にプリンシパルとして、デフォルトの Cloud Build サービス アカウントを使用します。このドキュメントでは、関数のデプロイ時に Cloud Build で使用される、ユーザーが作成したサービス アカウントを渡す方法について説明します。

Google Cloud CLI、Google Cloud コンソール、Cloud Functions API のいずれかを使用して、カスタム サービス アカウントで関数をデプロイできます。

Cloud Build での関数のビルドに使用するために、別のサービス アカウントの指定が必要になるいくつかのシナリオを次に示します。

  • VPC-SC 境界に追加するサービス アカウントをより詳細に制御したい。

  • 各権限を個別に取り消すことなく、デフォルトのサービス アカウントとは異なる権限で Cloud Build を実行したい。

  • 他の目的に合わせて最適化された Cloud Build サービス アカウントを共有せず、関数に専用の Cloud Build 権限をきめ細かく設定したい。

API を有効にする

この機能を使用するには、IAM API を有効にする必要があります。

Google Cloud CLI を使用して Cloud Functions の関数のデプロイに必要な 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

次のように置き換えます。

カスタム サービス アカウントを使用して関数をデプロイする

Google Cloud CLI を使用して、Cloud Build のカスタム サービス アカウントを使用する関数をデプロイできます。

  • --build-service-account フラグは、ビルドステップに認証情報が使用される IAM サービス アカウントを指定します。カスタム サービス アカウントが指定されていない場合、この関数は Cloud Build のプロジェクトのデフォルト サービス アカウントを使用します。
  • 必要に応じてプライベート プールを使用できます。プライベート プールは、--build-worker-pool フラグを使用して指定します。

gcloud beta 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=.

次のように置き換えます。