使用急用權限 (GKE、Distributed Cloud)

本頁說明如何搭配二進位授權使用緊急存取權。

事前準備

本指南假設您已設定二進位授權

總覽

您可以使用「緊急情況」breakglass,部署二進位授權封鎖的容器映像檔。

急用權限是緊急情況下的應變措施,可讓您覆寫二進位授權政策的強制執行作業,允許部署映像檔,即使這些映像檔會遭到政策禁止也一樣。

這項功能的實作方式符合 Kubernetes 准入控制器規格中的建議。

使用緊急存取權部署映像檔時,系統會自動將緊急存取權事件記錄到 Cloud 稽核記錄,無論部署作業是否符合政策規定。在 Cloud 稽核記錄中,您可以手動稽核,或自動觸發快訊或其他下游事件。

如要啟用急用權限,請在 Pod 規格中新增 label 欄位,並加入 break-glass 政策標記。

示範緊急存取事件

本節說明如何使用 Breakglass 部署映像檔,包括違反二進位授權政策的映像檔。

更新二進位授權政策,拒絕所有部署要求

如要更新政策,禁止部署所有映像檔,請執行下列步驟:

Google Cloud 控制台

  1. 前往 Google Cloud 控制台的「二進位授權」頁面。

    前往二進位授權

  2. 按一下「編輯政策」

  3. 在「編輯政策」頁面的「專案預設規則」中,記下原始評估模式,然後按一下「禁止所有圖片」

  4. 按一下 [Save Policy] (儲存政策)。

gcloud

  1. 如要在目前專案中儲存現有政策,請執行下列指令:

    gcloud container binauthz policy export > SAVE_POLICY_YAML
    

    SAVE_POLICY_YAML 替換為匯出檔案的路徑,例如 /tmp/save_policy.yaml

  2. 建立政策檔案:

    cat > TEST_POLICY_YAML << EOM
    admissionWhitelistPatterns:
    defaultAdmissionRule:
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      evaluationMode: ALWAYS_DENY
    globalPolicyEvaluationMode: DISABLE
    EOM
    

    TEST_POLICY_YAML 替換為檔案路徑,例如 /tmp/policy.yaml

  3. 匯入政策:

    gcloud container binauthz policy import TEST_POLICY_YAML
    

    TEST_POLICY_YAML 替換為檔案路徑,例如 /tmp/policy.yaml

根據預設,系統現在會禁止部署所有映像檔。

嘗試部署映像檔

在本節中,您會嘗試部署映像檔。政策的預設規則已設為禁止部署所有映像檔,因此部署要求會失敗。

  1. 以 YAML 格式建立設定檔。這個檔案包含建立 Pod 所需的基本資訊:

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: breakglass-pod
    spec:
      containers:
      - name: container-name
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. 使用 kubectl 建立 Pod:

    kubectl create -f /tmp/create_pod.yaml
    

    系統顯示錯誤訊息,指出圖片遭到政策封鎖。錯誤訊息應如下所示:

    Error from server (Forbidden): error when creating "/tmp/create_pod.yaml": pods "breakglass-pod" is forbidden: image policy webhook backend denied one or more images: Image gcr.io/google-samples/hello-app denied by Binary Authorization default
    admission rule. Denied by always_deny admission rule`.

啟用急用權限,然後再次部署

在本節中,您將啟用緊急存取權。雖然 Breakglass 專屬於二進位授權,但您必須更新 Pod 規格中的 label 欄位才能啟用。

如要啟用緊急存取權,請執行下列指令:

  1. 以 YAML 格式建立設定檔。

    下列指令會建立包含 break-glass 標籤的檔案,以及建立 Pod 時所需的其他資訊:

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
      labels:
        image-policy.k8s.io/break-glass: "true"
    spec:
      containers:
      - name: container-name
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. 使用 kubectl 建立 Pod:

    kubectl create -f /tmp/create_pod.yaml
    

    請注意輸出內容:pod/pod-name created

在 Cloud 稽核記錄中找出急用權限記錄項目

Cloud 稽核記錄中查看急用權限事件。

指定 annotations: alpha.image-policy.k8s.io/break-glass 的舊版 PodSpec 也會觸發 Breakglass,並產生記錄項目。我們不再建議使用該註解,但為了維持回溯相容性,系統仍支援該註解。

清除所用資源

如要刪除 Pod 並停用緊急存取權,請執行下列步驟:

  1. 刪除 Pod:

      kubectl delete -f /tmp/create_pod.yaml
      

    確認您收到類似 pod <var>pod-name</var> deleted 的輸出內容。

  2. 從 Pod 規格中移除 label 區塊。

  3. 重設政策:

    Google Cloud 控制台

    1. 前往 Google Cloud 控制台的「二進位授權」頁面。

      前往二進位授權

    2. 按一下「編輯政策」

    3. 在「編輯政策」頁面的「專案預設規則」中,將評估模式重設為先前的設定。

    4. 按一下 [Save Policy] (儲存政策)。

    gcloud

    1. 重新匯入原始政策。

        gcloud container binauthz policy import SAVE_POLICY_YAML
      

      SAVE_POLICY_YAML 替換為您在本指南稍早建立的檔案路徑。

    政策已重設。

後續步驟