使用 gcloud CLI 設定政策

本頁說明如何使用 Google Cloud CLI 設定二進位授權政策。您也可以使用 Google Cloud 控制台REST API 執行這些工作。此步驟屬於設定二進位授權流程的一部分。

如要使用指令列工具設定政策,請將現有政策匯出為 YAML 檔案。修改檔案後,您可以匯入檔案來更新政策,詳情請參閱本指南後續內容。如要進一步瞭解政策 YAML 格式,請參閱「政策 YAML 參考資料」。

事前準備

  1. 啟用二進位授權
  2. 建立叢集
  3. 如果您打算使用認證,建議先建立認證者,再設定政策。您可以使用指令列工具或透過Google Cloud 主控台建立驗證者。
  4. 將專案 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 替換為下列其中一個選項:

    • ALWAYS_ALLOW:允許部署所有映像檔。
    • ALWAYS_DENY:禁止部署所有映像檔。
    • REQUIRE_ATTESTATION:如果圖片有一或多項認證,且您新增至這項規則的所有認證者都能驗證,即可部署圖片。部署時,執行者會使用您在此規則的 ATTESTOR 清單中新增的驗證者,驗證認證。如要瞭解如何建立驗證者,請參閱建立驗證者。如果指定 REQUIRE_ATTESTATION,您也必須新增 requireAttestationsBy 區塊,其中至少包含一個驗證者。如要瞭解如何建立驗證者,請參閱建立驗證者
  • 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-east1europe-west1us-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。規則格式如下:

    • 如果是 GKE、GKE 附加叢集和 GKE on AWS,格式為 CLUSTER_LOCATION.CLUSTER_NAME,例如 us-central1-a.test-cluster

    • 如果是 Google Distributed Cloud 軟體 (裸機或 VMware 上的 GKE 叢集),格式為 FLEET_MEMBERSHIP_LOCATION.FLEET_MEMBERSHIP_ID,例如 global.test-membership

      其他屬性如本指南稍早的「設定預設規則」一節所述。如需叢集專屬規則的範例,請參閱「範例政策」。

  • EVALUATION_MODE評估模式會指定二進位授權執行者在部署時強制執行的限制類型。請將 EVALUATION_MODE 替換為下列其中一個選項:

    • ALWAYS_ALLOW:允許部署所有映像檔。
    • ALWAYS_DENY:禁止部署所有映像檔。
    • REQUIRE_ATTESTATION:如果圖片有一或多項認證,且您新增至這項規則的所有認證者都能驗證,即可部署圖片。部署時,執行者會使用您在此規則的 ATTESTOR 清單中新增的驗證者,驗證認證。如要瞭解如何建立驗證者,請參閱建立驗證者。如果指定 REQUIRE_ATTESTATION,您也必須新增 requireAttestationsBy 區塊,其中至少包含一個驗證者。如要瞭解如何建立驗證者,請參閱建立驗證者
  • 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 替換為下列其中一個選項:

    • ALWAYS_ALLOW:允許部署所有映像檔。
    • ALWAYS_DENY:禁止部署所有映像檔。
    • REQUIRE_ATTESTATION:如果圖片有一或多項認證,且您新增至這項規則的所有認證者都能驗證,即可部署圖片。部署時,執行者會使用您在此規則的 ATTESTOR 清單中新增的驗證者,驗證認證。如要瞭解如何建立驗證者,請參閱建立驗證者。如果指定 REQUIRE_ATTESTATION,您也必須新增 requireAttestationsBy 區塊,其中至少包含一個驗證者。如要瞭解如何建立驗證者,請參閱建立驗證者
  • 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 替換為下列其中一個選項:

    • ALWAYS_ALLOW:允許部署所有映像檔。
    • ALWAYS_DENY:禁止部署所有映像檔。
    • REQUIRE_ATTESTATION:如果圖片有一或多項認證,且您新增至這項規則的所有認證者都能驗證,即可部署圖片。部署時,執行者會使用您在此規則的 ATTESTOR 清單中新增的驗證者,驗證認證。如要瞭解如何建立驗證者,請參閱建立驗證者。如果指定 REQUIRE_ATTESTATION,您也必須新增 requireAttestationsBy 區塊,其中至少包含一個驗證者。如要瞭解如何建立驗證者,請參閱建立驗證者
  • 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 替換為下列其中一個選項:

    • ALWAYS_ALLOW:允許部署所有映像檔。
    • ALWAYS_DENY:禁止部署所有映像檔。
    • REQUIRE_ATTESTATION:如果圖片有一或多項認證,且您新增至這項規則的所有認證者都能驗證,即可部署圖片。部署時,執行者會使用您在此規則的 ATTESTOR 清單中新增的驗證者,驗證認證。如要瞭解如何建立驗證者,請參閱建立驗證者。如果指定 REQUIRE_ATTESTATION,您也必須新增 requireAttestationsBy 區塊,其中至少包含一個驗證者。如要瞭解如何建立驗證者,請參閱建立驗證者
  • 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

後續步驟