Cloud Build サービス アカウント

Cloud Build では、特別なサービス アカウントを使用してユーザーの代わりにビルドを実行するケースがあります。Cloud Build サービス アカウントのメールアドレスは [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com です。このサービス アカウントには、ユースケースに対して必要以上に幅広い権限が付与されている場合があります。最小権限の原則に従うことで、セキュリティ体制を強化できます。この原則の一環として、ユーザーの代わりにビルドを実行する独自のサービス アカウントを作成することをおすすめします。これにより、構成ミスや悪意のあるユーザーの潜在的な影響を軽減できます。

このページでは、Cloud Build サービス アカウントにデフォルトで付与されるすべての権限について説明します。Cloud Build サービス アカウントに対して権限を付与または取り消す方法については、Cloud Build サービス アカウントへのアクセスの構成をご覧ください。

Cloud Build サービス アカウントのデフォルトの権限

Google Cloud プロジェクトで Cloud Build API を有効にすると、Cloud Build サービス アカウントが自動的にプロジェクトに作成され、プロジェクト内のリソースに対する Cloud Build サービス アカウントのロールが付与されます。このロールには、ビルドの更新やログの書き込みなど、さまざまな権限が含まれます。サービス アカウントは、ビルドの実行時にアクションを実行するために必要な場合にのみ、これらの権限を使用します。たとえば、ビルドのソースコードが Cloud Source Repositories にある場合、サービス アカウントは source.repos.get 権限を使用して Cloud Source Repositories からコードをフェッチします。ビルドプロセスの一環としてアクションを実行する予定がない場合は、セキュリティに関する最小権限の原則に準拠するために、Cloud Build サービス アカウントから対応する権限を取り消すことをおすすめします。

次の表に、Cloud Build サービス アカウントのロールに含まれる権限と、Cloud Build サービス アカウントがこれらの権限を使用する目的を示します。

権限 説明 権限の目的
cloudbuild.builds.create ビルドとトリガーを作成できる 必要事項:
  • ビルドトリガーを使用する
  • ビルドの作成、一覧表示、取得、キャンセルを行う
cloudbuild.builds.update ビルドとトリガーを更新できる
cloudbuild.builds.list ビルドとトリガーを一覧表示できる
cloudbuild.builds.get ビルドとトリガーを取得できる
cloudbuild.workerpools.use プライベート プールを使用する プライベート プールでビルドを実行するために必要。
logging.logEntries.create ログを書き込む Cloud Logging でのビルドログの作成と一覧表示に必要。
logging.logEntries.list ログを一覧表示できる
logging.views.access ログを表示できる
pubsub.topics.create Pub/Sub トピックを作成する ビルドの更新を Pub/Sub に push するときに必要
pubsub.topics.publish Pub/Sub に公開する
remotebuildexecution.blobs.get ビルドを承認または拒否するためのアクセス権を取得できる 保留中のビルドを承認または拒否するために必要
resourcemanager.projects.get プロジェクト情報を取得できる
resourcemanager.projects.list プロジェクトを一覧表示する
source.repos.get Cloud Source Repositories のリポジトリからソースコードを読み取る 必要事項:
  • Bitbucket トリガーと Cloud Source Repositories トリガーを使用する
  • Cloud Source Repositories からソースコードを pull する
source.repos.list Cloud Source Repositories のリポジトリを一覧表示する
storage.buckets.create Cloud Storage バケットを作成できる 必要事項:
  • Container Registry でイメージを保存、取得します( 非推奨)。
  • Cloud Storage にアーティファクトを保存、取得する。
  • gcloud builds submit で手動でビルドを送信する
  • ビルドログをユーザーが作成したログバケットに保存する
storage.buckets.get Cloud Storage バケットを取得する
storage.buckets.list Cloud Storage バケットを一覧表示する
storage.objects.list Cloud Storage オブジェクトを一覧表示する
storage.objects.update Cloud Storage オブジェクトを更新する
storage.objects.create Cloud Storage オブジェクトを書き込む
storage.objects.delete Cloud Storage オブジェクトを削除する
storage.objects.get Cloud Storage オブジェクトを読み取る
artifactregistry.repositories.uploadArtifacts Artifact Registry のリポジトリにアーティファクトをアップロードする Artifact Registry のアーティファクトの管理に必要
artifactregistry.repositories.downloadArtifacts Artifact Registry のリポジトリからアーティファクトをダウンロードする
artifactregistry.aptartifacts.create Apt アーティファクトを Artifact Registry にアップロードする
artifactregistry.dockerimages.get Artifact Registry から Docker イメージを取得する
artifactregistry.dockerimages.list Artifact Registry 内の Docker イメージを一覧表示する
artifactregistry.kfpartifacts.create KFP アーティファクトを Artifact Registry にアップロードする
artifactregistry.locations.get Artifact Registry にあるリソースのロケーションに関する情報を取得する
artifactregistry.locations.list Artifact Registry でサポートされるロケーションを一覧表示する
artifactregistry.mavenartifacts.get Artifact Registry から Maven パッケージを取得する
artifactregistry.mavenartifacts.list Artifact Registry から Maven パッケージを一覧表示する
artifactregistry.npmpackages.get Artifact Registry から npm パッケージを取得する
artifactregistry.npmpackages.list Artifact Registry から npm パッケージを一覧表示する
artifactregistry.projectsettings.get Artifact Registry からプロジェクト設定を取得する
artifactregistry.pythonpackages.get Artifact Registry から Python パッケージを取得する
artifactregistry.pythonpackages.list Artifact Registry から Python パッケージを一覧表示する
artifactregistry.yumartifacts.create Yum アーティファクトを Artifact Registry にアップロードする
artifactregistry.repositories.createOnPush イメージがプロジェクト内の gcr.io ホスト名に初めて push されたときに、Artifact Registry で gcr.io リポジトリを作成できます。
artifactregistry.repositories.get Artifact Registry からリポジトリを取得する
artifactregistry.repositories.list Artifact Registry でリポジトリを一覧表示する
artifactregistry.repositories.listEffectiveTags Artifact Registry にあるアーティファクトのタグを一覧表示する Artifact Registry にあるアーティファクトのタグを管理するために必要
artifactregistry.repositories.listTagBindings Artifact Registry にあるアーティファクトのタグ バインディング情報を一覧表示する
artifactregistry.tags.create Artifact Registry でタグを作成する
artifactregistry.tags.get Artifact Registry からタグを取得する
artifactregistry.tags.list Artifact Registry 内のタグを一覧表示する
artifactregistry.tags.update Artifact Registry でタグを更新する
artifactregistry.versions.list Artifact Registry 内のバージョンを一覧表示する
artifactregistry.versions.get Artifact Registry からバージョンを取得する
containeranalysis.occurrences.create Artifact Analysis の実行回数を作成する これらの権限は、Cloud Build サービス アカウントでは使用されませんが、下位互換性のために含まれています。
containeranalysis.occurrences.delete Artifact Analysis の実行回数を削除する
containeranalysis.occurrences.get Artifact Analysis の実行回数を取得する
containeranalysis.occurrences.list Artifact Analysis の実行回数を一覧表示する
containeranalysis.occurrences.update Artifact Analysis の実行回数を更新する

ビルドトリガー

ビルドトリガーは、Cloud Build サービス アカウントを使用してビルドを実行します(デフォルト)。また、任意のサービス アカウントを使用してビルドを実行するようにビルドトリガーを構成することもできます。各トリガーは異なるサービス アカウントで構成できます。

ビルドトリガーに指定するサービス アカウントを選択する際は、次の点に注意してください。

  • デフォルトの Cloud Build サービス アカウント: Cloud Build 編集者のロールを持つユーザーは、トリガーを作成して直接実行できます。たとえば、ユーザーはトリガーを手動で実行できます。どのユーザーも間接的にトリガーを実行できます。たとえば、接続されたリポジトリに新しいソースコードを push すると、そのユーザーは間接的にトリガーを呼び出すことができます。トリガーで指定された以前のサービス アカウントと新しいサービス アカウントが、デフォルトの Cloud Build アカウントである限り、Cloud Build 編集者のロールを持つすべてのユーザーは、トリガーを更新できます。

  • ユーザー指定のサービス アカウント: Cloud Build 編集者のロールを持ち、iam.serviceAccounts.actAs 権限を持つユーザーが、トリガーを作成して直接実行できます。たとえば、ユーザーはトリガーを手動で実行できます。 どのユーザーも間接的にトリガーを実行できます。たとえば、接続されたリポジトリに新しいソースを push すると、ユーザーは間接的にトリガーを呼び出すことができます。Cloud Build 編集者のロールを持つすべてのユーザーは、トリガーに指定された、以前に構成されたサービス アカウントと新しいサービス アカウントの両方に対する iam.serviceAccounts.actAs 権限があれば、トリガーを更新できます。この権限をユーザーに付与するには、サービス アカウント ユーザーのロール(roles/iam.serviceAccountUser)など、事前定義された権限を持つロールを付与します。または、iam.serviceAccounts.actAs 権限を持つカスタム IAM ロールを作成し、そのロールをユーザーに付与できます。サービス アカウントの権限の詳細については、サービス アカウントの認証のロールをご覧ください。

また、デフォルトの Cloud Build サービス アカウントとユーザー指定のサービス アカウントを使用すると、トリガーを使用してビルドを呼び出すユーザーの権限が昇格し、ビルド時の権限が付与されます。デフォルトの Cloud Build サービス アカウントに関連付けられたビルドトリガーを使用する場合は、次のセキュリティ上の影響に注意してください。

  • Google Cloud プロジェクトへのアクセス権はないが、プロジェクト内のビルドトリガーに関連付けられたリポジトリへの書き込みアクセス権があるユーザーは、ビルドされるコードを変更する権限を持ちます。
  • さらに、GitHub pull リクエスト トリガーを使用している場合は、リポジトリへの読み取りアクセス権を持つすべてのユーザーが pull リクエストを送信できます。これにより、pull リクエスト内のコードの変更を含むビルドがトリガーされる可能性が生じます。この動作を無効にするには、GitHub の pull リクエスト トリガーを作成するときに [コメント制御] オプションを選択します。このオプションを選択すると、リポジトリ所有者または共同編集者が /gcbrun にコメントした場合にのみビルドが開始されます。GitHub トリガーコメント制御を使用する方法については、GitHub トリガーの作成をご覧ください。

制限事項

ID トークンを使用してサービス間で認証を行う必要がある場合は、ユーザー指定のサービス アカウントでビルドを実行する必要があります。デフォルトの Cloud Build サービス アカウントを使用して ID トークンを生成することはできません。

たとえば、Cloud Functions、Cloud Run、App Engine などのサーバーレス プラットフォーム アプリケーションを使用していて、Cloud Build からアプリケーションを呼び出す場合は、サービス間の認証に必要な権限を使用して構成されたユーザー指定のサービス アカウントが必要です。

手順については、サービス間のアクセスを承認するをご覧ください。

次のステップ