IAM によるアクセス制御

このページでは、Identity and Access Management(IAM)ロールを使用してプロジェクト レベルでアクセス制御を設定し、gcloud functions コマンドまたは Cloud Functions v2 API を使用して作成された Google Cloud プロジェクトと関数へのアクセスレベルを決定する方法について補足情報を提供します。

Cloud Run を使用して関数を作成またはデプロイした場合は、IAM によるアクセス制御Cloud Run のロールで、Cloud Run の事前定義ロール、個々のサービスへのアクセス制御、サービスの公開、Cloud Run 呼び出し元 IAM の組織のポリシーの構成について詳しく説明しています。

ユーザーのアクセス制御

ユーザーをチームメンバーとしてプロジェクトに追加し、IAM を使用してロールを付与します。

Cloud Run functions は、次のロールをサポートしています。

サービス アカウントのアクセス制御

サービス アカウントは特別なタイプのGoogle Cloud アカウントであり、データにアクセスしてさまざまなアクションを実行するために認証を受ける必要がある人間以外のユーザーの ID として機能します。これらのアカウントの一部は Google によって作成、管理され、サービス エージェントと呼ばれます。

Cloud Run functions では次のサービス アカウントが使用されます。

名前 メンバー ID ロール
Compute Engine のデフォルトのサービス アカウント PROJECT_NUMBER-compute@developer.gserviceaccount.com 編集者
Google Cloud Functions サービス エージェント service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Google Cloud Functions サービス エージェント
以前の Cloud Build サービス アカウント1 PROJECT_NUMBER@cloudbuild.gserviceaccount.com Cloud Build サービス アカウント
Cloud Build サービス アカウント service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com Cloud Build サービス エージェント
Google Container Registry サービス エージェント service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com Container Registry サービス エージェント
Artifact Registry サービス エージェント service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com Artifact Registry サービス エージェント

ランタイム サービス アカウント

デフォルトでは、Cloud Run functions はランタイムに Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com)を使用します。このアカウントには、プロジェクトの編集者のロールが付与されています。これらのサービス アカウントのロールを変更して、実行中の関数に対する権限を制限または拡張できます。また、サービス ID の構成時にデフォルト サービス アカウントの使用を避けることで、使用するサービス アカウントを変更することもできます。

サービス アカウントの詳細については、サービス アカウントのドキュメントをご覧ください。

管理者サービス アカウント

関数の作成、更新、または削除中にプロジェクトの管理アクションを実行するには、Cloud Run functions のすべてのプロジェクトに Google Cloud Functions サービス エージェントのサービス アカウント(service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)が必要です。

さらに、すべてのランタイムで、プロジェクト内のコンテナ イメージのビルドと保存が実行されます。これをサポートするには、次のものもプロビジョニングする必要があります。

これらのサービス アカウントには、前のにリストされているロールが必要です。

Google Cloud Functions サービス エージェント サービス アカウント

デフォルトでは、Google Cloud Functions サービス エージェント サービス アカウント(service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)にはプロジェクトの cloudfunctions.serviceAgent ロールが付与されています。

cloudfunctions.serviceAgent が使用する主な権限のいくつかを以下に示します。

権限 説明
roles/artifactregistry.admin リポジトリを管理し、ビルドイメージを Artifact Registry に保存します。
roles/cloudbuild.builds.editor ユーザー プロジェクトでビルドを実行するために、Cloud Build を使用する必要があります。
roles/cloudbuild.customworkers.builder Cloud Build カスタム ワーカーでビルドを作成します。
compute.globalOperations.get
compute.networks.access
vpcaccess.connectors.{get, use}
コンシューマー プロジェクトの VPC にアクセスできる関数をプロビジョニングします。
roles/eventarc.developer 関数の Eventarc トリガーを管理します。
firebasedatabase.instances.{get, update} Firebase Realtime Database でトリガーされる関数を作成します。
iam.serviceAccounts.{actAs, getAccessToken, signBlob} ランタイム サービス アカウントの認証情報を取得する機能。
iam.serviceAccounts.getOpenIdToken エージェントがユーザー指定の権限で OpenID トークンを取得するために必要です。OpenID トークンは IAM が有効な関数を呼び出すために使用されます。
pubsub.subscriptions ユーザーのプロジェクトのサブスクリプションを管理します。
pubsub.topics ユーザーのプロジェクトのトピックを管理します。
roles/run.developer 関数用の Cloud Run サービスを管理します。
storage.buckets.create
storage.objects.{delete, get, create, list}
ソースコードをユーザー プロジェクトに保存するために必要です。

IAM 事前定義ロールで、または次のコマンドを実行して、権限のセット全体を確認できます。

gcloud iam roles describe roles/cloudfunctions.serviceAgent

このサービス アカウントをデフォルトのロールに戻すには、ロールをすべて削除し、Cloud Functions サービス エージェントのロールを追加します。

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member serviceAccount:service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
  --role roles/cloudfunctions.serviceAgent

権限エラーのトラブルシューティング

プロジェクトで関数をデプロイ、更新、削除、または実行する際に権限エラーが発生した場合は、次の手順に沿って操作してください。

  1. プロジェクトで編集者またはオーナーのロールを付与されていること、または Cloud Functions デベロッパーのロールを使用していることを確認します。

    プロジェクト レベルで Cloud Functions デベロッパーのロールを使用している場合は、ユーザーに IAM サービス アカウント ユーザーのロールを付与していることも確認します。

    現時点では、実行権限は関数ごとのレベルでのみ許可されます。

  2. Cloud Functions サービス エージェントのサービス アカウント(service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)に、プロジェクトの Cloud Functions サービス エージェントcloudfunctions.serviceAgent)のロールがあることを確認します。

    このアカウントを確認するには、Console IAM ページの [権限] タブで [Google 提供のロール付与を含みます] チェックボックスがオンになっていることを確認します。また、gcloud projects add-iam-policy-binding PROJECT_ID を使用することもできます。

  3. 自身に Pub/SubCloud Storage などのトリガーのソースの権限があることを確認します。

関数の実行時に「十分な権限がありません」というエラーが表示された場合、または他の認証問題が発生した場合は、関数が必要とするリソースにアクセスするための適切な権限がランタイム サービス アカウントに付与されていることを確認して、ステップ 2 と 3 をもう一度行ってください。

デプロイ中に「サービス利用不可」エラーが発生した場合は、プロジェクトにランタイム サービス アカウント PROJECT_ID@appspot.gserviceaccount.com が存在することを確認してください。削除されたサービス アカウントを再作成するには、サービス アカウントの削除の取り消しをご覧ください。

Cloud Run functions のトラブルシューティングもご覧ください。

1 Cloud Run functions は、2024 年 7 月より前に作成されたプロジェクトでのみ、以前の Cloud Build サービス アカウントを使用します。