Cloud Build 用のカスタム サービス アカウント(第 1 世代)
Cloud Run functions は、Cloud Run functions をビルドしてデプロイするときに 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 関数 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
次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクト ID。
- SA_EMAIL: サービス アカウントのメールアドレス。
カスタム サービス アカウントを使用して関数をデプロイする
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=.
次のように置き換えます。
- FUNCTION_NAME: 関数をデプロイしたときの名前。
- REGION: 関数をデプロイする Google Cloud リージョンの名前(例:
us-west1
)。 - PROJECT_ID: Google Cloud プロジェクト ID。
- RUNTIME: 関数を実行するためにサポートされるランタイム バージョンのランタイム ID(例:
nodejs18
)。 - CODE_ENTRYPOINT: ソースコード内の関数のエントリ ポイント。これは、関数の実行時に実行されるコードです。
- SA_EMAIL: サービス アカウントのメールアドレス。