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

組織の設定によっては、Cloud Build は Compute Engine のデフォルトのサービス アカウントまたは従来の Cloud Build サービス アカウントを使用して、ユーザーに代わってビルドを実行する場合があります。

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

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

Compute Engine のデフォルトのサービス アカウントについて

組織のポリシーで、デフォルトの Cloud Build サービス アカウントが Compute Engine のデフォルトのサービス アカウントとして定義されている場合があります。このサービス アカウントのメールアドレスは
PROJECT_NUMBER-compute@developer.gserviceaccount.com です。

Compute Engine のデフォルトのサービス アカウントについては、Compute Engine のデフォルトのサービス アカウントをご覧ください。

従来の Cloud Build サービス アカウントについて

組織のポリシーで、デフォルトの Cloud Build サービス アカウントが従来のサービス アカウントとして定義されている場合があります。従来の Cloud Build サービス アカウントのメールアドレスは
PROJECT_NUMBER@cloudbuild.gserviceaccount.com です。

このセクションでは、以前の Cloud Build サービス アカウントにデフォルトで付与されるすべての権限について説明します。

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

プロジェクトの設定で従来の Cloud Build サービス アカウントの使用が許可されている場合、従来のサービス アカウントには、プロジェクト内のリソースに対する Cloud Build サービス アカウントロール(roles/cloudbuild.builds.builder)が付与されます。このロールには、ビルドの更新やログの書き込みなど、さまざまな権限が含まれます。サービス アカウントは、ビルドの実行時にアクションを実行するために必要な場合にのみ、これらの権限を使用します。たとえば、ビルドが構成されている場合、サービス アカウントは artifactregistry.dockerimages.get 権限を使用して Artifact Registry から Docker イメージを取得します。

ビルドプロセスの一環としてアクションを実行する予定がない場合は、セキュリティに関する最小権限の原則に準拠するために、サービス アカウントから対応する権限を取り消すことをおすすめします。

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

権限 説明 権限の目的
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 ビルドを承認または拒否するためのアクセス権を取得できる rowspan=3>保留中のビルドを承認または拒否するために必要
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 バケットを作成できる 必要事項:
  • 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 編集者のロールを持つユーザーは、トリガーを作成して直接実行できます。たとえば、ユーザーはトリガーを手動で実行できます。トリガーが Cloud Build の従来のサービス アカウントを使用している限り、Cloud Build 編集者のロールを持つユーザーは、トリガーを更新できます。

  • ユーザー指定のサービス アカウントまたは Compute Engine のデフォルトのサービス アカウント: Cloud Build 編集者のロールを持ち、iam.serviceAccounts.actAs 権限を持つユーザーは、トリガーを作成して直接実行できます。たとえば、ユーザーはトリガーを手動で実行できます。

    Cloud Build 編集者のロールを持つユーザーは、トリガーに指定された、以前に構成されたサービス アカウントと新しいサービス アカウントの両方に対する iam.serviceAccounts.actAs 権限があれば、トリガーを更新できます。ユーザーにこの権限を付与するには、サービス アカウント ユーザーロール(roles/iam.serviceAccountUser)など、権限を含む事前定義ロールをユーザーに付与します。または、iam.serviceAccounts.actAs 権限を持つカスタム IAM ロールを作成し、そのロールをユーザーに付与することもできます。サービス アカウントの権限の詳細については、サービス アカウントの認証用のロールをご覧ください。

トリガーのビルド時の権限

ビルドトリガー用に構成されたサービスアカウントでは、ビルドを呼び出すトリガーを使用するユーザーに、ビルド時の昇格した権限を付与できます。これは、従来のサービス アカウントとユーザー指定のサービス アカウントの両方に適用されます。ビルドトリガーを使用する場合は、次のセキュリティ上の影響に注意してください。

  • Google Cloud プロジェクトへのアクセス権はないが、プロジェクト内のビルドトリガーに関連付けられたリポジトリへの書き込みアクセス権があるユーザーは、ビルドされるコードを変更する権限を持ちます。たとえば、接続されたリポジトリに新しいソースコードを push すると、ユーザーは間接的にトリガーを呼び出すことができます。

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

従来の Cloud Build サービス アカウントの制限事項

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

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

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

  • 以前のサービス アカウントに IAM ポリシー バインディングを追加することはできません。たとえば、別のサービス アカウントに以前のサービス アカウントに対する roles/iam.serviceAccountTokenCreator ロールを付与する IAM ポリシー バインディングを作成することはできません。

次のステップ