本頁面說明如何使用二進位授權持續驗證 (CV) SLSA 檢查,檢查與 Pod 相關聯的容器映像檔是否符合 SLSA 規範。Pod 必須在已啟用 CV 的 GKE 叢集上執行。
如要使用這項檢查,您必須使用 Cloud Build 建構映像檔,這會產生符合 SLSA 規範的來源。
本指南中的範例使用 Cloud Source Repositories 做為原始碼存放區、Artifact Registry 做為映像檔存放區,並使用 Cloud Build 建構映像檔及產生來源。
SLSA 檢查僅支援 Cloud Build 做為可信任的建構工具。
費用
本指南使用下列 Google Cloud 服務:
- Artifact Registry
- 二進位授權,但持續驗證在預先發布版階段可無須支付費用使用
- Cloud Build
- Cloud Source Repositories
- GKE
您可以使用 Pricing Calculator 根據預測用量估算費用。
事前準備
-
安裝 Google Cloud CLI。
-
設定 gcloud CLI,使用您的聯合身分。
詳情請參閱「使用聯合身分登入 gcloud CLI」。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
選取或建立專案所需的角色
- 選取專案:選取專案時,不需具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
-
建立專案:如要建立專案,您必須具備專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
-
建立 Google Cloud 專案:
gcloud projects create PROJECT_ID
將
PROJECT_ID替換為您要建立的 Google Cloud 專案名稱。 -
選取您建立的 Google Cloud 專案:
gcloud config set project PROJECT_ID
將
PROJECT_ID替換為 Google Cloud 專案名稱。
啟用 Artifact Registry、二進位授權、Cloud Build、GKE、Cloud Source Repositories API (如有尚未啟用的 API):
啟用 API 所需的角色
如要啟用 API,您必須具備
serviceusage.services.enable權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「Service Usage 管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com sourcerepo.googleapis.com - 確認 gcloud CLI 已更新至最新版本。
- 安裝
kubectl指令列工具。 - 如果二進位授權政策和 GKE 叢集位於不同專案,請確認這兩項專案都已啟用二進位授權。
必要的角色
本節說明如何為這項檢查設定角色。
總覽
如果您在同一個專案中執行本指南提及的所有產品,則不需設定任何權限。啟用二進位授權時,系統會正確設定角色。如果您在不同專案中執行產品,則必須按照本節所述設定角色。
為確保各專案中的二進位授權服務代理程式具備評估 CV SLSA 檢查所需的權限,請要求管理員將下列 IAM 角色授予各專案中的二進位授權服務代理程式:
- 叢集專案 Compute Engine 服務帳戶的 Artifact Registry 讀取者 (
roles/artifactregistry.reader) -
如果叢集專案與政策專案不同:
叢集專案二進位授權服務代理上的二進位授權政策評估者 (
roles/binaryauthorization.policyEvaluator),以便存取政策專案 -
如果認證專案與政策專案不同:
政策專案二進位授權服務代理的容器分析例項檢視者 (
roles/containeranalysis.occurrences.viewer),以便存取認證專案
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
管理員或許也能透過自訂角色或其他預先定義的角色,為各專案中的二進位授權服務代理授予必要權限。
使用 gcloud CLI 授予角色
為確保各專案中的服務帳戶具備評估這項檢查所需的權限,請將下列 IAM 角色授予各專案中的服務帳戶:
如果執行叢集的專案與政策所在的專案不同,您必須授予叢集專案的二進位授權服務代理權限,才能存取政策專案中的政策。
取得叢集專案的二進位授權服務代理:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:CLUSTER_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") CLUSTER_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization."將
CLUSTER_PROJECT_ID替換為叢集的專案 ID。允許持續驗證評估叢集上的政策:
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)") POLICY_PROJECT_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization."將
POLICY_PROJECT_ID替換為政策所在專案的 ID。授予角色:
gcloud projects add-iam-policy-binding ATTESTATION_PROJECT_ID \ --member="serviceAccount:$POLICY_PROJECT_SERVICE_ACCOUNT" \ --role='roles/containeranalysis.occurrences.viewer'將
ATTESTATION_PROJECT_ID替換為含有認證的專案 ID。
允許預設 Compute Engine 服務帳戶從存放區提取映像檔:
取得與叢集專案相關聯的 Compute Engine 服務帳戶:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:CLUSTER_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") COMPUTE_ENGINE_SERVICE_ACCOUNT="$PROJECT_NUMBER-compute@"將
CLUSTER_PROJECT_ID替換為含有政策的叢集專案 ID。授予角色:
gcloud projects add-iam-policy-binding ARTIFACT_PROJECT_ID \ --member="serviceAccount:$COMPUTE_ENGINE_SERVICE_ACCOUNT" \ --role='roles/artifactregistry.reader'將
ARTIFACT_PROJECT_ID替換為 Artifact Registry 專案 ID,該專案會儲存要部署的映像檔。
選用:建構及上傳範例映像檔
本節僅供說明,示範如何建構符合 SLSA 規範來源的範例映像檔。本指南稍後會使用來源來示範檢查。瞭解 Cloud Build 建構作業來源資訊 詳情。
建立範例存放區
如要在 Cloud Source Repositories 建立存放區,請按照下列步驟操作:
建立存放區,並在本機複製:
gcloud source repos create SOURCE_REPO_NAME \ --project=SOURCE_REPO_PROJECT_ID && \ gcloud source repos clone SOURCE_REPO_NAME \ --project=SOURCE_REPO_PROJECT_ID && \ cd SOURCE_REPO_NAME更改下列內容:
SOURCE_REPO_NAME:原始碼存放區的名稱,例如:slsa-check-test-repoSOURCE_REPO_PROJECT_ID:存放區專案 ID
如要建立來源、設定和建構檔案,請按照下列步驟操作:
建立圖片來源:
cat > quickstart.sh <<EOF #!/bin/sh echo "Hello, world! The time is $(date)." sleep infinity EOF將檔案設為執行檔:
chmod +x quickstart.sh建立 Dockerfile 設定檔:
cat > Dockerfile <<EOF FROM alpine COPY quickstart.sh / CMD ["/quickstart.sh"] EOF建立 Cloud Build
cloudbuild.yaml檔案,將映像檔推送至 Artifact Registry:cat > cloudbuild.yaml <<EOF steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', 'LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE', '.' ] options: requestedVerifyOption: VERIFIED images: - 'LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE' EOF更改下列內容:
LOCATION:Artifact Registry 位置,例如us-west2、europe-central2或asia-east1ARTIFACT_PROJECT_ID:儲存 Artifact Registry 構件的專案 IDARTIFACT_REPO_NAME:Artifact Registry 存放區名稱,例如:slsa-check-test-repoDIRECTORY:目錄,例如:slsa-checkIMAGE:圖片路徑,例如:slsa-check-image
將檔案提交至 Cloud Source Repositories:
git add . git commit -a
建構並上傳範例映像檔
為簡化本指南的使用方式,建議您在 SOURCE_REPO_PROJECT_ID 和 ARTIFACT_PROJECT_ID 使用相同的專案。如果使用不同專案,可能需要設定額外的 IAM 權限。進一步瞭解 Artifact Registry 存取控管。如要進一步瞭解 Cloud Build,請參閱「Cloud Build 總覽」。
如要建立存放區,請按照下列步驟操作:
建立 Artifact Registry 存放區:
gcloud artifacts repositories create ARTIFACT_REPO_NAME \ --project=ARTIFACT_PROJECT_ID \ --repository-format=docker \ --location=LOCATION \ --description="Docker repository"更改下列內容:
ARTIFACT_REPO_NAME:存放區名稱ARTIFACT_PROJECT_ID:構件專案 IDLOCATION:Artifact Registry 位置,例如us-west2、europe-central2或asia-east1
建立 Cloud Build 自動建構觸發條件:
gcloud beta builds triggers create cloud-source-repositories \ --project=SOURCE_REPO_PROJECT_ID \ --repo=SOURCE_REPO_NAME \ --region=LOCATION \ --branch-pattern=.* \ --build-config=cloudbuild.yaml更改下列內容:
SOURCE_REPO_NAME:原始碼存放區名稱SOURCE_REPO_PROJECT_ID:Cloud Build 專案 IDLOCATION:位置
推送您在本指南稍早建立的檔案,觸發建構作業。
git push映像檔建構成功後,Cloud Build 會產生來源,並將映像檔上傳至 Artifact Registry 存放區。
如要檢查最新映像檔並取得摘要,請按照下列步驟操作:
確認 Cloud Build 已建構映像檔:
gcloud artifacts docker images list LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/REPO_NAME/DIRECTORY \ --project=ARTIFACT_PROJECT_ID \ --sort-by=create_time更改下列內容:
LOCATION:Artifact Registry 位置ARTIFACT_PROJECT_ID:構件的專案 IDARTIFACT_REPO_NAME:存放區名稱DIRECTORY:目錄
複製最新映像檔的摘要。摘要類似如下:
sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59
選用:查看圖片來源:
gcloud artifacts docker images describe \ LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE@DIGEST \ --project=ARTIFACT_PROJECT_ID \ --show-provenance更改下列內容:
ARTIFACT_PROJECT_ID:構件的專案 IDLOCATION:Artifact Registry 位置ARTIFACT_REPO_NAME:構件存放區名稱DIRECTORY:目錄IMAGE:圖片路徑DIGEST:與映像檔相關聯的摘要
指令輸出內容大致如下:
image_summary: digest: sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59 fully_qualified_digest: us-west2-docker.pkg.dev/my-project/slsa-check-repo/slsa-check-image@sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59 registry: us-west2-docker.pkg.dev repository: slsa-check-repo slsa_build_level: 3 provenance_summary: provenance: - build: intotoStatement: _type: https://in-toto.io/Statement/v0.1 predicateType: https://slsa.dev/provenance/v0.1 slsaProvenance: builder: id: https://cloudbuild.googleapis.com/GoogleHostedWorker materials: - digest: sha1: de4e4227fff1d00d6f7785a827608627e4a369ea uri: git+https://source.cloud.google.com/my-project/slsa-check-source-repo metadata: ... envelope: payload: eyJfdHlwZSI6I ... taW1hZ2U6dGFnMSJ9XX0= payloadType: application/vnd.in-toto+json signatures: - keyid: projects/verified-builder/locations/global/keyRings/attestor/cryptoKeys/provenanceSigner/cryptoKeyVersions/1 sig: MEQCIBCCkho_re4EfAT-NBSSmAXOZlv4lU_vWzEru97tU8KmAiAKcAa99umWngzNQADmPixqYjbKjLOKQEUvrI5chSrf7g== - keyid: projects/verified-builder/locations/global/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1 sig: MEUCIFOEq_7RpiZAB4vUlit3hkZ2yI0n37-5Y87l0JbU-EZSAiEA9TNZZcv_MnzKffTnswHWZR2DSLmYiklr5twWfIec-zo=輸出內容必須包含
provenance_summary區塊,SLSA 檢查才能運作。如果輸出內容不含該區塊,請確認 Cloud Build 是由自動建構觸發條件叫用。手動觸發 Cloud Build 時,不會產生來源資訊。
建立平台政策
如要產生來源,您必須使用 Cloud Build 自動建構觸發條件建構映像檔,如「建構及上傳範例映像檔」一節所述。
如要建立含有 SLSA 檢查的平台政策,請按照下列步驟操作:
建立平台政策 YAML 檔案:
cat > POLICY_PATH <<EOF gkePolicy: checkSets: - checks: - displayName: My SLSA check imageAllowlist: # This policy exempts images that are in the following artifact registry allowPattern: - ARTIFACT_LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/EXEMPT_IMAGE_PATH/** slsaCheck: rules: - attestationSource: containerAnalysisAttestationProjects: - projects/ATTESTATION_PROJECT_ID configBasedBuildRequired: true trustedBuilder: GOOGLE_CLOUD_BUILD trustedSourceRepoPatterns: - source.cloud.google.com/SOURCE_REPO_PROJECT_ID/SOURCE_REPO_NAME customConstraints: CEL_EXPRESSION displayName: My check set EOF更改下列內容:
POLICY_PATH:政策檔案的路徑。ARTIFACT_LOCATION:Artifact Registry 存放區的位置。ARTIFACT_PROJECT_ID:包含構件的專案 ID。ARTIFACT_REPO_NAME:包含映像檔的存放區。EXEMPT_IMAGE_PATH:一或多個豁免映像檔的選用路徑,例如:not-built-by-cloud-build。這項平台政策包含imageAllowlist區塊,因此您可以豁免缺少來源的映像檔,以免違反平台政策。如要改為記錄這些映像檔的違規事項,請省略這個區塊。ATTESTATION_PROJECT_ID:儲存 Cloud Build 所建立認證的專案 ID。SOURCE_REPO_PROJECT_ID:存放原始碼 的專案 ID。SOURCE_REPO_NAME::包含 映像檔的存放區。為方便說明,如要強制違反這項檢查,請將SOURCE_REPO_NAME設為映像檔所在位置以外的原始碼存放區。POLICY_PROJECT_ID:CV 政策所在專案的 ID。POLICY_ID:這項政策的 ID。CEL_EXPRESSION:CEL 運算式,可為 SLSA 政策提供額外限制。舉例來說,如要新增自訂限制,進一步要求圖片必須來自特定目錄路徑,請將CEL_EXPRESSION替換為下列運算式:payload.predicate.externalParameters.buildConfigSource.path != "" && payload.predicate.externalParameters.buildConfigSource.repository.contains("github.com/my-repo/my-production-repo")
建立平台政策:
使用下列任何指令資料前,請先替換以下項目:
- 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。如果政策位於其他專案,您可以使用完整資源名稱:
啟用 CV
您可以建立新叢集,或更新現有叢集,以便搭配使用 CV 監控功能和檢查型平台政策。
建立使用 CV 監控功能的叢集
在本節中,您將建立僅使用 CV 監控功能和檢查型平台政策的叢集。
使用下列任何指令資料前,請先替換以下項目:
CLUSTER_NAME:叢集名稱。LOCATION:位置,例如us-central1或asia-south1。POLICY_PROJECT_ID:儲存政策的專案 ID。POLICY_ID:政策 ID。CLUSTER_PROJECT_ID:叢集專案 ID。
執行下列指令:
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 監控功能的叢集
在本節中,您將建立一個叢集,同時使用 project-singleton 政策強制執行和 CV 監控功能,並採用以檢查為基礎的平台政策:
使用下列任何指令資料前,請先替換以下項目:
CLUSTER_NAME:叢集名稱。LOCATION:位置,例如us-central1或asia-south1。POLICY_PROJECT_ID:儲存政策的專案 ID。POLICY_ID:政策 ID。CLUSTER_PROJECT_ID:叢集專案 ID。
執行下列指令:
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 監控功能。
使用下列任何指令資料前,請先替換以下項目:
CLUSTER_NAME:叢集名稱LOCATION:位置,例如us-central1或asia-south1POLICY_PROJECT_ID:儲存政策的專案 IDPOLICY_ID:政策 IDCLUSTER_PROJECT_ID:叢集專案 ID
執行下列指令:
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 監控功能。
使用下列任何指令資料前,請先替換以下項目:
CLUSTER_NAME:叢集名稱LOCATION:位置,例如us-central1或asia-south1POLICY_PROJECT_ID:儲存政策的專案 IDPOLICY_ID:政策 IDCLUSTER_PROJECT_ID:叢集專案 ID
執行下列指令:
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
部署映像檔
設定
kubectl:gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID更改下列內容:
CLUSTER_NAME:叢集名稱LOCATION:叢集位置CLUSTER_PROJECT_ID:叢集專案 ID
部署 Pod:
kubectl run hello-app \ --image='LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE@DIGEST'Pod 已部署。由於映像檔是透過來源建構,且來自受信任的原始碼存放區,因此不會違反 CV SLSA 檢查,也不會產生記錄項目。
如要強制違反 SLSA 檢查,您可以將
SOURCE_REPO_NAME設為映像檔所在位置以外的原始碼存放區。您也可以手動觸發建構作業,略過來源產生程序。然後查看記錄項目。
查看 CV 項目的記錄
您可以搜尋 Cloud Logging 記錄項目,找出持續驗證設定錯誤和持續驗證平台政策驗證違規事項。
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 平台政策驗證違規事項
如果沒有任何圖片違反您啟用的平台政策,記錄中就不會顯示任何項目。
如要查看過去七天的 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 值代表檢查。各項檢查的值如下:
ImageFreshnessCheckSigstoreSignatureCheckSimpleSigningAttestationCheckSlsaCheckTrustedDirectoryCheckVulnerabilityCheck
記錄範例
下列 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
更改下列內容:
CLUSTER_NAME:叢集名稱LOCATION:叢集位置CLUSTER_PROJECT_ID:叢集專案 ID
停用叢集中的檢查式政策監控功能
如要停用叢集中採用檢查政策的持續驗證,並使用二進位授權違規處置政策重新啟用強制執行功能,請執行下列指令:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--location=LOCATION \
--project="CLUSTER_PROJECT_ID"
更改下列內容:
CLUSTER_NAME:叢集名稱LOCATION:叢集位置CLUSTER_PROJECT_ID:叢集專案 ID
請注意,--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE 相當於舊版旗標 --enable-binauthz。
刪除政策
執行下列指令,刪除政策。您不必刪除檢查型平台政策,即可停用檢查型政策稽核。
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
更改下列內容:
POLICY_ID:政策 IDPOLICY_PROJECT_ID:政策專案 ID