使用 REST API 設定政策

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

總覽

政策是一組規則,可控管一或多個容器映像檔的部署作業。

使用 REST API 設定政策時,您會以 JSON 格式填入值,其結構與 gcloud 互動時使用的 YAML 結構相同。詳情請參閱政策 YAML 參考資料

如要設定政策,請完成下列步驟:

  • 匯出政策 JSON 檔案
  • 新增其他豁免圖片 (選填)
  • 設定預設規則
  • 新增叢集專屬規則 (選用)
  • 匯入政策 JSON 檔案

在實際情況中,大多數政策都會檢查所有必要的驗證者是否已驗證容器映像檔可供部署。在這種情況下,您也必須在設定政策時建立認證者

設定預設專案

如果尚未設定預設 Google Cloud 專案,請設定:

PROJECT_ID=PROJECT_ID
gcloud config set project ${PROJECT_ID}

其中 PROJECT_ID 是專案 ID。

匯出政策

本節適用於 GKE、Distributed Cloud、Cloud Run 和 Cloud Service Mesh

將政策匯出為本機系統上的 JSON 檔案:

curl \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "x-goog-user-project: ${PROJECT_ID}" \
    "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy" \
    -o "/tmp/policy.json"

根據預設,檔案包含下列內容:

{
  "name": "projects/PROJECT_ID/policy",
  "globalPolicyEvaluationMode": "ENABLE",
  "defaultAdmissionRule": {
    "evaluationMode": "ALWAYS_ALLOW",
    "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
  }
}

管理排除的圖片

本節適用於 GKE、Distributed Cloud、Cloud Run 和 Cloud Service Mesh

豁免映像檔是指不受政策規則限制的容器映像檔。二進位授權一律允許部署豁免映像檔。

如要指定豁免映像檔,請在 admissionWhitelistPatterns 中列出其登錄路徑。路徑可以參照 Container Registry 或其他映像檔登錄檔。執行者會在admissionWhitelistPatterns中處理豁免圖片,這些圖片是由系統政策評估模式豁免。

如要新增豁免圖片,請在政策 JSON 檔案的 admissionWhitelistPatterns 清單中新增 namePattern 節點:

{
  "name": "projects/PROJECT_ID/policy",
  "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

如要啟用系統政策評估模式,請在政策 JSON 檔案中新增下列頂層節點:

"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、Cloud Run 和 Cloud Service Mesh

規則是政策的一部分,定義容器映像檔必須通過的限制,才能部署。每個許可要求都與 GKE 叢集相關聯。如果要求不符合叢集專屬規則,系統就會採用預設規則。

預設規則是在政策的 defaultAdmissionRule 節點中定義。如要進一步瞭解這項規則的各個部分,請參閱政策 YAML 參考資料中的「ADMISSION_RULE」。如需預設規則範例,請參閱「範例政策」。

如要設定預設規則,請視需要編輯政策 JSON 檔案中的 defaultAdmissionRule 節點:

  "defaultAdmissionRule": {
    "evaluationMode": "EVAL_MODE",
    "enforcementMode": "ENFORCEMENT_MODE"
    requireAttestationsBy: [
      ATTESTOR,
      ...
    ]
  }

其中:

  • EVAL_MODE 會指定 Binary Authorization 在允許部署容器映像檔前評估的限制類型。
  • ENFORCEMENT_MODE 會指定容器映像檔不符合規則中定義的限制時,系統採取的動作。
  • ATTESTOR 會指定必須簽署容器映像檔的驗證者 (如有需要),簽署後才能部署容器映像檔。請使用驗證者的完整路徑,格式為 projects/PROJECT_ID/attestors/ATTESTOR_NAME

如果規則會檢查所有必要驗證者是否已簽署容器映像檔,您必須建立驗證者,才能完成這個步驟。

設定叢集專屬規則 (選用)

本節適用於 GKE 和 Distributed Cloud

叢集也可以有一或多個叢集專屬規則。這類規則僅適用於指定的 GKE 叢集。如果叢集沒有自己的規則,系統就會採用預設規則。叢集專屬規則是政策的選用部分。

叢集專屬規則定義在政策 JSON 檔案的 clusterAdmissionRules 節點中。如要進一步瞭解這項規則的各個部分,請參閱政策 YAML 參考資料中的「ADMISSION_RULE」。如需範例,請參閱「範例政策」中的「使用叢集專屬規則」。

如要新增叢集專屬規則,請按照下列步驟操作:

在政策 JSON 檔案中,新增 clusterAdmissionRules 節點:

"clusterAdmissionRules": {
    "us-central1-a.test-cluster": {
      "evaluationMode": "REQUIRE_ATTESTATION",
      "requireAttestationsBy": [
        "ATTESTOR",
        ...
      ],
      "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
    }
  },

其中 CLUSTER_SPECIFIER 是要套用規則的叢集資源 ID。

  • 如果是 GKE、GKE 附加叢集和 GKE on AWS,格式為 CLUSTER_LOCATION.CLUSTER_NAME,例如 us-central1-a.test-cluster
  • 如果是 Google Distributed Cloud 和 Google Distributed Cloud,格式為 FLEET_MEMBERSHIP_LOCATION.FLEET_MEMBERSHIP_ID,例如 global.test-membership

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

如果規則會檢查所有必要驗證者是否已簽署容器映像檔,您必須建立驗證者,才能完成這個步驟。

匯入政策 JSON 檔案

本節適用於 GKE、Distributed Cloud、Cloud Run 和 Cloud Service Mesh

輸入下列內容,將政策 JSON 檔案匯入 Binary Authorization:

curl -X PUT \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "x-goog-user-project: ${PROJECT_ID}" \
    --data-binary @/tmp/policy.json  \
    "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"

後續步驟