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