全部產品
Search
文件中心

Container Service for Kubernetes:使用kritis-validation-hook組件實現自動驗證容器鏡像簽名

更新時間:Aug 31, 2024

本文介紹如何使用Container RegistryACR(Container Registry)、Key Management Service(Key Management Service)、Security Center(Security Center)和kritis-validation-hook組件實現自動驗證容器鏡像簽名,確保只部署可信授權方簽名的容器鏡像,降低在您環境中發生意外或惡意代碼的風險。

步驟一:安裝kritis-validation-hook組件

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理

  3. 組件管理頁面,單擊安全頁簽,找到kritis-validation-hook,單擊安裝

  4. 授予訪問kritis-validation-hook組件所需的許可權。

    您需要確保叢集擁有運行kritis-validation-hook組件所需的存取權限。具體操作,請參見配置資源存取權限

步驟二:建立用於容器鏡像簽名的KMS密鑰

關於建立使用者主要金鑰的具體操作,請參見管理密鑰

重要

建立密鑰時,選擇密鑰類型RSA_2048;選擇密鑰用途Sign/Verify

步驟三:在Security Center配置使用KMS密鑰的證明者

  1. 登入Security Center控制台。在控制台左上方,選擇需防護資產所在的地區:中國全球(不含中國)

  2. 在左側導覽列,選擇防護配置 > 容器防護 > 容器簽名

  3. 證明者頁簽,單擊建立證明者。配置完成後,單擊確定完成證明者的建立。

    配置項

    說明

    證明者名稱

    配置容器簽名安全性原則時需要選擇證明者,用於對您的目標容器進行可信授權。建議輸入便於識別的名稱。

    選擇認證

    在認證列表中選擇您已建立的KMS密鑰。

    描述

    輸入該證明者的備忘資訊。

步驟四:在ACR中開啟容器鏡像自動加簽功能

  1. 登入Container Registry控制台

  2. 在頂部功能表列,選擇所需地區。

  3. 在左側導覽列,選擇執行個體列表

  4. 執行個體列表頁面,單擊目標企業版執行個體名稱或者單擊目標企業版執行個體的管理

    說明

    如需添加企業版執行個體,單擊建立企業版執行個體,且執行個體規格進階版

  5. 在企業版執行個體管理頁左側導覽列中,選擇倉庫管理 > 命名空間

    建立一個命名空間,用於為該命名空間內的所有容器鏡像啟用鏡像加簽功能。具體操作,請參見命名空間的基本操作

  6. 為建立的命名空間啟用容器鏡像自動加簽功能。

    添加加簽規則時選擇步驟三中在Security Center建立的證明者。

    1. 在企業版執行個體管理頁左側導覽列中,選擇安全可信 > 鏡像加簽

    2. 鏡像加簽頁簽中,單擊添加加簽規則

      有關添加加簽規則配置詳情,請參見配置鏡像自動加簽規則

步驟五:在Security Center啟用容器鏡像驗簽功能

通過在Security Center添加和啟用策略的方式來為Kubernetes叢集中某個命名空間啟用容器鏡像驗簽功能。

  1. 登入Security Center控制台

  2. 在左側導覽列,選擇防護配置 > 容器防護 > 容器簽名

  3. 安全性原則頁簽,單擊添加策略。策略配置完成後,單擊確定

    配置項

    說明

    策略名稱稱

    配置簽名安全性原則時需要選擇證明者,用於對您的目的地組群進行可信授權。

    建議輸入便於識別的名稱。

    證明者

    在證明者列表中選擇您已建立的證明者。

    應用叢集

    單擊需要進行容器簽名的叢集分組後,選中目標叢集命名空間

    策略開啟狀態

    單擊開關,建立策略後策略會立即啟用。

    說明

    預設不開啟策略。策略如果未開啟將不會生效。

    備忘

    輸入安全性原則的備忘資訊。

步驟六:驗證容器鏡像自動驗簽功能

說明

如果未啟用鏡像版本不可變,必須配置使用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

相關文檔