本頁面說明如何使用政策評估服務 Google Cloud CLI 指令,快速評估圖片或 Kubernetes 資源是否符合以持續驗證檢查為基礎的平台政策。
總覽
政策評估服務是二進位授權的一項功能,可搭配持續驗證 (CV) 檢查式平台政策使用。政策評估服務會依要求評估您指定的容器映像檔是否符合 CV 平台政策。政策評估服務可做為 gcloud CLI 指令和 projects.platforms.gke.policies.evaluate 方法使用。
CV 至少每 24 小時會檢查一次政策違規情形。 因此,啟用 CV 或部署 Kubernetes 資源後,記錄檔最多可能需要 24 小時才會顯示 CV 事件。此外,CV 偵測到違規行為時,也會產生記錄項目。當 Kubernetes 資源符合政策規定時,CV 不會產生記錄檔項目。
政策評估服務會輸出判決結果,指出圖片是否符合政策規定,或是否違反政策。
使用政策評估服務,即可快速判斷圖片是否符合政策規定。
使用這項服務時,您可以直接或在 Kubernetes 資源中指定映像檔網址,並指定以 GKE CV 檢查為準的政策名稱。
這樣一來,政策評估服務就能協助您開發政策,並在您使用 CV 前,偵錯不符合規範的 Kubernetes 資源。
這項功能僅支援以 GKE CV 檢查為基礎的政策。
圖片也必須指定圖片摘要,格式為 IMAGE_URL@IMAGE_DIGEST
,但下列情況除外:
- 信任目錄檢查:如果映像檔位於您指定的目錄中,這項檢查就會通過。
- 豁免圖片許可清單:所有其他檢查都需要採用
IMAGE_URL@IMAGE_DIGEST
格式的圖片摘要。
事前準備
-
Install the Google Cloud CLI.
-
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
如要初始化 gcloud CLI,請執行下列指令:
gcloud init
必要的角色
如要取得使用政策評估服務所需的權限,請要求管理員授予您政策專案的政策評估者 (roles/binaryauthorization.policyEvaluator
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
如果政策使用特定檢查,您可能需要請管理員授予下列檢查專用的必要角色:
評估以檢查為準的平台政策
政策評估服務可以評估單一圖片網址,也可以評估以 JSON 或 YAML 格式指定的 Kubernetes 資源中的圖片。
使用 Kubernetes 資源評估以檢查為準的平台政策
如要使用 gcloud CLI 評估 Kubernetes 資源的政策,請執行下列指令:
使用下列任何指令資料之前,請先替換以下項目:
POLICY_ID
:平台政策的 ID。如果政策位於其他專案中,可以使用完整資源名稱:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
。POD_SPECIFICATION_PATH
:Pod 規格的路徑。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --resource=POD_SPECIFICATION_PATH
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --resource=POD_SPECIFICATION_PATH
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --resource=POD_SPECIFICATION_PATH
如要評估指定平台的政策 (必須設為 gke
),請執行下列指令:
使用下列任何指令資料之前,請先替換以下項目:
POLICY_ID
:平台政策的 ID。如果政策位於其他專案中,可以使用完整資源名稱:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
。POD_SPECIFICATION_PATH
:Pod 規格的路徑。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --platform=gke \ --resource=POD_SPECIFICATION_PATH
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --platform=gke ` --resource=POD_SPECIFICATION_PATH
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --platform=gke ^ --resource=POD_SPECIFICATION_PATH
使用圖片網址評估檢查式平台政策
如要使用圖片網址評估政策,請執行下列指令:
使用下列任何指令資料之前,請先替換以下項目:
POLICY_ID
:平台政策的 ID。如果政策位於其他專案中,可以使用完整資源名稱:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
。IMAGE_URL
:Pod 規格的路徑。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=IMAGE_URL
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=IMAGE_URL
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=IMAGE_URL
使用 --image
旗標時,系統會隱含地假設命名空間和服務帳戶為空白。如果評估的政策使用範圍限定為 kubernetesNamespace
或 kubernetesServiceAccount
的檢查集,傳回的結果可能不準確。
查看指令輸出內容
指令輸出內容包含頂層的判定結果,指出 Pod 的一致性狀態。系統可能會傳回下列一致性狀態:
CONFORMANT
:Kubernetes 資源符合平台政策。NON_CONFORMANT
:Kubernetes 資源不符合平台政策。ERROR
:評估作業因發生錯誤而結束。
回應也包含巢狀結果,其中含有針對 Kubernetes 資源中每個圖片評估的所有檢查項目,以及這些檢查項目的詳細資訊。
每個 ImageResults
區塊都包含清楚易懂的 explanation
欄位,說明圖片是否符合規定。
為方便編寫指令碼,如果 Pod 規格不符合政策規定或評估失敗,指令會傳回非零結束碼。
以下輸出範例說明兩種情況。在第一種情況下,Kubernetes 資源符合政策規定。在第二種情況下,資源不符合政策規定。
查看符合規範的結果
本節說明政策評估服務檢查的輸出內容,其中 Pod 符合平台政策。
results:
- imageResults:
- checkSetResult:
checkResults:
results:
- displayName: My trusted directory check
evaluationResult:
verdict: CONFORMANT
explanation: Image is in a trusted directory
type: TrustedDirectoryCheck
displayName: Default check set
scope: {}
imageUri: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
verdict: CONFORMANT
kubernetesNamespace: default
kubernetesServiceAccount: default
podName: my-pod
verdict: CONFORMANT
verdict: CONFORMANT
在輸出內容中,系統會針對下列類型的評估傳回 CONFORMANT
判決:
- 檢查:圖片符合個別檢查的規定,在本例中為信任目錄檢查。
- CheckSet:圖片符合 CheckSet 中的各項檢查。
- 政策:圖片符合政策規定。
由於圖片符合政策規定,指令會傳回零的結束代碼。
查看不符規定的結果
本節說明 Pod 不符合平台政策時,政策評估服務檢查的輸出內容。
results:
- imageResults:
- checkSetResult:
checkResults:
results:
- displayName: My trusted directory check
evaluationResult:
verdict: NON_CONFORMANT
explanation: Image isn't in a trusted directory
type: TrustedDirectoryCheck
displayName: Default check set
scope: {}
imageUri: us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0
verdict: NON_CONFORMANT
kubernetesNamespace: default
kubernetesServiceAccount: default
podName: my-pod
verdict: NON_CONFORMANT
verdict: NON_CONFORMANT
在輸出內容中,由於圖片不符合個別檢查 (在本例中為信任目錄檢查),因此也不符合所有檢查,頂層的判定結果為 NON_CONFORMANT
,且指令會傳回非零的結束代碼。
測試政策評估服務
本節說明如何測試政策評估服務。您建立以檢查為基礎的平台政策,其中包含受信任的目錄檢查。在第一次測試中,您可以評估符合政策的 Pod 規格。在第二項測試中,您會評估不符合政策的 Pod 規格。
如要建立包含信任目錄檢查的政策,請執行下列指令:
建立平台政策檔案:
cat << EOF > my-policy.yaml gkePolicy: checkSets: - checks: - displayName: "My trusted directory check" trustedDirectoryCheck: trustedDirPatterns: - "us-docker.pkg.dev/google-samples/containers/gke/" displayName: "My default check set" EOF
建立政策:
使用下列任何指令資料之前,請先替換以下項目:
- 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
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=my-policy.yaml
- POLICY_ID:您選擇的平台政策 ID。如果政策位於其他專案中,可以使用完整資源名稱:
評估符合規範的圖片
在本節中,您會評估符合本指南稍早建立政策的 Pod 規格。評估結果會產生判決,指出 Pod 規格為 CONFORMANT
,因為 Pod 規格參照的映像檔位於受信任目錄檢查的 trustedDirPatterns
中指定的目錄。
建立 Pod 規格:
cat << EOF > my-conforming-pod.json { "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "" }, "spec": { "containers": [ { "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0" } ] } } EOF
執行下列指令,使用政策評估服務:
使用下列任何指令資料之前,請先替換以下項目:
POLICY_ID
:平台政策的 ID。如果政策位於其他專案中,可以使用完整資源名稱:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
。my-conforming-pod.json
:Pod 規格的路徑。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=my-conforming-pod.json
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=my-conforming-pod.json
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=my-conforming-pod.json
評估不符規定的圖片
在本節中,您會評估不符合本指南稍早建立政策的 Pod 規格。評估結果會產生判決,指出 Pod 規格為 NON_CONFORMANT
,因為 Pod 規格參照的映像檔位於受信任目錄檢查的 trustedDirPatterns
中指定的目錄外。
如要評估不符規定的圖片,請執行下列指令:
建立 Pod 規格:
cat << EOF > my-non-conforming-pod.json { "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "" }, "spec": { "containers": [ { "image": "us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0" } ] } } EOF
執行下列指令,使用政策評估服務:
使用下列任何指令資料之前,請先替換以下項目:
POLICY_ID
:平台政策的 ID。如果政策位於其他專案中,可以使用完整資源名稱:projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
。my-non-conforming-pod.json
:Pod 規格的路徑。
執行下列指令:
Linux、macOS 或 Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=my-non-conforming-pod.json
Windows (PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=my-non-conforming-pod.json
Windows (cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=my-non-conforming-pod.json