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

この動作をオーバーライドしない限り、Cloud Build では、ユーザーに代わってビルドを実行する Cloud Build サービス アカウントが自動的に選択されます。 このデフォルトのサービス アカウントには、プロジェクト内の Container Registry リポジトリや Cloud Storage バケットへのアクセスなど、ユースケースに対して必要以上に幅広い権限が付与されている場合があります。

Cloud Build が新しいプロジェクトでサービス アカウントを使用する際のデフォルトの動作は、2024 年 5 月と 6 月の数週間にわたって変更されました。これらの変更により、今後のお客様のデフォルト セキュリティ対策が改善されます。これらの変更をオプトアウトするには、組織のポリシー制約を構成します。

この変更前、Cloud Build は Cloud Build 固有のサービス アカウントをデフォルトとして使用していました。現在このサービス アカウントは、Cloud Build の従来のサービス アカウントと呼ばれています。

この変更後、Cloud Build はデフォルトのサービス アカウントとして Compute Engine のデフォルトのサービス アカウントを使用します。

プロジェクトへの影響は、組織に所属しているかどうかによって異なります。

  • 組織のないプロジェクト。変更後にプロジェクトで最初のビルドを実行すると、そのプロジェクトでは、Cloud Build API または Google Cloud CLI を使用して送信されるビルドにデフォルトで Compute Engine サービス アカウントが使用されます。これらのプロジェクトでは、Cloud Build の従来のサービス アカウントを使用するオプションはありませんが、ユーザー指定のサービス アカウントを使用できます。

  • 組織に属するプロジェクト。変更後にプロジェクトで最初のビルドを実行すると、そのプロジェクトでは、Cloud Build API または Google Cloud CLI を使用して送信されるビルドにデフォルトで Compute Engine サービス アカウントが使用されます。ユーザー指定のサービス アカウントを使用することも、組織で Cloud Build サービス アカウントを有効にして変更をオプトアウトすることもできます。

  • 組織のない既存のプロジェクト。変更前にプロジェクトで最初のビルドを実行した場合、そのプロジェクトでは従来の動作が引き続き使用され、すべてのビルドで Cloud Build の従来のサービス アカウントがデフォルトで使用されます。Compute Engine サービス アカウントを選択するか、独自のサービス アカウントを作成することで、ユーザー指定のサービス アカウントを引き続き使用できます。

  • 組織に属する既存のプロジェクト。変更前にプロジェクトで最初のビルドを実行した場合、そのプロジェクトでは従来の動作が引き続き使用され、デフォルトで Cloud Build の従来のサービス アカウントが使用されます。ユーザー指定のサービス アカウントを引き続き使用することもできます。

  • トリガー。プロジェクトのデフォルトのサービス アカウントが Cloud Build の従来のサービス アカウントである場合を除き、トリガーを作成または更新するときにサービス アカウントを指定する必要があります。

  • Cloud Build サービス アカウント名: Cloud Build サービス アカウントは、Cloud Build の従来のサービス アカウントと呼ばれます。

必要なご対応について

組織に所属している場合は、選択した制約を使用して組織のポリシーを設定することで、すべてのプロジェクトの動作を構成できます。

組織は、次の組織のポリシーのブール型制約を設定することで、これらの変更をオプトアウトできます。

  • 未適用: constraints/cloudbuild.disableCreateDefaultServiceAccount
  • 未適用: constraints/cloudbuild.useComputeServiceAccount
  • 適用済み: constraints/cloudbuild.useBuildServiceAccount

組織のポリシーを調整できない、または調整したくない場合で、変更後に Cloud Build API を有効にする場合は、Compute Engine のデフォルトのサービス アカウントまたはユーザーが作成したサービス アカウントに、ビルドに対する十分な権限があることを検証してください。特に、ビルドを送信するユーザーには、サービス アカウントに対する iam.serviceAccounts.actAs 権限が必要です。

新しい組織のポリシーの制約

