本文介紹如何使用容器鏡像服務ACR(Container Registry)、密鑰管理服務KMS(Key Management Service)、云安全中心(Security Center)和kritis-validation-hook組件實現自動驗證容器鏡像簽名,確保只部署可信授權方簽名的容器鏡像,降低在您環境中發生意外或惡意代碼的風險。
步驟一:安裝kritis-validation-hook組件
步驟二:創建用于容器鏡像簽名的KMS密鑰
關于創建用戶主密鑰的具體操作,請參見管理密鑰。
創建密鑰時,選擇密鑰類型為RSA_2048;選擇密鑰用途為Sign/Verify。
步驟三:在云安全中心配置使用KMS密鑰的證明者
登錄云安全中心控制臺。在控制臺左上角,選擇需防護資產所在的區域:中國或全球(不含中國)。
在左側導航欄,選擇
。在證明者頁簽,單擊創建證明者。配置完成后,單擊確定完成證明者的創建。
配置項
說明
證明者名稱
配置容器簽名安全策略時需要選擇證明者,用于對您的目標容器進行可信授權。建議輸入便于識別的名稱。
選擇證書
在證書列表中選擇您已創建的KMS密鑰。
描述
輸入該證明者的備注信息。
步驟四:在ACR中開啟容器鏡像自動加簽功能
登錄容器鏡像服務控制臺。
在頂部菜單欄,選擇所需地域。
在左側導航欄,選擇實例列表。
在實例列表頁面,單擊目標企業版實例名稱或者單擊目標企業版實例的管理。
說明如需添加企業版實例,單擊創建企業版實例,且實例規格為高級版。
在企業版實例管理頁左側導航欄中,選擇
。創建一個命名空間,用于為該命名空間內的所有容器鏡像啟用鏡像加簽功能。具體操作,請參見命名空間的基本操作。
為創建的命名空間啟用容器鏡像自動加簽功能。
添加加簽規則時選擇步驟三中在云安全中心創建的證明者。
在企業版實例管理頁左側導航欄中,選擇
。在鏡像加簽頁簽中,單擊添加加簽規則。
有關添加加簽規則配置詳情,請參見配置鏡像自動加簽規則。
步驟五:在云安全中心啟用容器鏡像驗簽功能
通過在云安全中心添加和啟用策略的方式來為Kubernetes集群中某個命名空間啟用容器鏡像驗簽功能。
登錄云安全中心控制臺。
在左側導航欄,選擇
。在安全策略頁簽,單擊添加策略。策略配置完成后,單擊確定。
配置項
說明
策略名稱
配置簽名安全策略時需要選擇證明者,用于對您的目標集群進行可信授權。
建議輸入便于識別的名稱。
證明者
在證明者列表中選擇您已創建的證明者。
應用集群
單擊需要進行容器簽名的集群分組后,選中目標集群命名空間。
策略開啟狀態
單擊開關,創建策略后策略會立即啟用。
說明默認不開啟策略。策略如果未開啟將不會生效。
備注
輸入安全策略的備注信息。
步驟六:驗證容器鏡像自動驗簽功能
如果未啟用鏡像版本不可變,必須配置使用digest格式的鏡像地址。關于鏡像版本不可變的詳細介紹,請參見開啟鏡像版本不可變 。
執行以下命令,驗證容器鏡像自動驗簽功能。
已開啟驗簽功能的Default命名空間將拒絕部署使用未加簽的容器鏡像服務。
使用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
向已開啟自動加簽功能的容器鏡像服務命名空間中推送一個鏡像,然后驗證可以使用這個加簽的容器鏡像部署服務。
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。