# 容器镜像签名验证
#### 插件简介
容器镜像签名验证插件（原名swr-cosign）提供镜像验签功能，可以对镜像文件进行数字签名验证，以确保镜像文件的完整性和真实性，有效地防止软件被篡改或植入恶意代码，保障用户的安全。
#### 约束与限制
- 使用镜像验签功能依赖容器镜像仓库企业版，请先创建一个企业版仓库。
 
 #### 安装插件
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 单击左侧导航栏的"插件中心"，在右侧找到**容器镜像签名验证**，单击"安装"。
3. 在安装插件页面，根据需求选择"规格配置"。 
   - 选择"系统预置规格"时，您可根据集群规模选择"小规格"或"大规格"，系统会根据不同的预置规格配置插件的实例数及资源配额，具体配置值请以控制台显示为准。 "小规格"为单实例部署，适用于并发下载不同镜像数量小于50的集群；"大规格"为双实例部署，具有高可用能力，适用于并发下载不同镜像数量小于300的集群。
     
   
   - 选择"自定义规格"时，您可根据需求调整插件实例数和资源配额，
   
   
   
   
4. 设置插件支持的"参数配置"。 
   表1swr-cosign插件参数配置 
   | 参数    | 参数说明                                                                                 |
   |:---|:---|
   | KMS密钥 | 选择一个密钥，仅支持 EC_P256、EC_P384、SM2 类型的密钥。 您可以前往密钥管理服务新增密钥。 |
   | 验签镜像  | 验签镜像地址通过正则表达式进行匹配，例如填写docker.io/\*\*表示对docker.io镜像仓库的镜像进行验签。如需对所有镜像验签，请填写\*\*。      |
      
   
   
5. 单击"安装"。 
   待插件安装完成后，选择对应的集群，然后单击左侧导航栏的"插件中心"，可筛选"已安装插件"查看相应的插件。
   
   
 
#### 组件说明
表2swr-cosign组件 
| 容器组件     | 说明                                    | 资源类型      |
|:---|:---|:---|
| swr-cosign | swr-cosign负责对镜像文件进行数字签名验证，以保证镜像文件未被篡改。 | Deployment |
   
#### 使用说明
1. 参考[安装插件]中的步骤，在集群中安装插件，并设置KMS密钥和验签镜像地址。
2. 为需要标签的命名空间加上标签。
   
   1. 在集群控制台左侧导航栏单击"命名空间"。
   
   2. 找到需要验签的命名空间，单击操作列的"更多\>标签管理"。
   
   3. 新增一个标签，键值填写如下：
      - 键：policy.sigstore.dev/include
      
      - 值：true
       
   
   4. 单击"确定"。
   
   
   
   
3. 测试镜像验签功能是否生效。 
   1. 在集群控制台左侧导航栏单击"工作负载"。
   
   2. 单击右上角"创建工作负载"。
   
   3. 选择已添加标签的命名空间，并填写未经签名的镜像地址，其余参数请参考[创建无状态负载（Deployment）](https://support.huaweicloud.com/usermanual-cce/cce_10_0047.html)按需填写。
   
   4. 单击"创建工作负载"。
      未经签名的镜像将被拦截，提示如下：
      ```
      admission webhook "policy.sigstore.dev" denied the request: validation failed: failed policy: cip-key-secret-match: spec.template.spec.containers[0].image ...
      ```
      
   
   
   
   
4. 为镜像添加签名。 
   1. 登录SWR企业仓库，进入一个已有的仓库实例。
   
   2. 在左侧导航栏中单击"安全可信\>镜像签名"，创建一个签名规则。
      - 规则名称：为签名规则命名。
      
      - 组织：选择一个容器镜像组织。
      
      - 规则范围：
        - 镜像：选择需要签名的镜像。您也可以通过正则表达式匹配多个镜像。
        
        - 版本：选择镜像版本，若不填或填写\*\*则表示匹配该镜像的所有版本。
         
      
      - 签名方式：选择KMS方式。
      
      - 签名Key：选择一个KMS密钥，该密钥需要与安装插件时的密钥相同。
      
      - 触发模式：
        - 手动：创建完成签名规则后，需要手动执行规则来对镜像进行签名。
        
        - 事件触发+手动：可通过事件触发签名动作，也可以手动执行规则对镜像进行签名。
         
      
      - 规则描述：填写规则的描述信息。
       
   
   3. 签名规则创建完成后，单击操作列的"执行"，对所选镜像进行签名。
   
   4. 签名成功后，在左侧导航栏中单击"制品仓库\>镜像仓库"，单击该镜像名称查看镜像详情。该镜像已存在签名附件。
   
   
   
   
5. 重新回到CCE控制台，使用该镜像创建工作负载，创建测试镜像是否可以成功创建。
 
#### 版本记录
表3swr-cosign插件版本记录 
| 插件版本    | 支持的集群版本                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 更新特性       |
|:---|:---|:---|
| 1.0.34 | v1.23 v1.25 v1.27 v1.28 v1.29 v1.30 v1.31 v1.32 | 支持v1.32集群   |
| 1.0.26   | v1.23 v1.25 v1.27 v1.28 v1.29 v1.30 v1.31                                                                  | 支持v1.31集群 |
| 1.0.2   | v1.23 v1.25 v1.27                                                                                                                                                                                                                                                                                                                                  | 支持v1.27集群    |
| 1.0.1    | v1.23 v1.25                                                                                                                                                                                                                                                                                                                                                                                                       | 支持镜像验签     |
   
