本頁面說明如何使用二進位授權持續驗證 (CV) 映像檔新鮮度檢查,檢查與在已啟用 CV 的 Google Kubernetes Engine (GKE) 叢集上執行的 Pod 相關聯的映像檔新鮮度。為此,CV 會檢查映像檔上傳至映像檔登錄檔的時間。
這項檢查僅支援 Artifact Registry 和 Container Registry 存放區。
費用
本指南使用下列 Google Cloud 服務:
- 二進位授權,但 CV 在預先發布版階段免費提供
- Google Kubernetes Engine
如要根據預測用量估算費用,請使用 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.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with 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_ID
with your Google Cloud project name.
-
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization, Google Kubernetes Engine APIs:
gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com -
Install the Google Cloud CLI.
-
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
如要初始化 gcloud CLI,請執行下列指令:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with 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_ID
with your Google Cloud project name.
-
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization, Google Kubernetes Engine APIs:
gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com - 確認 gcloud CLI 已更新至最新版本。
- 安裝
kubectl
指令列工具。 - 如果二進位授權政策和 GKE 叢集位於不同專案,請務必在這兩個專案中啟用二進位授權。
-
如果叢集專案與政策專案不同:
叢集專案的二進位授權服務代理人需要二進位授權政策評估者 (
roles/binaryauthorization.policyEvaluator
) 角色,才能存取政策專案。 -
如果 Artifact Registry 專案 (儲存映像檔的專案) 與政策專案不同:
政策專案的 Binary Authorization 服務代理程式需要Artifact Registry 讀取者 (
roles/artifactregistry.reader
) 角色,才能存取認證專案 -
如果 Artifact Registry 專案與叢集專案不同:
在叢集專案的 Binary Authorization 服務代理程式上,新增 Artifact Registry 讀取者 (
roles/artifactregistry.reader
),以便存取 Artifact Registry 專案中的映像檔中繼資料。 POLICY_PROJECT_ID
:包含政策的專案 ID。CLUSTER_PROJECT_ID
:叢集的專案 ID。ARTIFACT_PROJECT_ID
:包含 Artifact Registry 存放區的專案 ID。CLUSTER_PROJECT_ID
:執行 GKE 叢集的專案 ID。建立平台政策 YAML 檔案:
cat << EOF > /tmp/my-policy.yaml gkePolicy: checkSets: - checks: - imageFreshnessCheck: maxUploadAgeDays: MAX_UPLOAD_AGE_DAYS displayName: CHECK_DISPLAY_NAME displayName: CHECK_SET_DISPLAY_NAME EOF
更改下列內容:
MAX_UPLOAD_AGE_DAYS
:自映像檔上傳至登錄檔後經過的時間上限,以天為單位。CHECK_SET_DISPLAY_NAME
:檢查集的可選顯示名稱CHECK_DISPLAY_NAME
:檢查的選用顯示名稱
建立平台政策:
使用下列任何指令資料之前,請先替換以下項目:
- 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。如果政策位於其他專案中,可以使用完整資源名稱:
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-south1
POLICY_PROJECT_ID
:儲存政策的專案 IDPOLICY_ID
:政策 IDCLUSTER_PROJECT_ID
:叢集專案 IDCLUSTER_NAME
:叢集名稱LOCATION
:位置,例如:us-central1
或asia-south1
POLICY_PROJECT_ID
:儲存政策的專案 IDPOLICY_ID
:政策 IDCLUSTER_PROJECT_ID
:叢集專案 IDImageFreshnessCheck
SigstoreSignatureCheck
SimpleSigningAttestationCheck
SlsaCheck
TrustedDirectoryCheck
VulnerabilityCheck
CLUSTER_NAME
:叢集名稱LOCATION
:叢集位置CLUSTER_PROJECT_ID
:叢集專案 IDCLUSTER_NAME
:叢集名稱LOCATION
:叢集位置CLUSTER_PROJECT_ID
:叢集專案 IDPOLICY_ID
:政策 IDPOLICY_PROJECT_ID
:政策專案 ID
必要的角色
本節說明如何為這項檢查設定角色。
總覽
如果您在同一個專案中執行本指南提及的所有產品,則不需要設定任何權限。啟用 Binary Authorization 時,系統會正確設定角色。如果您在不同專案中執行產品,則必須按照本節所述設定角色。
為確保政策專案的 Binary Authorization 服務代理程式具備評估 CV 映像檔新鮮度檢查的必要權限, 請管理員將下列 IAM 角色授予政策專案的 Binary Authorization 服務代理程式:
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
管理員或許還可透過自訂角色或其他預先定義的角色,將必要權限授予政策專案的 Binary Authorization 服務代理程式。
使用 gcloud CLI 授予角色
為確保每個專案中的 Binary Authorization 服務代理程式都具備評估這項檢查的必要權限,請在每個專案中將下列 IAM 角色授予 Binary Authorization 服務代理程式。
叢集專案與政策專案不同
在政策專案中,將「二進位授權政策評估者」(roles/binaryauthorization.policyEvaluator
) 角色授予叢集專案中的二進位授權服務代理程式。
gcloud projects add-iam-policy-bindingPOLICY_PROJECT_ID
\ --member="serviceAccount:service-$(gcloud projects describeCLUSTER_PROJECT_ID
--format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \ --role=roles/binaryauthorization.policyEvaluator
取代下列項目:
政策專案與構件專案不同
在政策專案中,將構件專案的 Artifact Registry Reader (roles/artifactregistry.reader
) 角色授予 Binary Authorization 服務代理程式。
gcloud projects add-iam-policy-bindingARTIFACT_PROJECT_ID
\ --member="serviceAccount:service-$(gcloud projects describePOLICY_PROJECT_ID
--format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \ --role=roles/artifactregistry.reader
將 ARTIFACT_PROJECT_ID
替換為包含 Artifact Registry 存放區的專案 ID。
叢集專案與構件專案不同
在構件專案中,將 Artifact Registry Reader (roles/artifactregistry.reader
) 角色授予叢集專案的二進位授權服務代理程式。
gcloud projects add-iam-policy-bindingARTIFACT_PROJECT_ID
\ --member="serviceAccount:service-$(gcloud projects describeCLUSTER_PROJECT_ID
--format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \ --role=roles/artifactregistry.reader
取代下列項目:
建立平台政策
如要建立採用圖片新鮮度檢查的 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
查看履歷表項目的記錄
您可以搜尋 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
更改下列內容:
在叢集中停用以檢查為準的政策監控功能
如要在叢集中停用 CV 檢查政策,並使用 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"
更改下列內容: