全部產品
Search
文件中心

Container Service for Kubernetes:使用Notation和Ratify進行OCI製品的加簽和驗簽

更新時間:Dec 26, 2025

您可以通過notation-alibabacloud-secret-manager外掛程式基於阿里雲KMS管理的金鑰組Container RegistryACR管理的OCI製品進行加簽,然後在叢集中安裝配置Ratify進行驗簽,以確保叢集中部署的都是有合法簽名的鏡像,不符合簽名的鏡像將會被攔截以提升系統安全性。

相關概念

notation-alibabacloud-secret-manager:基於Notation社區標準的外掛程式規範,通過阿里雲Key Management Service中管理的金鑰組ACR管理的鏡像進行簽名。

Ratify:是可以運行在Kubernetes叢集中的二進位可執行驗證引擎,用於對雲原生製品中鏡像簽名、SBOM等安全中繼資料進行注入驗證,並只允許在叢集中部署滿足策略要求的製品。

前提條件

步驟一:擷取通過KMS執行個體管理的密鑰

Key Management Service是一站式的密鑰管理和資料加密服務平台,提供簡單、可靠、安全、合規的資料加密保護和憑據管理能力。通過KMS執行個體建立並管理的密鑰、以及匯入到KMS執行個體中管理的自簽密鑰都可以通過notation-alibabacloud-secret-manager外掛程式進行加簽。