Cloud Build では、次の項目を構成するための新しい組織のポリシーのブール型制約が導入されています。

  • Cloud Build の従来のサービス アカウントを使用するための機能。
  • 組織内のすべてのプロジェクトのデフォルトのサービス アカウント。

組織のポリシーを変更するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。

組織のポリシーの詳細については、組織ポリシー サービスの概要をご覧ください。

Cloud Build の従来のサービス アカウントの可用性を構成する

Cloud Build API を有効にするときに Cloud Build の従来のサービス アカウントの可用性を構成するため、Cloud Build には次のブール値ポリシー制約が導入されます。

  • 未適用: constraints/cloudbuild.disableCreateDefaultServiceAccount。新しいプロジェクトで Cloud Build の従来のサービス アカウントを使用できるようにします。

  • 適用済み: constraints/cloudbuild.disableCreateDefaultServiceAccount。新しいプロジェクトで Cloud Build の従来のサービス アカウントの使用を無効にします。これは制約のデフォルト値です。

この制約は、変更のロールアウト後に最初のビルドを実行するプロジェクトにのみ影響します。ポリシー制約を適用しない場合は、その構成が有効なときに最初のビルドを実行するすべてのプロジェクトに対して、変更が永続的に適用されます。サービス アカウントが以前に使用されていたプロジェクトでは、Cloud Build の従来の サービス アカウントの可用性をオフにすることはできません。ただし、サービス アカウントが使用可能であっても、次のセクションで説明するように、組織内のユーザーが使用できないようにすることができます。

すべての組織のポリシーや制約と同様に、これらのポリシーは組織レベルまたはプロジェクト レベルで設定できます。

組織のデフォルトのサービス アカウントを構成する

組織で使用するデフォルトのサービス アカウントを構成するために、Cloud Build では 2 つの新しいポリシーのブール型制約が導入されています。

これらのポリシーは相互に独立して構成できますが、次のシナリオで適用ルールを組み合わせる場合に最も便利です。

  • 手動で送信されたビルドとトリガーされたビルドの両方で、Compute Engine のデフォルトのサービス アカウントを使用します。組織のポリシーに次の制約を設定します。

    • 未適用: constraints/cloudbuild.useBuildServiceAccount
    • 適用済み: constraints/cloudbuild.useComputeServiceAccount
  • 手動で送信されたビルドとトリガーされたビルドの両方に、ユーザー指定のサービス アカウントを使用します。通常、これは最も安全なオプションです。組織のポリシーで次の制約を設定します。

    • 未適用: constraints/cloudbuild.useBuildServiceAccount
    • 未適用: constraints/cloudbuild.useComputeServiceAccount
  • Cloud Build の従来のサービス アカウントを引き続き使用します。関連するセキュリティのトレードオフを認識している場合は、組織のポリシーに次の制約を設定します。

    • 未適用: constraints/cloudbuild.disableCreateDefaultServiceAccount
    • 未適用: constraints/cloudbuild.useComputeServiceAccount
    • 適用済み: constraints/cloudbuild.useBuildServiceAccount
  • 変更前に Cloud Build API を有効にしたプロジェクトでは、引き続き Cloud Build の従来のサービス アカウントを使用し、新しいプロジェクトでは Compute Engine のデフォルトのサービス アカウントの使用を開始します。関連するセキュリティのトレードオフを理解し、組織のポリシーに次の制約を設定します。

    • 適用済み: constraints/cloudbuild.disableCreateDefaultServiceAccount
    • 適用済み: constraints/cloudbuild.useComputeServiceAccount
    • 適用済み: constraints/cloudbuild.useBuildServiceAccount

プロジェクトの現在のデフォルトのサービス アカウントを取得する

Cloud Build がプロジェクトのデフォルトとして使用しているサービス アカウントを特定するには、Google Cloud CLI または Cloud Build API を使用します。

gcloud CLI

次のコマンドを実行して、現在のプロジェクトのデフォルトのサービス アカウントを取得します。

gcloud builds get-default-service-account

Cloud Build API

cURLを使用して Cloud Build API を呼び出します。

curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/defaultServiceAccount

プレースホルダの値を次のように置き換えます。