本頁說明如何使用 Google Cloud CLI 設定二進位授權政策。您也可以使用 Google Cloud 控制台或 REST API 執行這些工作。此步驟屬於設定二進位授權流程的一部分。
如要使用指令列工具設定政策,請將現有政策匯出為 YAML 檔案。修改檔案後,您可以匯入檔案來更新政策,詳情請參閱本指南後續內容。如要進一步瞭解政策 YAML 格式,請參閱「政策 YAML 參考資料」。
事前準備
- 啟用二進位授權。
- 建立叢集。
- 如果您打算使用認證,建議先建立認證者,再設定政策。您可以使用指令列工具或透過Google Cloud 主控台建立驗證者。
將專案 ID 設為啟用二進位授權的專案:
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
匯出政策 YAML 檔案
本節適用於 GKE、Distributed Cloud、Cloud Run 和 Cloud Service Mesh。
如要更新政策,請先將政策匯出至本機 YAML 檔案,如下所示:
gcloud container binauthz policy export > /tmp/policy.yaml
根據預設,檔案內容類似於下列內容:
defaultAdmissionRule: enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG evaluationMode: ALWAYS_ALLOW globalPolicyEvaluationMode: ENABLE name: projects/PROJECT_ID/policy
如要修改政策,請編輯檔案並新增或更新章節,詳情請參閱本指南後續內容。儲存檔案後,即可匯入原則。
如要將豁免圖片加入許可清單,請在政策檔案中新增下列內容:
admissionWhitelistPatterns: - namePattern: EXEMPT_IMAGE_PATH
將 EXEMPT_IMAGE_PATH
替換為要排除的圖片路徑。如要排除其他圖片,請新增其他 - namePattern
項目。進一步瞭解 admissionWhitelistPatterns
。
設定預設規則
本節適用於 GKE、Distributed Cloud、Cloud Run 和 Cloud Service Mesh。
規則是政策的一部分,定義容器映像檔必須滿足的限制條件,才能部署。預設規則會定義適用於所有非豁免映像檔的限制,這些映像檔沒有自己的叢集專屬規則。每項政策都必須有預設規則。
預設規則是在政策 YAML 檔案的 defaultAdmissionRule
節點中定義。如要進一步瞭解這項規則的各個部分,請參閱政策 YAML 參考資料中的「ADMISSION_RULE」。如需預設規則範例,請參閱「範例政策」。
如要設定預設規則,請視需要編輯 policy.yaml
檔案中的 defaultAdmissionRule
節點:
defaultAdmissionRule: evaluationMode: EVALUATION_MODE enforcementMode: ENFORCEMENT_MODE requireAttestationsBy: - ATTESTOR - ...
更改下列內容:
EVALUATION_MODE:評估模式會指定二進位授權執行程序在部署時強制執行的限制類型。請將 EVALUATION_MODE 替換為下列其中一個選項:
ENFORCEMENT_MODE:強制執行模式會指定強制執行者在圖片違反規則時的回應方式。請將 ENFORCEMENT_MODE 替換為下列其中一個值:
ENFORCED_BLOCK_AND_AUDIT_LOG
:封鎖違反規則的圖片,並將違規資訊記錄到 Cloud 稽核記錄 (預設)。DRYRUN_AUDIT_LOG_ONLY
:允許部署所有映像檔,但將違規等強制執行資訊記錄到 Cloud 稽核記錄。
ATTESTOR:如果將
EVALUATION_MODE
設為REQUIRE_ATTESTATION
,則必須一併新增 requireAttesationsBy 區塊。在區塊中,您會依資源 ID 列出一或多個認證者。資源 ID 的格式如下:projects/PROJECT_ID/attestors/ATTESTOR_NAME
。如要進一步瞭解如何建立認證者,請參閱建立認證者。
管理排除的圖片
本節適用於 GKE、Distributed Cloud、Cloud Run 和 Cloud Service Mesh。
豁免圖片是指不受政策規則限制的圖片。二進位授權一律允許部署豁免映像檔。
如要指定豁免映像檔,請在 admissionWhitelistPatterns
中列出其登錄路徑。路徑是指 Container Registry 或其他映像檔登錄檔。在部署時,二進位授權會先排除系統政策指定的映像檔,再排除 admissionWhitelistPatterns
指定的映像檔清單。
如要新增豁免圖片,請在 policy.yaml
檔案的 admissionWhitelistPatterns
清單下方新增 namePattern
節點:
admissionWhitelistPatterns: - namePattern: MATCHING_PATTERN
將 MATCHING_PATTERN 替換為登錄檔中單一圖片的路徑 (完全相符),或使用萬用字元符號 (*
、**
) 替換為符合模式的任何圖片。
Cloud Run
本節適用於 Cloud Run。
您無法直接指定含有標記的圖片名稱。舉例來說,您無法指定 IMAGE_PATH
:latest。
如要指定含有標記的映像檔名稱,請務必使用萬用字元指定映像檔名稱,如下所示:
*
適用於單一圖片的所有版本,例如us-docker.pkg.dev/myproject/container/hello@*
**
,適用於專案中的所有圖片,例如us-docker.pkg.dev/myproject/**
您可以使用路徑名稱,以 IMAGE_PATH
@DIGEST
格式指定摘要。
系統政策評估模式
本節適用於 GKE 和 Distributed Cloud。
系統政策評估模式 是一種政策設定,可讓二進位授權在評估您設定的政策前,先評估系統政策。Google 會管理系統政策,其中會排除 GKE 使用的 Google 維護系統映像檔清單。系統政策中列出的圖片不會因政策強制執行而遭到封鎖。如未啟用這項設定,您就必須自行管理豁免圖片清單。瞭解如何管理排除的圖片。
您可以使用下列指令查看系統政策的內容:
gcloud alpha container binauthz policy export-system-policy
如要啟用系統政策評估模式,請在 policy.yaml
檔案中加入以下程式碼:
globalPolicyEvaluationMode: ENABLE
如要停用系統政策評估模式,請新增下列內容:
globalPolicyEvaluationMode: DISABLE
您可以匯出與特定區域相關聯的系統政策,方法如下:
gcloud alpha container binauthz policy export-system-policy \
--location=REGION > /tmp/policy.yaml
將 REGION 替換為要匯出系統政策的相關區域 (或「global」)。例如:asia-east1
、europe-west1
、us-central1
。
如果省略 --location
或指定 --location=global
,指令會輸出最後一組收到更新的區域中的系統政策。由於系統政策的變更大多是新增內容,因此輸出內容會顯示目前所有區域允許的系統映像檔集。
設定叢集專屬規則 (選用)
本節適用於 GKE 和 Distributed Cloud。
叢集也可以有一或多個叢集專屬規則。這類規則僅適用於要部署至特定 GKE 叢集的映像檔。叢集專屬規則是政策的選用部分。
叢集專屬規則是在政策 YAML 檔案的 clusterAdmissionRules
節點中定義。如要進一步瞭解這項規則的各個部分,請參閱政策 YAML 參考資料中的「ADMISSION_RULE」。如需範例,請參閱「範例政策」中的「使用叢集專屬規則」。
如要新增叢集專屬規則,請按照下列步驟操作:
在 policy.yaml
檔案中,新增 clusterAdmissionRules
節點:
clusterAdmissionRules: CLUSTER_SPECIFIER: evaluationMode: EVALUATION_MODE enforcementMode: ENFORCEMENT_MODE requireAttestationsBy: - ATTESTOR - ...
更改下列內容:
CLUSTER_SPECIFIER:規則套用的叢集資源 ID。規則格式如下:
EVALUATION_MODE:評估模式會指定二進位授權執行者在部署時強制執行的限制類型。請將 EVALUATION_MODE 替換為下列其中一個選項:
ENFORCEMENT_MODE:強制執行模式會指定強制執行者在圖片違反規則時的回應方式。請將 ENFORCEMENT_MODE 替換為下列其中一個值:
ENFORCED_BLOCK_AND_AUDIT_LOG
:封鎖違反規則的圖片,並將違規資訊記錄到 Cloud 稽核記錄 (預設)。DRYRUN_AUDIT_LOG_ONLY
:允許部署所有映像檔,但將違規等強制執行資訊記錄到 Cloud 稽核記錄。
ATTESTOR:如果將
EVALUATION_MODE
設為REQUIRE_ATTESTATION
,則必須一併新增 requireAttesationsBy 區塊。在區塊中,您會依資源 ID 列出一或多個認證者。資源 ID 的格式如下:projects/PROJECT_ID/attestors/ATTESTOR_NAME
。如要進一步瞭解如何建立認證者,請參閱建立認證者。
設定專屬規則 (選用)
您可以建立規則,範圍限定為網格服務身分、Kubernetes 服務帳戶或 Kubernetes 命名空間。
為 Cloud Service Mesh 服務身分設定規則
如要為 Cloud Service Mesh 服務身分設定規則,請編輯 policy.yaml
檔案並新增 istioServiceIdentityAdmissionRules
區塊,例如:
defaultAdmissionRule:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
istioServiceIdentityAdmissionRules:
SERVICE_IDENTITY_ID:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ENFORCEMENT_MODE
requireAttestationsBy:
- <var>ATTESTOR</var>
- ...
name: projects/PROJECT_ID/policy
更改下列內容:
SERVICE_IDENTITY_ID:Cloud Service Mesh 服務身分,用於將這項規則限定在特定範圍。服務身分 ID 的格式如下: PROJECT_ID.svc.id.goog/ns/NAMESPACE/sa/SERVICE_ACCOUNT。 在服務身分 ID 中,請替換下列項目:
- PROJECT_ID:您定義 Kubernetes 資源的專案 ID。
- NAMESPACE:Kubernetes 命名空間。
- SERVICE_ACCOUNT:服務帳戶。
EVALUATION_MODE:評估模式會指定二進位授權執行者在部署時強制執行的限制類型。請將 EVALUATION_MODE 替換為下列其中一個選項:
ENFORCEMENT_MODE:強制執行模式會指定強制執行者在圖片違反規則時的回應方式。請將 ENFORCEMENT_MODE 替換為下列其中一個值:
ENFORCED_BLOCK_AND_AUDIT_LOG
:封鎖違反規則的圖片,並將違規資訊記錄到 Cloud 稽核記錄 (預設)。DRYRUN_AUDIT_LOG_ONLY
:允許部署所有映像檔,但將違規等強制執行資訊記錄到 Cloud 稽核記錄。
ATTESTOR:如果將
EVALUATION_MODE
設為REQUIRE_ATTESTATION
,則必須一併新增 requireAttesationsBy 區塊。在區塊中,您會依資源 ID 列出一或多個認證者。資源 ID 的格式如下:projects/PROJECT_ID/attestors/ATTESTOR_NAME
。如要進一步瞭解如何建立認證者,請參閱建立認證者。
為 Kubernetes 服務帳戶設定規則
如要為 Kubernetes 服務帳戶設定規則,請編輯 policy.yaml
檔案並新增 kubernetesServiceAccountAdmissionRules
區塊,例如:
defaultAdmissionRule:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
kubernetesServiceAccountAdmissionRules:
KUBERNETES_SERVICE_ACCOUNT_ID:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ENFORCEMENT_MODE
requireAttestationsBy:
- <var>ATTESTOR</var>
- ...
name: projects/PROJECT_ID/policy
更改下列內容:
KUBERNETES_SERVICE_ACCOUNT_ID:要將規則範圍限定於其中的 Kubernetes 服務帳戶。這個服務帳戶 ID 的格式為: NAMESPACE:SERVICE_ACCOUNT。在服務帳戶 ID 中,請替換下列項目:
- NAMESPACE:Kubernetes 命名空間。
- SERVICE_ACCOUNT:服務帳戶名稱。
EVALUATION_MODE:評估模式會指定二進位授權執行者在部署時強制執行的限制類型。請將 EVALUATION_MODE 替換為下列其中一個選項:
ENFORCEMENT_MODE:強制執行模式會指定強制執行者在圖片違反規則時的回應方式。請將 ENFORCEMENT_MODE 替換為下列其中一個值:
ENFORCED_BLOCK_AND_AUDIT_LOG
:封鎖違反規則的圖片,並將違規資訊記錄到 Cloud 稽核記錄 (預設)。DRYRUN_AUDIT_LOG_ONLY
:允許部署所有映像檔,但將違規等強制執行資訊記錄到 Cloud 稽核記錄。
ATTESTOR:如果將
EVALUATION_MODE
設為REQUIRE_ATTESTATION
,則必須一併新增 requireAttesationsBy 區塊。在區塊中,您會依資源 ID 列出一或多個認證者。資源 ID 的格式如下:projects/PROJECT_ID/attestors/ATTESTOR_NAME
。如要進一步瞭解如何建立認證者,請參閱建立認證者。
為 Kubernetes 命名空間設定規則
如要為 Kubernetes 命名空間設定規則,請編輯 policy.yaml
檔案並新增 kubernetesNamespaceAdmissionRules
區塊,例如:
defaultAdmissionRule:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
kubernetesNamespaceAdmissionRules:
KUBERNETES_NAMESPACE:
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
evaluationMode: EVALUATION_MODE
requireAttestationsBy:
- <var>ATTESTOR</var>
- ...
name: projects/PROJECT_ID/policy
更改下列內容:
KUBERNETES_NAMESPACE:此規則的適用範圍 Kubernetes 命名空間。
EVALUATION_MODE:評估模式會指定二進位授權執行者在部署時強制執行的限制類型。請將 EVALUATION_MODE 替換為下列其中一個選項:
ENFORCEMENT_MODE:強制執行模式會指定強制執行者在圖片違反規則時的回應方式。請將 ENFORCEMENT_MODE 替換為下列其中一個值:
ENFORCED_BLOCK_AND_AUDIT_LOG
:封鎖違反規則的圖片,並將違規資訊記錄到 Cloud 稽核記錄 (預設)。DRYRUN_AUDIT_LOG_ONLY
:允許部署所有映像檔,但將違規等強制執行資訊記錄到 Cloud 稽核記錄。
ATTESTOR:如果將
EVALUATION_MODE
設為REQUIRE_ATTESTATION
,則必須一併新增 requireAttesationsBy 區塊。在區塊中,您會依資源 ID 列出一或多個認證者。資源 ID 的格式如下:projects/PROJECT_ID/attestors/ATTESTOR_NAME
。如要進一步瞭解如何建立認證者,請參閱建立認證者。
匯入政策 YAML 檔案
本節適用於 GKE、Distributed Cloud、Cloud Run 和 Cloud Service Mesh。
輸入下列內容,將政策 YAML 檔案匯回二進位授權:
gcloud container binauthz policy import /tmp/policy.yaml
後續步驟
- 使用
built-by-cloud-build
簽署者只部署 Cloud Build 建構的映像檔。 - 使用認證。
- 部署 GKE 映像檔。