使用KMS建立並管理的密鑰

  1. 登入Key Management Service控制台,在頂部功能表列選擇地區後,在左側導覽列單擊资源 > 密钥管理

  2. 密钥管理頁面,單擊用户主密钥頁簽,实例ID選擇軟體密鑰管理執行個體,單擊创建密钥

  3. 创建密钥面板,完成配置項設定,然後單擊確定

    以下為主要配置項說明,更多資訊,請參見軟體密鑰

    配置項

    說明

    樣本

    KMS執行個體

    選擇要建立密鑰的KMS執行個體。

    kst-l***

    密钥类型

    選擇非對稱金鑰。

    非對稱金鑰

    密钥规格

    非對稱金鑰規格如下:

    • RSA_2048

    • RSA_3072

    • EC_P256

    RSA-2048

    密钥用途

    選擇SIGN/VERIFY,用於產生和驗證數位簽章。

    SIGN/VERIFY

    密钥别名

    密鑰的別名標識符。支援英文字母、數字、底線(_)、短劃線(-)和正斜線(/)。

    test-key

    標籤

    密鑰的標籤,方便您對密鑰進行分類管理。每個標籤由一個索引值對(Key:Value)組成,包含標籤鍵(Key)、標籤值(Value)。

  4. 建立存取點 。

    1. 在左側導覽列單擊應用接入 > 存取點

    2. 应用接入頁簽,單擊创建应用接入点,在创建应用接入点面板完成各項配置。

      配置項

      說明

      创建模式

      選擇快速创建

      作用域(KMS实例)

      選擇應用要訪問的KMS執行個體。

      应用接入点名称

      自訂應用存取點的名稱。

      认证方式

      預設為ClientKey,不支援修改。

      默认权限策略

      預設為key/*secret/*,不支援修改。即應用可以訪問指定KMS執行個體中的所有密鑰和憑據。

    3. 單擊確定,瀏覽器會自動下載ClientKey。

      ClientKey包含應用身份憑證內容(ClientKeyContent)憑證口令(ClientKeyPassword)應用身份憑證內容(ClientKeyContent)檔案名稱預設為clientKey_****.json憑證口令(ClientKeyPassword)檔案名稱預設為clientKey_****_Password.txt

使用匯入到KMS中管理的自簽密鑰

除了使用KMS建立管理的密鑰進行加簽,您還可以使用自簽密鑰並將密鑰材料匯入KMS執行個體中管理。本文以OpenSSL產生私密金鑰和認證為例進行說明。

1、建立非對稱金鑰

  1. 登入Key Management Service控制台,在頂部功能表列選擇地區後,在左側導覽列單擊资源 > 密钥管理

  2. 密钥管理頁面,單擊用户主密钥頁簽,实例ID選擇軟體密鑰管理執行個體,單擊创建密钥

  3. 创建密钥面板,完成配置項設定,然後單擊確定

    以下為主要配置項說明,更多資訊,請參見步驟一:建立非對稱金鑰

    配置項

    說明

    樣本

    密钥类型

    選擇非對稱金鑰。

    非對稱金鑰

    密钥规格

    非對稱金鑰規格如下:

    • RSA_2048

    • RSA_3072

    • EC_P256

    RSA-2048

    密钥用途

    選擇SIGN/VERIFY,用於產生和驗證數位簽章。

    SIGN/VERIFY

    密钥别名

    密鑰的別名標識符。支援英文字母、數字、底線(_)、短劃線(-)和正斜線(/)。

    test-key

    標籤

    密鑰的標籤,方便您對密鑰進行分類管理。每個標籤由一個索引值對(Key:Value)組成,包含標籤鍵(Key)、標籤值(Value)。

2、下載封裝公開金鑰和匯入令牌

匯入密鑰材料的參數包含封裝公開金鑰和匯入令牌,封裝公開金鑰用於加密金鑰材料,在匯入處理程序中保護您的密鑰材料,匯入令牌用於匯入密鑰材料。

  1. 定位到目標密鑰,單擊操作列的详情,在密鑰詳情頁面的密钥材料地區,單擊获取导入参数

  2. 获取导入密钥材料的参数對話方塊,選擇公钥类型加密算法後,單擊下一步

    密鑰管理類型

    KMS密鑰的規格

    封裝公開金鑰類型

    密碼編譯演算法

    軟體密鑰

    • RSA_2048

    • RSA_3072

    • EC_P256

    • EC_P256K

    RSA_2048

    RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD

    RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD:具體加密過程,請參見樣本:使用OPENSSL產生RSA_2048演算法的密鑰材料

  3. 下載封裝公開金鑰以及匯入令牌,並妥善儲存。

    • 公钥格式

      • der格式:下載後檔案名稱預設為publickey_******.bin。

      • pem格式:下載後檔案名稱預設為publickey_******.pem。

    • 导入令牌:下載後檔案名稱預設為token_******.txt。

      重要
      • 匯入令牌的有效期間為24小時,在有效期間內可以重複使用,失效後需要擷取新的匯入令牌和公開金鑰。

      • 封裝公開金鑰和匯入令牌必須配套使用。即不允許下載兩次封裝公開金鑰和匯入令牌,使用其中一個的封裝公開金鑰,另一個的匯入令牌。

3、使用封裝公開金鑰加密密鑰材料

請在您的系統內容中產生並加密金鑰材料,過程中會使用到以下密鑰,具體說明請參見下表。

密鑰

用途

提供者

標記說明

目標非對稱金鑰TAK(Target Asymmetric Key)

待匯入的目標非對稱金鑰。

您的系統內容或者工具(如線下的密鑰管理設施KMI,或者線下的硬體安全模組HSM)。

  • TAKpub:公開金鑰部分

  • TAKpriv:私密金鑰部分

加密金鑰IWK(Import Wrapping Key)

用於匯入TAK的加密金鑰。

阿里雲KMS。

  • IWKpub:公開金鑰部分

    說明

    即您在Key Management Service控制台下載的封裝公開金鑰。

  • IWKpriv:私密金鑰部分

瞬時密鑰ESK(Ephemeral Symmetric Key)

一個瞬時存在的對稱金鑰,用於直接加密TAKpriv。

源環境的系統或者工具,在完成對TAK的匯出操作後請立即銷毀。

不涉及

  1. 建立一個目標非對稱金鑰私密金鑰(TAKpriv),密鑰規格與您建立非對稱金鑰時選擇的密鑰規格一致。如果您已有目標非對稱金鑰私密金鑰(TAKpriv),請跳過本步驟。

    說明

    TAKpriv格式需要遵循:RSA私密金鑰根據RFC3447進行編碼,ECC私密金鑰根據RFC5915進行編碼,然後根據RFC5208封裝為PKCS#8格式。

  2. 建立一個瞬時密鑰(ESK)。

  3. 使用加密金鑰公開金鑰(IWKpub)來加密瞬時密鑰(ESK),得到瞬時密鑰密文(Cipher(ESK))。

  4. 使用瞬時密鑰(ESK)加密目標非對稱金鑰私密金鑰(TAKpriv),得到目標非對稱金鑰的私密金鑰密文(Cipher(TAKpriv))。

  5. 按照Cipher(ESK)||Cipher(TAKpriv)格式組裝結果資料,得到加密後的密鑰材料。

樣本:使用OPENSSL產生RSA_2048演算法的密鑰材料

  1. 建立一個RSA_2048演算法的目標非對稱金鑰私密金鑰,並且將私密金鑰轉為PKCS#8格式。

    openssl genrsa -out TakPrivPkcs1.pem 2048
    openssl pkcs8 -topk8 -inform PEM -in TakPrivPkcs1.pem -outform der -nocrypt -out TakPrivPkcs8.bin
  2. 建立一個AES_256演算法的瞬時密鑰(ESK)。

    openssl rand -out EskAes256.bin 32
  3. 使用加密金鑰公開金鑰(IWKpub)加密瞬時密鑰(ESK),得到瞬時密鑰密文(Cipher(ESK))。加密時採用RSAES OAEP標準加密,其中MGF1和雜湊演算法為SHA256。

    openssl pkeyutl -encrypt -pubin -inkey PublicKey.pem  -in EskAes256.bin  -pkeyopt \
    rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 -pkeyopt rsa_mgf1_md:sha256 -out \
    CipherEsk.bin
    說明

    請將PublicKey.pem替換為您在Key Management Service控制台下載的公開金鑰檔案的名稱。

  4. 使用瞬時密鑰(ESK)加密目標非對稱金鑰私密金鑰(TAKpriv),產生目標非對稱金鑰的私密金鑰密文(Cipher(TAKpriv))。加密模式為ECB,填充模式為PKCS#7 Padding。

    xxd -l 32  -c 32 -ps EskAes256.bin | xargs -I {} openssl enc  -aes-256-ecb -e  -K {} -in \ 
    TakPrivPkcs8.bin -nosalt -out CipherTakPriv.bin
  5. 按照Cipher(ESK) || Cipher(TAKpriv)格式組裝結果資料,再進行Base64編碼。

    cat CipherEsk.bin CipherTakPriv.bin > EncryptedKeyMaterial.bin
    openssl enc -e -base64 -A -in EncryptedKeyMaterial.bin -out EncryptedKeyMaterial_base64.txt
    說明

    EncryptedKeyMaterial_base64.txt即為可匯入KMS的密鑰材料檔案。

4、匯入密鑰材料

在密鑰詳情頁面,單擊导入密钥材料,在导入打包后的密钥材料對話方塊,完成各項配置後,單擊確定

匯入密鑰材料成功後,密鑰狀態從待导入更新為启用中

kms.png

  • 打包后的密钥材料:上傳步驟3、使用封裝公開金鑰加密密鑰材料中產生的密鑰材料檔案。

  • 导入令牌:上傳步驟3、使用封裝公開金鑰加密密鑰材料中下載的令牌檔案。

  • 密钥材料过期时间:支援選擇永不过期,也可以自訂到期時間。

    重要

    如果設定了密鑰材料到期時間,在設定的時間點之後KMS會刪除已到期的密鑰材料,您將無法使用該密鑰材料。如需恢複使用,可以為密鑰再次匯入相同的密鑰材料。

步驟二:安裝notation-alibabacloud-secret-manager外掛程式

notation-alibabacloud-secret-manager外掛程式基於Notation社區標準的外掛程式規範,通過阿里雲KMS中管理的金鑰組ACR管理的鏡像進行簽名。

說明

notation-alibabacloud-secret-manager外掛程式運行環境和KMS執行個體在同一個地區,且屬於同一個VPC。多VPC訪問,請參見同地區多VPC訪問KMS執行個體

  1. 根據不同系統版本選擇下載。更多版本下載請參見notation-alibabacloud-secret-manager

    • Linux_arm64

      wget  https://notation-alibabacloud-secret-manager.oss-cn-hangzhou.aliyuncs.com/dist/v0.1.2/notation-alibabacloud-secret-manager_Linux_arm64.tar.gz      
    • Linux_X86_64

      wget https://notation-alibabacloud-secret-manager.oss-cn-hangzhou.aliyuncs.com/dist/v0.1.2/notation-alibabacloud-secret-manager_Linux_x86_64.tar.gz
  2. 使用以下命令建立組件目錄。

    mkdir -p  /root/.config/notation/plugins/alibabacloud.secretmanager.plugin/
  3. 使用以下命令解壓組件tar包到指定目錄。

    tar -xvf notation-alibabacloud-secret-manager_Linux_<版本>.tar.gz  -C /root/.config/notation/plugins/alibabacloud.secretmanager.plugin/
  4. 配置環境變數。

    export ALIBABA_CLOUD_ACCESS_KEY_ID=your_access_key_id
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=your_access_key_secret
    export ALIBABA_CLOUD_KMS_INSTANCE_ENDPOINT=your_kms_endpoint
    export ALIBABA_CLOUD_KMS_CLIENTKEY_FILEPATH=your_clientkey_filepath
    export ALIBABA_CLOUD_KMS_PASSWORD=your_password
    export ALIBABA_CLOUD_KMS_CA_FILEPATH=your_ca_filepath
    說明

    notation-alibabacloud-secret-manager外掛程式支援多種Credential配置方式。更多的配置方式請參考credentials

    環境變數

    描述

    樣本

    ALIBABA_CLOUD_ACCESS_KEY_ID

    阿里雲帳號Access Key ID。

    XXXXXX

    ALIBABA_CLOUD_ACCESS_KEY_SECRET

    阿里雲帳號Access Secret Key。

    XXXXXX

    ALIBABA_CLOUD_KMS_INSTANCE_ENDPOINT

    指定KMS專屬執行個體的VPC Endpoint。

    kst-hzxxxxxxxxxx.cryptoservice.kms.aliyuncs.com

    ALIBABA_CLOUD_KMS_CLIENTKEY_FILEPATH

    訪問指定KMS專屬執行個體應用存取點(AAP)的ClientKey憑據檔案對應的本地檔案路徑。使用建立存取點的步驟c中瀏覽器下載的clientKey_KAAP.****.json內容,建立一個檔案(例如/root/clientkey)。

    /root/clientkey

    ALIBABA_CLOUD_KMS_PASSWORD

    指定KMS專屬執行個體應用存取點(AAP)的憑證口令。使用建立存取點的步驟c中瀏覽器下載的clientKey_KAAP.594c78e6-7244-4187-XXX-8d59dca2ceb4_Password.txt內容。

    XXXXXX

    ALIBABA_CLOUD_KMS_CA_FILEPATH

    指定KMS專屬執行個體CA認證對應的本地檔案路徑。通過步驟五:擷取KMS執行個體的CA認證,將瀏覽器下載的PrivateKmsCA_xxxxx.pem內容,建立一個檔案。

    /root/privatekmsca

步驟三:準備鏡像並簽名

1、在ACR中準備鏡像

  1. 使用企業版執行個體構建鏡像或在本地構建和推送多架構鏡像到Container Registry

    說明

    ACR企業版執行個體支援OCI v1.1.0版本的鏡像和分發規範,可使用ORAS等用戶端工具管理和分發非容器鏡像內容的OCI製品,請參見使用OCI v1.1.0規範管理和關聯容器鏡像及其衍生製品

  2. 配置專用網路或公網的存取控制,用於串連企業版執行個體。請參見網路存取控制

  3. 擷取登入ACR企業版執行個體的密碼。若您忘記或遺失密碼,您可以通過配置訪問憑證的方式重設密碼。具體操作,請參見配置訪問憑證

2、使用Notation基於KMS中管理的密鑰為ACR鏡像簽名

您可以使用notation-alibabacloud-secret-manager外掛程式基於KMS憑據管家中的私密金鑰和認證,對ACR中的指定鏡像加簽。

通過notation-alibabacloud-secret-manager外掛程式使用KMS執行個體SDK(Go),您需要滿足以下條件並自訂環境變數。

  1. 使用以下命令登入鏡像倉庫。

    ./notation login --username=tsh_ram@11380257155*** test-for-doc-registry.cn-hangzhou.cr.aliyuncs.com
  2. 使用以下命令對指定鏡像加簽並產生認證。<dirPath>產生認證的存放路徑如(/root)

    ./notation sign  --id <keyId> --plugin alibabacloud.secretmanager.plugin test-for-doc-registry.cn-hangzhou.cr.aliyuncs.com/test/nginx:2.11 --plugin-config output_cert_dir=<dirPath>

    預期輸出:

    Successfully signed test-for-doc-registry.cn-hangzhou.cr.aliyuncs.com/test/nginx@sha256:f57e1908e63538ad5159fa99443d0492d23b9d34ba7******
  3. 您可以通過以下Notation CLI進行製品簽名。

    notation sign --id <keyId> --plugin alibabacloud.secretmanager.plugin  <myRegistry>/<myRepo>@<digest> --plugin-config output_cert_dir=<dirPath>

    參數

    說明

    id

    指定的阿里雲KMS執行個體ID。

    plugin-config

    外掛程式自訂參數。支援如下配置:

    • output_cert_dir:簽名時,使用該參數基於指定的KMS密鑰簽發對應的X.509驗簽認證,並以檔案形式輸出到參數指定檔案目錄下。

    • ca_certs:使用自簽並匯入KMS執行個體的密鑰加簽時,如果您同時使用密鑰簽發了X.509認證,可以使用該參數指定自簽認證對應的檔案路徑。

步驟四:使用Ratify和Gatekeeper進行驗簽

1、安裝Ratify和Gatekeeper

  1. 開啟基於Gatekeeper的策略治理,請參見啟用安全性原則管理

  2. 安裝Ratify。

    1. 建立命名空間Ratify。

      kubectl create ns ratify
    2. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

    3. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

    4. Helm頁面,單擊建立,參考如下資訊完成基本資料配置,然後選中ratify,單擊下一步

      參數

      樣本值

      應用程式名稱

      ratify

      命名空間

      選擇ratify。

      來源

      預設為應用市場

      Chart

      • 應用情境:選擇全部

      • 支援架構:選擇amd64

      • 搜尋方塊:搜尋ratify。

    5. 參數配置頁面,選擇Chart 版本,如需通過RRSA拉取鏡像,請參考配置樣本修改。然後單擊確定

      參數

      說明

      預設值

      配置樣本

      ServiceAccount.create

      建立Ratify的專屬ServiceAccount。取值:

      • true(預設值):會自動建立名為ratify-admin的ServiceAccount。

      • false:不會自動建立,如需使用RRSA拉取鏡像,則需要提前建立ServiceAccount。

      true

      保持預設

      ServiceAccount.name

      Ratify Service Account的自訂名稱。

      ratify-admin

      保持預設

      ServiceAccount.annotations

      自訂ServiceAccount的Annotations。

      {}

      為其添加Annotation pod-identity.alibabacloud.com/role-name: <Your-RRSA-role>配置以實現自動注入功能。

      說明

      其中<Your-RRSA-role>替換為您使用的RRSA角色。

      oras.authProviders.k8secretsEnabled

      開啟Kubernetes Secrets Provider用於和鏡像倉庫認證。

      false

      保持預設

      說明

      關於ORAS相關配置請參見ORAS Store配置樣本

      oras.authProviders.alibabacloudAcrBasicEnabled

      開啟阿里雲ACR Provider用於ACR鏡像倉庫執行個體的RRSA認證。

      false

      true

      oras.cache.enabled

      ListReferrersGetSubjectDescriptor啟用ORAS儲存緩衝。

      重要

      啟用後,基於TTL的緩衝可能會導致緩衝與資料來源之間不一致,如果需要強一致性,請禁用此參數。

      true

      保持預設

      oras.cache.ttl

      設定ORAS Store中緩衝TTL。

      10

      保持預設

      alibabacloudAcrConfig.defaultInstanceId

      目標製品在ACR倉庫中的預設執行個體ID。

      ``

      必選項。

      需要配置已建立的ACR企業版倉庫執行個體ID。

      alibabacloudAcrConfig.acrInstancesConfig

      當您需要從不同的阿里雲ACR倉庫執行個體中拉取鏡像時,不同的執行個體名稱instanceNameinstanceId需要分別定義在列表中。

      []

      需設定為如下內容,用於串連阿里雲ACR私人倉庫。

      image

      upgradeCRDs.enabled

      開啟或關閉 Ratify CRD升級pre-install chart hooks外掛程式。

      true

      如果不需要升級Ratify CRD的情況下,可以設定為false

      說明

      設定為true時會觸發pre-install hook,可能導致安裝逾時。

      featureFlags.RATIFY_CERT_ROTATION

      開啟或關閉TLS認證輪轉,通過該配置可以使Ratify自動產生並輪轉認證。

      false

      需設定為true,使Ratify後端自動產生並輪轉認證。

      notationCert

      已棄用

      請改用 notationCerts指定Notation的驗證認證隊列。指定的認證和憑證鏈結公開金鑰用於建立Notation驗證器使用的內建certstore。

      保持預設

      notationCerts

      用於配置Notation驗證器中內建certstore的密鑰憑證和憑證鏈結隊列。

      ``

      需要按需填寫Notation外掛程式加簽過程中返回的KMS驗簽認證,例如:

      image

  3. 在左側導覽列選擇安全管理 > 策略管理,單擊我的策略,查看RatifyVerification策略已存在。image

2、配置RRSA以拉取ACR私人鏡像簽名資訊

Ratify支援通過RRSA方式拉取阿里雲ACR私人倉庫的簽名資料。更多資訊,請參見通過RRSA配置ServiceAccount的RAM許可權實現Pod許可權隔離

  1. 在指定叢集的組件管理頁面,安裝ack-pod-identity-webhook組件

  2. 建立指定RAM角色ratify-role,配置其可信實體類型為身份供應商,並完成相關限制條件欄位的配置,您也可以使用ack-ram-toolCLI工具完成自動化配置。

    其中oidc:sub值中的<namespace><service_account>需使用安裝ratify組件的命名空間和ServiceAccount。
    {
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "oidc:aud": "sts.aliyuncs.com",
          "oidc:iss": "<oidc_issuer_url>",
          "oidc:sub": "system:serviceaccount:<namespace>:<service_account>"
        }
      },
      "Effect": "Allow",
      "Principal": {
        "Federated": [
          "<oidc_provider_arn>"
        ]
      }
    }
  3. 為上述RAM角色ratify-role授予ACR的許可權AliyunContainerRegistryFullAccess。

  4. 在部署Ratify時建立ServiceAccount,同時給該ServiceAccount和對應部署Ratify的命名空間設定如下所示的Annotation。部署Ratify後,可以看到Ratify的Pod執行個體模板中的Env是被注入了指定的ALIBABA_CLOUD_ROLE_ARNALIBABA_CLOUD_OIDC_PROVIDER_ARNALIBABA_CLOUD_OIDC_TOKEN_FILE的環境變數。

    說明

    如果您已提前建立ServiceAccount,請為其添加Annotationpod-identity.alibabacloud.com/role-name: ratify-role

    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ratify  # 指定Namespace的名稱。
      labels:
        pod-identity.alibabacloud.com/injection: 'on'
    
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ratify-admin    # 指定ServiceAccount的名稱。
      namespace: ratify     # 指定Namespace的名稱。
      annotations:
        pod-identity.alibabacloud.com/role-name: ratify-role #以上建立的RAM角色名稱
    
    ---

步驟五:驗證加簽和驗簽已生效

您可以在ACK叢集中使用指定鏡像部署應用,以驗證鏡像的加簽驗簽功能是否生效。

  • 當部署有合法簽名的鏡像時,可以驗證工作負載已成功部署在目的地組群。

  • 當部署使用了未包含簽名鏡像的工作負載時,可以查看Ratify是否成功攔截了此次部署,通過kubectl查看工作負載狀態可以擷取攔截資訊,同時可以在Ratify Pod日誌中查看更多的驗簽日誌。

    kubectl get delpoy ${unsigned_deploy_name} -n${namespace} -oyaml  # 輸入應用程式名稱以及所在的命名空間

    驗簽日誌如下所示:

    image

更多Ratify配置資訊說明

Ratify提供多種內建和外置的Verifier驗證器外掛程式,用於指定校正器處理的製品類型;您可以根據不同的驗簽需求自訂對應的KeyManagementProvider(KMP)執行個體,定義不同情境下Verifier驗簽使用的密鑰或認證。Ratify還提供了Store用於發現和擷取OCI v1.1規範的subject欄位中關聯類別型的中繼資料,相關配置樣本如下:

Notation Verifier配置樣本

您可以在Verifier校正器中定義名稱nameartifactType 欄位指定製品類型。Verifier校正器支援叢集或命名空間兩種維度(使用NamespacedVerifier類型)的定義,更多Verifier資訊,請參見Ratify官方文檔

使用預設配置安裝Ratify組件後,叢集會自動建立如下的Notation Verifier執行個體, 您可以根據實際使用需求配置具體的trustPolicyDoc策略。配置樣本如下:

展開查看Notation Verifier配置樣本

apiVersion: config.ratify.deislabs.io/v1beta1
kind: Verifier
metadata:
  name: verifier-notation
spec:
  artifactTypes: application/vnd.cncf.notary.signature
  name: notation
  parameters:
    trustPolicyDoc:
      trustPolicies:
      - name: default
        registryScopes:
        - '*'
        signatureVerification:
          level: strict
        trustStores:
        - ca:certs
        trustedIdentities:
        - '*'
      version: "1.0"
    verificationCertStores:
      certs:
      - ratify-notation-inline-cert
  version: 1.0.0
status:
  issuccess: true

KMP配置樣本

您可以根據不同的驗簽需求自訂對應的KeyManagementProvider執行個體,並在CR中定義公開金鑰或X.509認證。Notation和Cosign等驗證器會在簽名驗證過程中關聯對應的KMP執行個體資源。KMP支援叢集或命名空間兩種維度定義,更多KMP資訊,請參見Ratify官方文檔。配置樣本如下:

展開查看KMP配置樣本

apiVersion: config.ratify.deislabs.io/v1beta1
kind: KeyManagementProvider
metadata:
  name: ratify-notation-inline-cert
spec:
  parameters:
    contentType: certificate
    value: |
      -----BEGIN CERTIFICATE-----
      XXXXXX
      XXXXXX
      XXXXXX
      -----END CERTIFICATE-----
  type: inline

ORAS Store配置樣本

您可以在安裝Ratify組件後,在預設建立的ORAS Store執行個體中進行authProvider配置,用於串連阿里雲ACR私人倉庫。配置樣本如下:

展開查看ORAS Store配置樣本

apiVersion: config.ratify.deislabs.io/v1beta1
kind: Store
metadata:
  name: store-oras
spec:
  name: oras
  parameters:
    authProvider:
      acrInstancesConfig:
      - instanceName: name1
        instanceId: cri-aaaaaaaaaaaa
      - instanceName: name2
        instanceId: cri-bbbbbbbbbbbb
      defaultInstanceId: cri-ccccccccc
      name: alibabacloudAcrBasic

參數名稱

是否必選

說明

name

阿里雲ACR的authProvider.name固定為alibabacloudAcrBasic

acrInstancesConfig

支援配置多個ACR倉庫執行個體和執行個體ID的映射關係,Ratify會根據應用負載中指定的鏡像倉庫名稱擷取對應的執行個體ID。

defaultInstanceId

指定預設倉庫執行個體ID。

說明

如果無法通過acrInstancesConfig擷取執行個體ID,Ratify會使用defaultInstanceId欄位中指定的預設倉庫執行個體ID,然後基於環境中配置的阿里雲Credentials擷取用於登入ACR倉庫執行個體的臨時帳號和密碼