本頁說明如何使用二進位授權持續驗證 (CV) 簡易簽署認證檢查。這項檢查會驗證與 Pod 相關聯的容器映像檔的簽章,這些 Pod 會在啟用 CV 的 Google Kubernetes Engine (GKE) 叢集中執行。
費用
本指南使用下列 Google Cloud 服務:
- 二進位授權,但 CV 在預先發布版階段免費提供
- GKE
- Cloud Key Management Service
您可以使用 Pricing Calculator 根據預測用量估算費用。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable binaryauthorization.googleapis.com
cloudkms.googleapis.com container.googleapis.com -
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization, Cloud Key Management Service, Google Kubernetes Engine APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable binaryauthorization.googleapis.com
cloudkms.googleapis.com container.googleapis.com - 確認 gcloud CLI 已更新至最新版本。
- 安裝
kubectl指令列工具。 - 如果二進位授權政策和 GKE 叢集位於不同專案,請務必在這兩個專案中啟用二進位授權。
-
如果叢集專案與政策專案不同:
叢集專案二進位授權服務代理人的二進位授權政策評估者 (
roles/binaryauthorization.policyEvaluator) ,才能存取政策專案 -
如果驗證專案與政策專案不同:
政策專案的二進位授權服務代理程式需要「容器分析例項檢視者」 (
roles/containeranalysis.occurrences.viewer) 角色,才能存取驗證專案。 授予叢集專案的二進位授權服務代理程式權限,以存取政策專案中的政策。
取得叢集專案的二進位授權服務代理:
PROJECT_NUMBER=$(gcloud projects list --filter="projectId:CLUSTER_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") CLUSTER_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"將
CLUSTER_PROJECT_ID替換為叢集的專案 ID。允許 CV 評估叢集上的政策:
gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \ --member="serviceAccount:$CLUSTER_SERVICE_ACCOUNT" \ --role='roles/binaryauthorization.policyEvaluator'將
POLICY_PROJECT_ID替換為包含政策的專案 ID。
允許政策專案的二進位授權服務代理人存取驗證專案中的驗證:
取得政策專案的二進位授權服務代理:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:POLICY_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"將
POLICY_PROJECT_ID替換為包含政策的專案 ID。授予角色:
gcloud projects add-iam-policy-binding ATTESTATION_PROJECT_ID \ --member="serviceAccount:$SERVICE_ACCOUNT" \ --role='roles/containeranalysis.occurrences.viewer'將
ATTESTATION_PROJECT_ID替換為包含認證的專案 ID。
設定建立金鑰組所需的環境變數。如要這麼做,建議您填入下列指令中的預留位置,然後執行該指令。
KMS_KEY_PROJECT_ID=KMS_KEY_PROJECT_ID KMS_KEYRING_NAME=KMS_KEYRING_NAME KMS_KEY_NAME=KMS_KEY_NAME KMS_KEY_LOCATION=global KMS_KEY_PURPOSE=asymmetric-signing KMS_KEY_ALGORITHM=ec-sign-p256-sha256 KMS_PROTECTION_LEVEL=software KMS_KEY_VERSION=1 KEY_FILE=KEY_FILE更改下列內容:
KMS_KEY_PROJECT_ID:專案 IDKMS_KEYRING_NAME:Cloud KMS 金鑰環的名稱KMS_KEY_NAME:Cloud KMS 金鑰的名稱KEY_FILE:儲存 Cloud KMS 金鑰的本機路徑
建立金鑰環:
gcloud kms keyrings create ${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} \ --project=${KMS_KEY_PROJECT_ID}建立金鑰:
gcloud kms keys create ${KMS_KEY_NAME} \ --location=${KMS_KEY_LOCATION} \ --keyring=${KMS_KEYRING_NAME} \ --purpose=${KMS_KEY_PURPOSE} \ --default-algorithm=${KMS_KEY_ALGORITHM} \ --protection-level=${KMS_PROTECTION_LEVEL} \ --project=${KMS_KEY_PROJECT_ID}將公開金鑰內容匯出至檔案:
gcloud kms keys versions get-public-key ${KMS_KEY_VERSION} \ --key=${KMS_KEY_NAME} \ --keyring=${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} \ --output-file=${KEY_FILE} \ --project=${KMS_KEY_PROJECT_ID}建立私密金鑰:
PRIVATE_KEY_FILE="/tmp/ec_private.pem" openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}從私密金鑰取得公開金鑰:
PUBLIC_KEY_FILE="/tmp/ec_public.pem" openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}建立簡單的簽署認證檢查平台政策 YAML 檔案:
PKIX Cloud KMS
cat > /tmp/my-policy.yaml << EOF gkePolicy: checkSets: - checks: - simpleSigningAttestationCheck: containerAnalysisAttestationProjects: - projects/ATTESTATION_PROJECT_ID attestationAuthenticators: pkixPublicKeySet: pkixPublicKeys: publicKeyPem: | $(awk '{printf " %s\n", $0}' ${KEY_FILE}) signatureAlgorithm: ECDSA_P256_SHA256 keyId: |- //cloudkms.googleapis.com/v1/projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION} EOF將
ATTESTATION_PROJECT_ID替換為專案 ID,該專案會儲存使用這個 Cloud KMS 金鑰建立的認證。本機金鑰
cat > /tmp/my-policy.yaml <<EOF gkePolicy: checkSets: - checks: - simpleSigningAttestationCheck: containerAnalysisAttestationProjects: - projects/ATTESTATION_PROJECT_ID attestationAuthenticators: pkixPublicKeySet: pkixPublicKeys: publicKeyPem: | $(awk '{printf " %s\n", $0}' /tmp/ec_public.pem) signatureAlgorithm: ECDSA_P256_SHA256 keyId: | PUBLIC_KEY_ID EOF更改下列內容:
ATTESTATION_PROJECT_ID:儲存使用本機金鑰建立的驗證的專案 IDPUBLIC_KEY_ID:可專屬識別本機金鑰的 ID
建立平台政策:
使用下方的任何指令資料之前,請先替換以下項目:
- POLICY_ID:您選擇的平台政策 ID。如果政策位於其他專案中,可以使用完整資源名稱:
projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID。 - POLICY_PATH:政策檔案的路徑。
- POLICY_PROJECT_ID:政策專案 ID。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=POLICY_PATH \ --project=POLICY_PROJECT_ID
Windows (PowerShell)
gcloud beta container binauthz policy create POLICY_ID ` --platform=gke ` --policy-file=POLICY_PATH ` --project=POLICY_PROJECT_ID
Windows (cmd.exe)
gcloud beta container binauthz policy create POLICY_ID ^ --platform=gke ^ --policy-file=POLICY_PATH ^ --project=POLICY_PROJECT_ID
- POLICY_ID:您選擇的平台政策 ID。如果政策位於其他專案中,可以使用完整資源名稱:
儲存 ID 值以供日後使用:
PUBLIC_KEY_ID="PUBLIC_KEY_ID"將
PUBLIC_KEY_ID替換為您在本指南稍早的平台政策檔案中,於keyId欄位指定的 ID。如本指南稍後所述,建立認證時會使用私密金鑰。
CLUSTER_NAME:叢集名稱。LOCATION:位置,例如us-central1或asia-south1。POLICY_PROJECT_ID:儲存政策的專案 ID。POLICY_ID:政策 ID。CLUSTER_PROJECT_ID:叢集專案 ID。CLUSTER_NAME:叢集名稱。LOCATION:位置,例如us-central1或asia-south1。POLICY_PROJECT_ID:儲存政策的專案 ID。POLICY_ID:政策 ID。CLUSTER_PROJECT_ID:叢集專案 ID。CLUSTER_NAME:叢集名稱LOCATION:位置,例如us-central1或asia-south1POLICY_PROJECT_ID:儲存政策的專案 IDPOLICY_ID:政策 IDCLUSTER_PROJECT_ID:叢集專案 IDCLUSTER_NAME:叢集名稱LOCATION:位置,例如us-central1或asia-south1POLICY_PROJECT_ID:儲存政策的專案 IDPOLICY_ID:政策 IDCLUSTER_PROJECT_ID:叢集專案 ID建立附註變數:
NOTE_PROJECT_ID=NOTE_PROJECT_ID NOTE_ID="test-note" NOTE_URI="projects/${NOTE_PROJECT_ID}/notes/${NOTE_ID}" DESCRIPTION="CV test note"將
NOTE_PROJECT_ID替換為包含附註的專案 ID。建立記事內容檔案:
cat > /tmp/note_payload.json << EOM { "name": "${NOTE_URI}", "attestation": { "hint": { "human_readable_name": "${DESCRIPTION}" } } } EOM建立記事:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: ${NOTE_PROJECT_ID}" \ --data-binary @/tmp/note_payload.json "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/notes/?noteId=${NOTE_ID}"將
NOTE_PROJECT_ID替換為包含附註的專案 ID選用:如要確認是否已建立記事,請執行下列步驟:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: NOTE_PROJECT_ID" \ "https://containeranalysis.googleapis.com/v1/projects/NOTE_PROJECT_ID/notes/"將
NOTE_PROJECT_ID替換為包含附註的專案 ID。使用預先驗證編碼 (PAE) 簽署圖片並建立認證 (建議):
gcloud beta container binauthz attestations sign-and-create \ --artifact-url=${IMAGE_TO_ATTEST} \ --keyversion=${KMS_KEY_VERSION} \ --keyversion-key=${KMS_KEY_NAME} \ --keyversion-keyring=${KMS_KEYRING_NAME} \ --keyversion-location=${KMS_KEY_LOCATION} \ --note=${NOTE_URI} \ --pae-encode-payload \ --dsse-type=DSSE_TYPE將
DSSE_TYPE替換為 PAE 編碼的 DSSE 型別。 這項旗標預設為application/vnd.dev.cosign.simplesigning.v1+json。建立簽章酬載檔案:
cat > /tmp/generated_payload.json << EOM { "critical": { "identity": { "docker-reference": "${IMAGE_PATH}" }, "image": { "docker-manifest-digest": "${IMAGE_DIGEST}" }, "type": "Google Cloud BinAuthz container signature" } } EOM簽署酬載:
gcloud kms asymmetric-sign \ --version=${KMS_KEY_VERSION} \ --key=${KMS_KEY_NAME} \ --keyring=${KMS_KEYRING_NAME} \ --location=${KMS_KEY_LOCATION} \ --digest-algorithm=sha256 \ --input-file=/tmp/generated_payload.json \ --signature-file=/tmp/ec_signature \ --project=${KMS_KEY_PROJECT_ID}建立認證內容:
cat > /tmp/attestation.json << EOM { "resourceUri": "${IMAGE_TO_ATTEST}", "note_name": "${NOTE_URI}", "attestation": { "serialized_payload": "$(base64 --wrap=0 /tmp/generated_payload.json)", "signatures": [{ "public_key_id": "${PUBLIC_KEY_ID}", "signature": "$(base64 --wrap=0 /tmp/ec_signature)" }] } } EOM建立認證:
curl -X POST "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/occurrences/" \ -H "Content-Type: application/json" \ -H "X-Goog-User-Project: ${NOTE_PROJECT_ID}" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ --data-binary @/tmp/attestation.json將
NOTE_PROJECT_ID替換為包含附註的專案 ID。建立簽章酬載檔案:
cat > /tmp/generated_payload.json << EOM { "critical": { "identity": { "docker-reference": "${IMAGE_PATH}" }, "image": { "docker-manifest-digest": "${IMAGE_DIGEST}" }, "type": "Google Cloud BinAuthz container signature" } } EOM建立簽章酬載檔案:
openssl dgst -sha256 -sign ${PRIVATE_KEY_FILE} /tmp/generated_payload.json > /tmp/ec_signature建立認證:
gcloud container binauthz attestations create \ --project=ATTESTATION_PROJECT_ID \ --artifact-url=${IMAGE_TO_ATTEST} \ --note=${NOTE_URI} \ --signature-file=/tmp/ec_signature \ --public-key-id=PUBLIC_KEY_ID建立簽章酬載檔案:
cat > /tmp/generated_payload.json << EOM { "critical": { "identity": { "docker-reference": "${IMAGE_PATH}" }, "image": { "docker-manifest-digest": "${IMAGE_DIGEST}" }, "type": "Google Cloud BinAuthz container signature" } } EOM建立簽章酬載檔案:
openssl dgst -sha256 -sign ${PRIVATE_KEY_FILE} /tmp/generated_payload.json > /tmp/ec_signature建立認證內容:
cat > /tmp/attestation.json << EOM { "resourceUri": "${IMAGE_TO_ATTEST}", "note_name": "${NOTE_URI}", "attestation": { "serialized_payload": "$(base64 --wrap=0 /tmp/generated_payload.json)", "signatures": [{ "public_key_id": "${PUBLIC_KEY_ID}", "signature": "$(base64 --wrap=0 /tmp/ec_signature)" }] } } EOM建立認證:
curl -X POST "https://containeranalysis.googleapis.com/v1/projects/${NOTE_PROJECT_ID}/occurrences/" \ -H "Content-Type: application/json" \ -H "X-Goog-User-Project: ${NOTE_PROJECT_ID}" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ --data-binary @/tmp/attestation.json設定「
kubectl」:gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID更改下列內容:
CLUSTER_NAME:叢集名稱LOCATION:叢集位置CLUSTER_PROJECT_ID:叢集專案 ID
部署服務,並根據二進位授權政策檢查部署作業:
kubectl run hello-app-with-attestation --image=$IMAGE_PATH@$IMAGE_DIGESTPod 已部署完畢,由於映像檔具有認證,CV 不會產生與這個 Pod 相關的記錄項目。
ImageFreshnessCheckSigstoreSignatureCheckSimpleSigningAttestationCheckSlsaCheckTrustedDirectoryCheckVulnerabilityCheckCLUSTER_NAME:叢集名稱LOCATION:叢集位置CLUSTER_PROJECT_ID:叢集專案 IDCLUSTER_NAME:叢集名稱LOCATION:叢集位置CLUSTER_PROJECT_ID:叢集專案 IDPOLICY_ID:政策 IDPOLICY_PROJECT_ID:政策專案 ID
必要的角色
本節說明如何為這項檢查設定角色。
總覽
如果您在同一個專案中執行本指南提及的所有產品,則不需要設定任何權限。啟用 Binary Authorization 時,系統會正確設定角色。如果您在不同專案中執行產品,請務必按照本節所述設定角色。
為確保每個專案中的 Binary Authorization 服務代理程式具備評估 CV 簡單簽署認證檢查的必要權限,請要求管理員在每個專案中授予 Binary Authorization 服務代理程式下列 IAM 角色:
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
管理員或許也能透過自訂角色或其他預先定義的角色,授予每個專案的 Binary Authorization 服務代理人必要權限。
使用 gcloud CLI 授予角色
為確保每個專案中的二進位授權服務代理程式具有評估 CV 簡單簽署認證檢查的必要權限,請將下列 IAM 角色授予每個專案中的二進位授權服務代理程式:
建立金鑰組
在本節中,您將建立橢圓曲線數位簽章演算法 (ECDSA) 非對稱金鑰組。
您可以使用私密金鑰簽署映像檔,建立認證。您可以在平台政策中加入公開金鑰。CV 檢查認證時,會使用公開金鑰驗證認證。
您可以使用 Cloud Key Management Service 或本機金鑰,但建議在實際工作環境中使用 Cloud KMS 金鑰。
PKIX Cloud KMS
如要在 Cloud KMS 中建立金鑰組,請按照下列步驟操作:
本機金鑰
如要在本機建立金鑰組,請執行下列步驟:
建立平台政策
如要建立 CV 平台政策並進行簡單的簽署認證檢查,請按照下列步驟操作:
啟用 CV
您可以建立新叢集,或更新現有叢集,以使用 CV 監控功能和以檢查為準的平台政策。
建立使用 CV 監控的叢集
在本節中,您將建立叢集,只使用 CV 監控功能和以檢查為準的平台政策。
使用下方的任何指令資料之前,請先替換以下項目:
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud beta container clusters create CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters create CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters create CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
建立使用強制執行和 CV 監控的叢集
在本節中,您將建立叢集,同時使用專案單例政策強制執行和 CV 監控,以及以檢查為基礎的平台政策:
使用下方的任何指令資料之前,請先替換以下項目:
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud beta container clusters create CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters create CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters create CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
更新叢集以使用 CV 監控功能
在本節中,您將更新叢集,只使用以檢查為準的平台政策,監控 CV。如果叢集已啟用專案單例政策強制執行,執行這項指令會停用該政策。建議您更新叢集,並啟用強制執行和 CV 監控功能。
使用下方的任何指令資料之前,請先替換以下項目:
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters update CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters update CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
更新叢集以使用強制執行和 CV 監控功能
在本節中,您將更新叢集,同時使用專案單例政策強制執行和 CV 監控,以及以檢查為基礎的平台政策。
使用下方的任何指令資料之前,請先替換以下項目:
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters update CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters update CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
建立構件分析附註
在本節中,您將建立範例「構件分析」附註,以連結認證。如要建立附註,請按照下列步驟操作:
測試 CV
在本節中,您將部署已建立認證的映像檔,藉此測試 CV。在本例中,CV 簡單簽署認證檢查會驗證認證,且不會產生任何記錄項目。
然後嘗試部署沒有認證的其他映像檔。在本例中,CV 檢查找不到認證,並將違規事項記錄到 Cloud Logging。
如要建立用於測試 CV 的變數,請執行下列指令:
IMAGE_PATH="us-docker.pkg.dev/google-samples/containers/gke/hello-app"
IMAGE_DIGEST="sha256:37e5287945774f27b418ce567cd77f4bbc9ef44a1bcd1a2312369f31f9cce567"
IMAGE_TO_ATTEST="${IMAGE_PATH}@${IMAGE_DIGEST}"
建立認證
如要通過簡單簽署認證檢查,圖片必須有有效的認證。
您可以使用 gcloud CLI 或 REST API 建立認證。
PKIX Cloud KMS
gcloud
如要使用 gcloud CLI 建立認證,請執行下列操作:
REST API
如要使用 REST API 建立認證,請按照下列步驟操作:
本機金鑰
gcloud
REST API
部署經過認證的映像檔
如要部署已建立認證的映像檔,請按照下列步驟操作:
部署未經認證的映像檔
在本節中,您會部署沒有相關聯認證的映像檔。
由於政策規定需要認證,而這個映像檔沒有,因此 CV 會在容器執行時定期記錄違規事項。
如要部署映像檔,請執行下列指令:
kubectl run hello-app-without-attestation \
--image=$IMAGE_PATH@$IMAGE_DIGEST
Pod 已部署完畢,由於映像檔沒有認證,CV 會在 Pod 執行時產生記錄項目。
查看履歷表項目的記錄
您可以搜尋 Cloud Logging 項目,找出 CV 設定錯誤和 CV 平台政策驗證違規事項。
CV 會在 24 小時內將錯誤和違規事項記錄至 Cloud Logging。通常幾小時內就會看到記錄。
查看 CV 設定錯誤記錄
如要查看 CV 設定錯誤記錄,請執行下列指令:
gcloud logging read \
--order="desc" \
--freshness=7d \
--project=CLUSTER_PROJECT_ID \
'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "configErrorEvent"'
以下輸出內容顯示設定錯誤,其中找不到 CV 平台政策:
{
"insertId": "141d4f10-72ea-4a43-b3ec-a03da623de42",
"jsonPayload": {
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent",
"configErrorEvent": {
"description": "Cannot monitor cluster 'us-central1-c.my-cluster': Resource projects/123456789/platforms/gke/policies/my-policy does not exist."
}
},
"resource": {
"type": "k8s_cluster",
"labels": {
"cluster_name": "my-cluster",
"location": "us-central1-c",
"project_id": "my-project"
}
},
"timestamp": "2024-05-28T15:31:03.999566Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2024-05-28T16:30:56.304108670Z"
}
查看 CV 平台政策驗證違規事項
如果沒有任何圖片違反您啟用的平台政策,記錄檔中就不會顯示任何項目。
如要查看過去 7 天的 CV 記錄項目,請執行下列指令:
gcloud logging read \
--order="desc" \
--freshness=7d \
--project=CLUSTER_PROJECT_ID \
'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"'
將 CLUSTER_PROJECT_ID 替換為叢集專案 ID。
支票類型
CV 記錄會檢查違規資訊,並將資訊傳送至 checkResults。在項目中,值 checkType 表示檢查。各項檢查的值如下:
記錄範例
以下 CV 記錄項目範例說明違反信任目錄檢查的不符規定圖片:
{
"insertId": "637c2de7-0000-2b64-b671-24058876bb74",
"jsonPayload": {
"podEvent": {
"endTime": "2022-11-22T01:14:30.430151Z",
"policyName": "projects/123456789/platforms/gke/policies/my-policy",
"images": [
{
"result": "DENY",
"checkResults": [
{
"explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
"checkSetName": "My check set",
"checkSetIndex": "0",
"checkName": "My trusted directory check",
"verdict": "NON_CONFORMANT",
"checkType": "TrustedDirectoryCheck",
"checkIndex": "0"
}
],
"image": "gcr.io/my-project/hello-app:latest"
}
],
"verdict": "VIOLATES_POLICY",
"podNamespace": "default",
"deployTime": "2022-11-22T01:06:53Z",
"pod": "hello-app"
},
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
},
"resource": {
"type": "k8s_cluster",
"labels": {
"project_id": "my-project",
"location": "us-central1-a",
"cluster_name": "my-test-cluster"
}
},
"timestamp": "2022-11-22T01:44:28.729881832Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}
清除所用資源
本節說明如何清除您在本指南稍早設定的 CV 監控。
您可以在叢集中停用 CV 監控,或同時停用二進位授權和 CV。
在叢集中停用二進位授權
如要在叢集中停用 CV 和二進位授權強制執行功能,請執行下列指令:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=DISABLED \
--location=LOCATION \
--project=CLUSTER_PROJECT_ID
更改下列內容:
在叢集中停用以檢查為準的政策監控功能
如要在叢集中停用以檢查為準的政策,並使用 Binary Authorization 強制執行政策重新啟用強制執行功能,請執行下列指令:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--location=LOCATION \
--project="CLUSTER_PROJECT_ID"
更改下列內容:
請注意,--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE 相當於舊版旗標 --enable-binauthz。
刪除政策
如要刪除政策,請執行下列指令。如要停用以檢查為準的政策稽核功能,不必刪除以檢查為準的平台政策。
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
更改下列內容: