本頁說明如何搭配二進位授權使用緊急存取權。
事前準備
本指南假設您已設定二進位授權。
總覽
您可以使用「緊急情況」breakglass,部署二進位授權封鎖的容器映像檔。
急用權限是緊急情況下的應變措施,可讓您覆寫二進位授權政策的強制執行作業,允許部署映像檔,即使這些映像檔會遭到政策禁止也一樣。
這項功能的實作方式符合 Kubernetes 准入控制器規格中的建議。
使用緊急存取權部署映像檔時,系統會自動將緊急存取權事件記錄到 Cloud 稽核記錄,無論部署作業是否符合政策規定。在 Cloud 稽核記錄中,您可以手動稽核,或自動觸發快訊或其他下游事件。
如要啟用急用權限,請在 Pod 規格中新增 label
欄位,並加入 break-glass
政策標記。
示範緊急存取事件
本節說明如何使用 Breakglass 部署映像檔,包括違反二進位授權政策的映像檔。
更新二進位授權政策,拒絕所有部署要求
如要更新政策,禁止部署所有映像檔,請執行下列步驟:
Google Cloud 控制台
前往 Google Cloud 控制台的「二進位授權」頁面。
按一下「編輯政策」。
在「編輯政策」頁面的「專案預設規則」中,記下原始評估模式,然後按一下「禁止所有圖片」。
按一下 [Save Policy] (儲存政策)。
gcloud
如要在目前專案中儲存現有政策,請執行下列指令:
gcloud container binauthz policy export > SAVE_POLICY_YAML
將 SAVE_POLICY_YAML 替換為匯出檔案的路徑,例如
/tmp/save_policy.yaml
。建立政策檔案:
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
。匯入政策:
gcloud container binauthz policy import TEST_POLICY_YAML
將 TEST_POLICY_YAML 替換為檔案路徑,例如
/tmp/policy.yaml
。
根據預設,系統現在會禁止部署所有映像檔。
嘗試部署映像檔
在本節中,您會嘗試部署映像檔。政策的預設規則已設為禁止部署所有映像檔,因此部署要求會失敗。
以 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
使用
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
欄位才能啟用。
如要啟用緊急存取權,請執行下列指令:
以 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
使用
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 並停用緊急存取權,請執行下列步驟:
刪除 Pod:
kubectl delete -f /tmp/create_pod.yaml
確認您收到類似
pod <var>pod-name</var> deleted
的輸出內容。從 Pod 規格中移除
label
區塊。重設政策:
Google Cloud 控制台
前往 Google Cloud 控制台的「二進位授權」頁面。
按一下「編輯政策」。
在「編輯政策」頁面的「專案預設規則」中,將評估模式重設為先前的設定。
按一下 [Save Policy] (儲存政策)。
gcloud
重新匯入原始政策。
gcloud container binauthz policy import SAVE_POLICY_YAML
將 SAVE_POLICY_YAML 替換為您在本指南稍早建立的檔案路徑。
政策已重設。
後續步驟
- 在 Cloud 稽核記錄中查看急用權限事件。