このページでは、Binary Authorization を使用して、Cloud Build によってビルドされたイメージのみのデプロイを許可する方法について説明します。
始める前に
Cloud Build, Binary Authorization, and Artifact Registry API を有効にします。
このガイドのコマンドラインの例を使用するには、Google Cloud SDK をインストールして構成します。
Binary Authorization でデプロイを制御する
Binary Authorization ポリシーは、イメージのデプロイを制御する一連のルールです。ルールは、デジタル署名された証明書を要求するように構成できます。
Cloud Build は、ビルド時に証明書を生成して署名します。Binary Authorization では、built-by-cloud-build
認証者を使用して証明書を検証し、Cloud Build によってビルドされたイメージのみをデプロイできます。
プロジェクトに built-by-cloud-build
認証者を作成するには、そのプロジェクトでビルドを実行します。
Cloud Build によってビルドされたイメージのみをデプロイできるようにするには、次の手順を行います。
Console
Google Cloud Console で [Binary Authorization] ページに移動します。
[ポリシー] タブで [ポリシーの編集] をクリックします。
[ポリシーの編集] ダイアログで、[次のすべてのアテスターによって承認されたイメージのみを許可] を選択します。
[認証者の追加] をクリックします。
[認証者の追加] ダイアログ ボックスで、次の操作を行います。
- [プロジェクトと認証者の名前により追加] を選択し、次の手順を行います。
- [プロジェクト名] フィールドに、Cloud Build を実行するプロジェクトを入力します。
- [認証者の名前] をクリックして、
built-by-cloud-build
認証者が表示されていることを確認します。 - [
built-by-cloud-build
] をクリックします。
または、[認証者リソース ID により追加] を選択します。[認証者リソース ID] に次のように入力します。
projects/PROJECT_ID/attestors/built-by-cloud-build
PROJECT_ID
は、Cloud Build を実行するプロジェクトに置き換えます。
- [プロジェクトと認証者の名前により追加] を選択し、次の手順を行います。
[Add 1 attestor] をクリックします。
[ポリシーを保存] をクリックします。
gcloud
次のコマンドを使用して、既存のポリシーをファイルにエクスポートします。
gcloud container binauthz policy export > /tmp/policy.yaml
ポリシー ファイルを編集します。
次のいずれかのルールを編集します。
defaultAdmissionRule
clusterAdmissionRules
istioServiceIdentityAdmissionRules
kubernetesServiceAccountAdmissionRules
まだルールに
requireAttestationsBy
ブロックがない場合は、追加します。requireAttestationsBy
ブロックに以下の行を追加します。projects/PROJECT_ID/attestors/built-by-cloud-build
PROJECT_ID
は、Cloud Build を実行するプロジェクトに置き換えます。ポリシー ファイルを保存します。
ポリシー ファイルをインポートします。
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
Google Cloud Console で [Binary Authorization] ページに移動します。
[ポリシーの編集] をクリックします。
デフォルトのルールまたは固有のルールで、[ドライラン モード] を選択します。
[ポリシーを保存] をクリックします。
gcloud
Binary Authorization ポリシーを YAML ファイルにエクスポートします。
gcloud container binauthz policy export > /tmp/policy.yaml
テキスト エディタで、
enforcementMode
をDRYRUN_AUDIT_LOG_ONLY
に設定し、ファイルを保存します。ポリシーを更新するには、次のコマンドを実行してファイルをインポートします。
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"