概述
镜像签名功能保障镜像来源安全可靠,避免中间人攻击和非法镜像的更新与运行。CRS支持为命名空间的镜像自动加签,每次推送容器镜像后都会匹配加签规则自动加签,保障您的容器镜像内容可信。
镜像签名步骤
为命名空间下的镜像设置自动加签的步骤如下:
1、登录容器镜像服务控制台;
2、在顶部菜单栏,选择所需资源池;
3、在实例页面中选择容器镜像仓库实例;
4、在企业版实例管理页面的左侧菜单上选择【分发管理>镜像签名】,点击左上角的“创建”按钮;
5、在弹出的对话框,填写镜像加签规则的,然后点击“确定”按钮,完成创建,界面各项参数说明如下表;创建完毕的规则会展示在“镜像签名”的列表中,可对签名规则进行编辑,如更换签名秘钥等。
参数 | 说明 |
---|---|
命名空间 | 必填,选择需要自动加签的命名空间名称 |
使用默认私钥 | 加签时是否使用默认的私钥,勾选则表明使用默认私钥加签,若不勾选则表明使用自定义私钥,则需要往下录入自定义私钥的信息 |
私钥 | 如果上述“使用默认私钥”不勾选,则必须在此框填入自定义私钥的信息,可以将私钥直接贴入,或者从“文件导入”。私钥目前只支持长度位数是2048,格式为PKC8的RSA秘钥 |
密码 | 如果创建RSA秘钥对时有添加密码,则需要再此处填上,否则会影响加签执行 |
注意1. 镜像加签不会影响镜像的常规使用,更不会影响镜像中原有的能力及业务功能。
2. 单个命名空间只能创建一个加签规则。
3. 如果是使用自定秘钥,密钥对需要自行保存维护好,使用跟秘钥对应的公钥方可验签成功。
镜像签名验证步骤
镜像签名验证(简称:验签)主要在容器镜像使用方执行,在云容器引擎的插件市场中安装名为“cube-sign”的验签插件即可让集群具备验签能力,凡是按提供的公钥所对应的秘钥加签过的镜像,方可验签通过。
注意1. 安装本插件前,请先安装`cert-manager`
2. 安装插件时需要慎重配置,否则容易影响集群中其他Pod的正常创建,从而影响到集群的功能
验签插件安装时需要按照实际状况提供相关配置信息方可让验签工作正常运行,让集群功能正常使用,配置参数说明如下:
参数 | 描述 | 默认值 |
---|---|---|
signconfig.useDefaultSignKey | 使用默认的签名 | true |
signconfig.customSignKey | 使用default signkey时,custom无需填写,填写时将公钥作 base64 -w0 编码 | ""(空字符串) |
signconfig.ignoreList | 忽略验签白名单集合,配置样例如下表 | [] |
allowList:
## 只对命名空间加白,多个命名空间用逗号“,”分割
- namespaces: "default,dev"
## 只对镜像加白,镜像名支持完整匹配,且支持通过星号(*)字符实现简单的通配符匹配,通配后文补充说明
- imagenamepattern: "nginx*"
## 对命名空间下的镜像名加白
- namespaces: "grey"
imagenamepattern: "busybox:1.28"
imagenamepattern详细说明:
-
当配置项值不包含星号(
*
)字符时,将按配置的值进行完整匹配。例如,nginx:v0.1.0
只会匹配nginx:v0.1.0
-
当通过星号(
*
)字符实现通配符匹配时,包含以下限制:- 星号(
*
)位于末尾时,匹配除正斜线(/
)外的任意字符。例如,a.com/nginx*
匹配a.com/nginx:v0.1.0
,但是不匹配a.com/nginx/test:v0.1.0
- 星号(
*
)不位于末尾时,匹配字母、数字、短横线(-
) 以及下划线(_
) 。例如,registry-vpc.cn-*.ctyun.com/pause:3.2
既匹配registry-vpc.cn-hangzhou.ctyun.com/pause:3.2
,也匹配registry-vpc.cn-beijing.ctyun.com/pause:3.2
- 星号(
注意特别地,处于kube-system命名空间下的所有镜像均不进行验签操作。同理使用其他第三方的开源镜像时,为了能绕过验签逻辑,需要在安装验签插件时统一为这些镜像加上白名单。
当验签不通过时,Pod的容器事件中可观察到如下的事件提示。