Binary Authorization を使用してイメージのデプロイを制御する

このページでは、Binary Authorization を使用して、Cloud Build によってビルドされたイメージのみのデプロイを許可する方法について説明します。

始める前に

  1. Cloud Build, Binary Authorization, and Artifact Registry API を有効にします。

    API を有効にする

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

  3. プラットフォームに Binary Authorization を設定する

Binary Authorization でデプロイを制御する

Binary Authorization ポリシーは、イメージのデプロイを制御する一連のルールです。ルールは、デジタル署名された証明書を要求するように構成できます。

Cloud Build は、ビルド時に証明書を生成して署名します。Binary Authorization では、built-by-cloud-build 認証者を使用して証明書を検証し、Cloud Build によってビルドされたイメージのみをデプロイできます。

プロジェクトに built-by-cloud-build 認証者を作成するには、そのプロジェクトでビルドを実行します。

Cloud Build によってビルドされたイメージのみをデプロイできるようにするには、次の手順を行います。

Console

  1. Google Cloud Console で [Binary Authorization] ページに移動します。

    Binary Authorization に移動

  2. [ポリシー] タブで [ポリシーの編集] をクリックします。

  3. [ポリシーの編集] ダイアログで、[次のすべてのアテスターによって承認されたイメージのみを許可] を選択します。

  4. [認証者の追加] をクリックします。

  5. [認証者の追加] ダイアログ ボックスで、次の操作を行います。

    1. [プロジェクトと認証者の名前により追加] を選択し、次の手順を行います。
      1. [プロジェクト名] フィールドに、Cloud Build を実行するプロジェクトを入力します。
      2. [認証者の名前] をクリックして、built-by-cloud-build 認証者が表示されていることを確認します。
      3. [built-by-cloud-build] をクリックします。
    2. または、[認証者リソース ID により追加] を選択します。[認証者リソース ID] に次のように入力します。

      projects/PROJECT_ID/attestors/built-by-cloud-build
      

      PROJECT_ID は、Cloud Build を実行するプロジェクトに置き換えます。

  6. [Add 1 attestor] をクリックします。

  7. [ポリシーを保存] をクリックします。

gcloud

  1. 次のコマンドを使用して、既存のポリシーをファイルにエクスポートします。

    gcloud container binauthz policy export > /tmp/policy.yaml
    
  2. ポリシー ファイルを編集します。

  3. 次のいずれかのルールを編集します。

    • defaultAdmissionRule
    • clusterAdmissionRules
    • istioServiceIdentityAdmissionRules
    • kubernetesServiceAccountAdmissionRules
  4. まだルールに requireAttestationsBy ブロックがない場合は、追加します。

  5. requireAttestationsBy ブロックに以下の行を追加します。

    projects/PROJECT_ID/attestors/built-by-cloud-build
    

    PROJECT_ID は、Cloud Build を実行するプロジェクトに置き換えます。

  6. ポリシー ファイルを保存します。

  7. ポリシー ファイルをインポートします。

    gcloud container binauthz policy import /tmp/policy.yaml
    

    built-by-cloud-build-attestor への参照を含むポリシー ファイルの例を次に示します。

    defaultAdmissionRule:
      evaluationMode: REQUIRE_ATTESTATION
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      requireAttestationsBy:
        - projects/PROJECT_ID/attestors/built-by-cloud-build
    name: projects/PROJECT_ID/policy
    

    PROJECT_ID は、Cloud Build を実行するプロジェクト ID に置き換えます。

ポリシーエラーは、GKE または Cloud Run の Binary Authorization ログメッセージで確認できます。

ドライラン モードを使用する

ドライラン モードでは、デプロイを実際にブロックすることなく、Binary Authorization でポリシーのコンプライアンスを確認します。なお、ポリシー遵守のステータス メッセージは、Cloud Logging に記録されます。これらのログを使用して、ブロッキング ポリシーが正常に動作しているかどうかを確認し、誤検出を特定できます。

ドライランを有効にするには、次の操作を行います。

Console

  1. Google Cloud Console で [Binary Authorization] ページに移動します。

    Binary Authorization に移動

  2. [ポリシーの編集] をクリックします。

  3. デフォルトのルールまたは固有のルールで、[ドライラン モード] を選択します。

  4. [ポリシーを保存] をクリックします。

gcloud

  1. Binary Authorization ポリシーを YAML ファイルにエクスポートします。

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. テキスト エディタで、enforcementModeDRYRUN_AUDIT_LOG_ONLY に設定し、ファイルを保存します。

  3. ポリシーを更新するには、次のコマンドを実行してファイルをインポートします。

    gcloud container binauthz policy import /tmp/policy.yaml
    

ポリシーエラーは、GKE または Cloud Run の Binary Authorization ログメッセージで確認できます。

制限事項

このページの手順に従うには、Cloud Build と Binary Authorization が同じプロジェクト内にある必要があります。デプロイ プラットフォームを別のプロジェクトで実行している場合、Binary Authorization で built-by-cloud-build 認証者を追加するときに Cloud Build プロジェクトを参照してください。

プライベート プール内の証明書を有効にする

デフォルトでは、Cloud Build はプライベート プール内のビルドに Binary Authorization 証明書を生成しません。証明書を生成するには、ビルド構成ファイルrequestedVerifyOption: VERIFIED オプションを追加します。

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
  requestedVerifyOption: VERIFIED

requestedVerifyOption を追加した後、Cloud Build は、イメージの証明書の生成と来歴メタデータを有効にします。

認証者メタデータを確認する

認証者は、プロジェクトで初めてビルドを実行するときに作成されます。 認証者 ID の形式は projects/PROJECT_ID/attestors/built-by-cloud-build で、PROJECT_ID はプロジェクト ID です。

ビルド認証者メタデータは、次のコマンドを使用して確認できます。

curl -X GET -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build

PROJECT_ID は、Cloud Build を実行するプロジェクトに置き換えます。

出力には、認証者と対応する公開鍵に関する情報が含まれます。例:

name": "projects/PROJECT_ID/attestors/built-by-cloud-build",
  "userOwnedDrydockNote": {
    "noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build",
    "publicKeys": [
      {
        "id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1",
        "pkixPublicKey": {
          "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n",
          "signatureAlgorithm": "ECDSA_P256_SHA256"
        }
      },
...
      }
    ],
    "delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com"
  },
  "updateTime": "2021-09-24T15:26:44.808914Z",
  "description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"

次のステップ