設定二進位授權政策的強制執行機制

Google Distributed Cloud 的二進位授權是一項 Google Cloud 功能,可將二進位授權的代管部署時間強制執行機制,擴展至您的地端叢集。Google Distributed Cloud 上的二進位授權主要用於保護工作負載,但二進位授權適用於所有叢集類型。請按照本指南中的步驟,將 Google Cloud 專案中設定的 Binary Authorization 政策強制執行規則套用至叢集。如要進一步瞭解二進位授權政策和規則,請參閱 二進位授權總覽

必要條件

如要為叢集啟用二進位授權政策強制執行功能,請先確認您符合下列先決條件:

  • 向機群註冊叢集:使用 bmctl 建立叢集時,叢集會註冊至您在叢集設定檔的 gkeConnect.projectID 欄位中指定的 Google Cloud 專案。這個專案稱為「機群主專案」。如要進一步瞭解機群 (包括用途、最佳做法和範例),請參閱機群管理文件。

  • 在專案中啟用 Binary Authorization API: Google Cloud 在車隊主機專案中啟用 Binary Authorization 服務

  • 將「二進位授權政策評估者」角色新增至車隊主機專案:如要將「二進位授權政策評估者」(roles/binaryauthorization.policyEvaluator) 角色授予車隊主機專案的 Kubernetes 服務帳戶,請執行下列指令:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_ID.svc.id.goog[binauthz-system/binauthz-agent]" \
        --role="roles/binaryauthorization.policyEvaluator"
    

    如果叢集在 Proxy 伺服器後方執行,請確認 Proxy 伺服器允許連線至 Binary Authorization API (binaryauthorization.googleapis.com)。這個 API 可根據政策驗證及控管部署至叢集的映像檔。如要進一步瞭解如何使用 Proxy 設定,請參閱「透過 Proxy 安裝」。

滿足必要條件後,您可以在建立新叢集或更新現有叢集時,啟用 (或停用) 二進位授權政策。

在建立叢集時啟用二進位授權政策

您可以使用 bmctl或 gcloud CLI 啟用二進位授權政策強制執行功能。

bmctl

如要在使用 bmctl 建立叢集時啟用二進位授權,請按照下列步驟操作:

  1. 建立叢集前,請將 spec.binaryAuthorization.evaluationMode 新增至叢集設定檔,如下列範例所示:

    ...
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: user-basic
      namespace: cluster-user-basic
    spec:
      type: user
      ...
      binaryAuthorization:
        evaluationMode: "PROJECT_SINGLETON_POLICY_ENFORCE"
    

    evaluationMode 的有效值如下:

    • PROJECT_SINGLETON_POLICY_ENFORCE:在 Google Cloud 專案中強制執行二進位授權政策 (也稱為專案單一政策),控管叢集中的容器映像檔部署作業。

    • DISABLE:停用叢集的二進位授權。 這是預設值。如果省略 binaryAuthorization,這項功能就會停用。

  2. 在叢集設定檔中進行任何其他必要變更,然後執行 bmctl create cluster 指令。

如要進一步瞭解如何建立叢集,請參閱「叢集建立方式總覽」一文。

gcloud CLI

  • 如要建立使用者叢集並啟用二進位授權,請在執行 gcloud container bare-metal clusters create 指令時新增 --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE 標記。

    這會建立使用者叢集,並強制執行二進位授權政策中指定的規則,也就是專案單例政策。這項政策與您的 Google Cloud 專案相關聯,並指定容器映像檔部署作業的控管規則。如要進一步瞭解如何使用 gcloud CLI 建立使用者叢集,請參閱「使用 GKE On-Prem API 用戶端建立使用者叢集」。如要進一步瞭解二進位授權政策和規則,請參閱二進位授權總覽

為現有叢集啟用或停用二進位授權政策

如果您有現有的 1.16 以上版本叢集,隨時可以使用 bmctl 或 gcloud CLI 啟用或停用二進位授權。

bmctl

  • 啟用方式:

    1. 編輯叢集設定檔,新增 binaryAuthorization 欄位:

      ...
      ---
      apiVersion: baremetal.cluster.gke.io/v1
      kind: Cluster
      metadata:
        name: user-basic
        namespace: cluster-user-basic
      spec:
        type: user
        ...
        binaryAuthorization:
          evaluationMode: "PROJECT_SINGLETON_POLICY_ENFORCE"
      
    2. 更新叢集:

      bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=CLUSTER_KUBECONFIG
      

      更改下列內容:

      • CLUSTER_NAME:要更新的叢集名稱。
      • CLUSTER_KUBECONFIG:叢集 kubeconfig 檔案的路徑。
    3. 等待 binauthz-system 命名空間中名為 binauthz-module-deployment 的 Deployment 準備就緒。

      準備好部署時,二進位授權會強制執行二進位授權政策中指定的規則,也就是專案單例政策。這項政策與您的Google Cloud 專案相關聯,並指定容器映像檔部署作業的控管規則。如要進一步瞭解如何使用 bmctl 更新叢集,請參閱「更新叢集」。如要進一步瞭解二進位授權政策和規則,請參閱二進位授權總覽

  • 如要停用,請按照下列步驟操作:

    如要關閉這項功能,請將 evaluationMode 設為 DISABLED,或從叢集規格中移除 binaryAuthorization 區段。完成這項變更後,請等待幾分鐘,直到 binauthz-system 命名空間中名為 binauthz-module-deployment 的 Deployment 移除為止。

gcloud CLI

  • 如要為現有叢集啟用二進位授權,請在執行 gcloud container bare-metal clusters update 指令時加入 --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE 旗標。

    這會更新使用者叢集,讓二進位授權強制執行二進位授權政策中指定的規則,也稱為專案單例政策。這項政策與您的Google Cloud 專案相關聯,並指定控管容器映像檔部署作業的規則。如要進一步瞭解如何使用 gcloud CLI 更新使用者叢集,請參閱 gcloud CLI 參考資料中的 gcloud container bare-metal clusters update。如要進一步瞭解二進位授權政策和規則,請參閱二進位授權總覽

  • 如要停用現有叢集的二進位授權功能,請執行 gcloud container bare-metal clusters update 指令並加上 --binauthz-evaluation-mode=DISABLED 標記。

疑難排解

如果未完成所有必要條件,您可能不會看到任何問題的早期跡象。如果二進位授權開始無法回應 Pod 建立要求,請檢查 ReplicaSet 的 status.conditions。如果看到類似下列內容的訊息,表示 Binary Authorization 設定有問題:

failed to validate Binary Authorization policy

(1) Ensure the Binary Authorization API is enabled for your Google Cloud project:
    gcloud services enable binaryauthorization.googleapis.com --project=PROJECT_ID
(2) Ensure an IAM policy binding is in place granting binaryauthorization.policyEvaluator role to the binauthz-system/binauthz-agent Kubernetes service account:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_ID.svc.id.goog[binauthz-system/binauthz-agent]" \
        --role=roles/binaryauthorization.policyEvaluator