本文介紹如何使用Container RegistryACR(Container Registry)、Key Management Service(Key Management Service)、Security Center(Security Center)和kritis-validation-hook組件實現自動驗證容器鏡像簽名,確保只部署可信授權方簽名的容器鏡像,降低在您環境中發生意外或惡意代碼的風險。
步驟一:安裝kritis-validation-hook組件
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在組件管理頁面,單擊安全頁簽,找到kritis-validation-hook,單擊安裝。
授予訪問kritis-validation-hook組件所需的許可權。
您需要確保叢集擁有運行kritis-validation-hook組件所需的存取權限。具體操作,請參見配置資源存取權限。
步驟二:建立用於容器鏡像簽名的KMS密鑰
關於建立使用者主要金鑰的具體操作,請參見管理密鑰。
建立密鑰時,選擇密鑰類型為RSA_2048;選擇密鑰用途為Sign/Verify。
步驟三:在Security Center配置使用KMS密鑰的證明者
登入Security Center控制台。在控制台左上方,選擇需防護資產所在的地區:中國或全球(不含中國)。
在左側導覽列,選擇
。在證明者頁簽,單擊建立證明者。配置完成後,單擊確定完成證明者的建立。
配置項
說明
證明者名稱
配置容器簽名安全性原則時需要選擇證明者,用於對您的目標容器進行可信授權。建議輸入便於識別的名稱。
選擇認證
在認證列表中選擇您已建立的KMS密鑰。
描述
輸入該證明者的備忘資訊。
步驟四:在ACR中開啟容器鏡像自動加簽功能
在頂部功能表列,選擇所需地區。
在左側導覽列,選擇執行個體列表。
在執行個體列表頁面,單擊目標企業版執行個體名稱或者單擊目標企業版執行個體的管理。
說明如需添加企業版執行個體,單擊建立企業版執行個體,且執行個體規格為進階版。
在企業版執行個體管理頁左側導覽列中,選擇
。建立一個命名空間,用於為該命名空間內的所有容器鏡像啟用鏡像加簽功能。具體操作,請參見命名空間的基本操作。
為建立的命名空間啟用容器鏡像自動加簽功能。
添加加簽規則時選擇步驟三中在Security Center建立的證明者。
在企業版執行個體管理頁左側導覽列中,選擇
。在鏡像加簽頁簽中,單擊添加加簽規則。
有關添加加簽規則配置詳情,請參見配置鏡像自動加簽規則。
步驟五:在Security Center啟用容器鏡像驗簽功能
通過在Security Center添加和啟用策略的方式來為Kubernetes叢集中某個命名空間啟用容器鏡像驗簽功能。
在左側導覽列,選擇
。在安全性原則頁簽,單擊添加策略。策略配置完成後,單擊確定。
配置項
說明
策略名稱稱
配置簽名安全性原則時需要選擇證明者,用於對您的目的地組群進行可信授權。
建議輸入便於識別的名稱。
證明者
在證明者列表中選擇您已建立的證明者。
應用叢集
單擊需要進行容器簽名的叢集分組後,選中目標叢集命名空間。
策略開啟狀態
單擊開關,建立策略後策略會立即啟用。
說明預設不開啟策略。策略如果未開啟將不會生效。
備忘
輸入安全性原則的備忘資訊。
步驟六:驗證容器鏡像自動驗簽功能
如果未啟用鏡像版本不可變,必須配置使用digest格式的鏡像地址。關於鏡像版本不可變的詳細介紹,請參見開啟鏡像版本不可變 。
執行以下命令,驗證容器鏡像自動驗簽功能。
已開啟驗簽功能的Default命名空間將拒絕部署使用未加簽的Container Registry。
使用Tag格式鏡像的命令如下:
kubectl -n default create deployment not-sign --image=alpine:3.11 -- sleep 10
Error from server: admission webhook "kritis-validation-hook-deployments.grafeas.io" denied the request: image alpine:3.11 is not attested
使用Digest格式鏡像的命令如下:
kubectl -n default create deployment not-sign --image=alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 -- sleep 10
Error from server: admission webhook "kritis-validation-hook-deployments.grafeas.io" denied the request: image alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 is not attested
向已開啟自動加簽功能的Container Registry命名空間中推送一個鏡像,然後驗證可以使用這個加簽的容器鏡像部署服務。
docker push kritis-demo***.cn-hongkong.cr.aliyuncs.com/kritis-demo***/alpine:3.11
The push refers to repository [kritis-demo***.cn-hongkong.cr.aliyuncs.com/kritis-demo***/alpine] 5216338b40a7: Pushed 3.11: digest: sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 size: 528
允許存取已自動加簽容器鏡像的命令如下:
kubectl -n default create deployment is-signed --image=kritis-demo***.cn-hongkong.cr.aliyuncs.com/kritis-demo***/alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 -- sleep 10
deployment.apps/is-signed created
相關文檔
kritis-validation-hook組件介紹,請參見kritis-validation-hook組件介紹。
kritis-validation-hook組件變更記錄,請參見kritis-validation-hook。