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

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 にビルドイメージを保存するために必要です。デフォルトの動作では、サービス アカウントには「run-sources-*」、「gcf-v2-sources-*」、「gcf-v2-uploads-*」という名前のバケットへのアクセス権が必要です。これを行うには、次のように IAM 条件をロール付与に追加します。 (resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("gcf-v2-sources-") || resource.name.startsWith("gcf-v2-uploads-") || resource.name.startsWith("run-sources-")))

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

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

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

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

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