外部サービスからトリガーされるビルドの制限

Cloud Build では、組織のポリシー(constraints/cloudbuild.allowedIntegrations)を定義して、ビルドトリガーを呼び出せる外部サービスを制御できます。たとえば、トリガーが GitHub リポジトリの変更をリッスンし、GitHub が組織のポリシーで拒否されている場合、トリガーは実行されません。組織またはプロジェクトに対して任意の数の許可値または拒否値を指定できます。

このページでは、Google Cloud Console と gcloud コマンドライン ツールを使用して統合するための組織のポリシー(constraints/cloudbuild.allowedIntegrations)を設定する方法について説明します。

始める前に

  • Cloud Build and Organization Policy API を有効にします。

    API を有効にする

  • このガイドのコマンドラインの例を使用するには、Google Cloud SDK をインストールして構成します。

  • 組織のポリシーの設定、変更、削除を行うには、組織のポリシーの管理者(roles/orgpolicy.policyAdmin)のロールが必要です。アカウントにロールを追加する方法については、組織のポリシーの管理者の追加をご覧ください。

許可された統合の組織のポリシーの設定

このセクションでは、組織のポリシー(constraints/cloudbuild.allowedIntegrations)を設定して、許可された統合のビルドを定義する方法について説明します。

Console

  1. Google Cloud Console で [組織のポリシー] ページを開きます。

    [組織のポリシー] ページを開く

  2. Allowed Integrations(Cloud Build)ポリシーを含む行をクリックします。

    [ポリシーの詳細] ページが表示されます。

  3. ポリシーを編集するには、[編集] をクリックします。

    [トリガーの編集] ページが表示されます。

  4. [適用先] セクションで、[カスタマイズ] を選択してポリシーの定義を設定します。

  5. [ポリシーの適用] セクションで [置換] を選択し、ポリシーの独自のルールを定義します。それ以外の場合は、[親と結合する] を選択して、親リソースのルールが設定に適用されるようにします。詳細については、階層評価についてをご覧ください。

  6. [ルール] セクションで、[ルールを追加] をクリックして、ポリシーの新しいルールを追加します。

  7. [ポリシーの値] で、[すべて許可] を選択してすべてのサービスからのビルドを許可するか、[すべて拒否] を選択してすべてのサービスからのビルドを拒否するか、[カスタム] を選択して特定のサービスからのビルドを許可または拒否します。

    値として [カスタム] を選択した場合は、次の手順を行います。

    1. [ポリシーの種類] セクションで、[許可] または [拒否] を選択します。

    2. [カスタム値] セクションで、ビルドを許可または拒否するインスタンスまたはリポジトリのホスト URL を入力します。たとえば、GitHub からのビルドを許可または拒否するには、URL を github.com または www.github.com と入力します。

      複数の URL をスペースで区切って入力することもできます。例: github.com ghe.staging-test.com

      イベントに基づいて、指定するホスト URL は次のいずれかになります。

      • RepoSync イベント: ホストは source.developers.google.com です。
      • GitHub アプリイベント: ホストは、JSON ペイロードの repository.html_url フィールド(常に github.com)から派生します。
      • GitHub Enterprise イベント: ホストは JSON ペイロードの repository.html_url フィールドから取得されます。例: ghe.staging-test.com
      • Pub/Sub イベント: ホストは、トリガーで指定されたソースから派生します。トリガーにソースが指定されていない場合、組織のポリシーのチェックはありません。
      • Webhook イベント: トリガーで指定されたソースからホストが導出されます。トリガーにソースが指定されていない場合、組織のポリシーのチェックがあります。
  8. ルールを保存するには、[完了] をクリックします。

  9. 別のルールを追加するには、[ルールを追加] をクリックします。それ以外の場合、ポリシーを保存するには [保存] をクリックします。

gcloud

  1. ターミナル ウィンドウを開きます。

  2. すべてのサービスのビルドを許可または拒否する場合は、次の内容の YAML ファイルを作成します。

    name: projects/PROJECT_NUMBER/policies/cloudbuild.allowedIntegrations
    spec:
      inheritFromParent: INHERIT
      rules:
        - ALLOW_OR_DENY: true
    

    ここで

    • PROJECT_NUMBER はプロジェクト番号です。
    • ポリシールールを親リソースから継承する場合は、INHERITtrue です。そうでない場合は、false です。
    • すべてのホスト URL からのビルドを許可する場合、ALLOW_OR_DENYallowAll です。それ以外の場合は、denyAll です。
    • HOST_URL は、ホストの URL です。例: github.com次の行では、追加の URL を指定することもできます。

    選択したサービスからのビルドを許可または拒否する場合は、次の内容の YAML ファイルを作成します。

    name: projects/PROJECT_NUMBER/policies/cloudbuild.allowedIntegrations
    spec:
      inheritFromParent: INHERIT
      rules:
        - values:
            ALLOW_OR_DENY:
              HOST_URL
              ...
    

    ここで

    • PROJECT_NUMBER はプロジェクト番号です。
    • ポリシールールを親リソースから継承する場合は、INHERITtrue です。そうでない場合は、false です。
    • ビルドを許可するホスト URL を指定する場合、ALLOW_OR_DENYallowedValues です。そうでない場合は、deniedValues です。
    • HOST_URL は、ホストの URL です。例: github.com次の行では、追加の URL を指定することもできます。
  3. 次のコマンドを実行して、組織のポリシーを設定します。ここで、FILE_NAME は YAML ファイルの名前です。

     gcloud org-policies set-policy FILE_NAME
    
  4. ポリシーが設定されていることを確認するには、次のコマンドを実行します。ここで、PROJECT_ID はプロジェクト ID です。

     gcloud org-policies describe cloudbuild.allowedIntegrations --effective --project PROJECT_ID
    

許可された統合の組織のポリシーのテスト

このセクションでは、ビルドトリガーを使用して組織のポリシー(constraints/cloudbuild.allowedIntegrations)をテストする方法について説明します。

  1. まだ作成していない場合は、ビルドトリガーを作成します

  2. ソースに変更を push します。

  3. ソースからのビルドを許可するようにポリシーが設定されている場合は、[ビルド履歴] ページでトリガーからビルド実行を表示できます。そうしないと、ビルドは実行されません。ポリシー定義によって制限されたビルドの履歴を表示するには、[ログ エクスプローラ] ページで JSON ペイロードと拒否の理由を確認します。

次のステップ