镜像安全

2024-11-06 02:18:13

容器镜像安全扫描

容器镜像服务CRS支持所有基于Linux的容器镜像安全扫描,识别镜像中所有已知的漏洞信息,并对漏洞信息进行风险评估。本文介绍如何指定镜像版本扫描和指定目标命名空间的容器镜像扫描,并获取镜像漏洞信息。

概述

在云原生平台中,容器镜像安全是云原生应用交付安全的重要一环,为了保障部署的服务安全性,防止服务因镜像漏洞被恶意攻击, 容器镜像服务CRS提供了对镜像进行安全扫描功能,不仅提升了容器整体的安全性,保护服务的安全。您可以在容器镜像服务页面中触发扫描,安全扫描的时长主要取决于镜像的大小,一般情况下扫描一个镜像可以在三分钟之内完成。当前镜像安全扫描服务基于开源Trivy 方案,相关漏洞信息来自官方漏洞库,并定期保持同步。

操作步骤

1.       进入 容器镜像服务控制台。

2.       点击已开通实例名称。

3.       左侧导航栏点击 容器镜像 – 镜像仓库。

4.       在镜像仓库页面点击目标仓库名,进入镜像版本列表页面。

5.       点击需要扫描的镜像版本右侧的 安全扫描 按钮。

6.       等待扫描完成后,可在 漏洞 栏查看扫描结果。

7.       点击镜像版本 Digest 名称,可在镜像详情页中查看漏洞的具体信息。

镜像加签验签

概述

镜像签名功能保障镜像来源安全可靠,避免中间人攻击和非法镜像的更新与运行。CRS支持为命名空间的镜像自动加签,每次推送容器镜像后都会匹配加签规则自动加签,保障您的容器镜像内容可信。

镜像签名步骤

为命名空间下的镜像设置自动加签的步骤如下:

1.       登录容器镜像服务控制台;

2.       在顶部菜单栏,选择所需资源池;

3.       在实例页面中选择容器镜像仓库实例;

4.       在企业版实例管理页面的左侧菜单上选择“镜像分发”(后续应迁移至“镜像安全”)>“镜像签名”,点击左上角的“创建”按钮;

5.       在弹出的对话框,填写镜像加签规则的,然后点击“确定”按钮,完成创建,界面各项参数说明如下表;

6.       创建完毕的规则会展示在“镜像签名”的列表中,可对签名规则进行编辑,如更换签名秘钥等;

参数

说明

命名空间

必填,选择需要自动加签的命名空间名称

使用默认私钥

加签时是否使用默认的私钥,勾选则表明使用默认私钥加签,若不勾选则表明使用自定义私钥,则需要往下录入自定义私钥的信息

私钥

如果上述“使用默认私钥”不勾选,则必须在此框填入自定义私钥的信息,可以将私钥直接贴入,或者从“文件导入”,私钥目前只支持长度位数是2048,格式为PKC8的RSA秘钥

密码

如果创建RSA秘钥对时有添加密码,则需要再此处填上,否则会影响加签执行

注意:

1.       镜像加签不会影响镜像的常规使用,更不会影响镜像中原有的能力及业务功能。

2.       单个命名空间只能创建一个加签规则。

3.       如果是使用自定秘钥,密钥对需要自行保存维护好,使用跟秘钥对应的公钥方可验签成功

镜像签名验证步骤

镜像签名验证(简称:验签)主要在容器镜像使用方执行,在CCSE的插件市场中安装名为“cube-sign”的验签插件即可让集群具备验签能力,凡是按提供的公钥所对应的秘钥加签过的镜像,方可验签通过。

注意:

•          安装本插件前,请先安装cert-manager

•          安装插件时需要慎重配置,否则容易影响集群中其他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。

PS:特别地,处于kube-system命名空间下的所有镜像均不进行验签操作。同理使用其他第三方的开源镜像时,为了能绕过验签逻辑,需要在安装验签插件时统一为这些镜像加上白名单

当验签不通过时,Pod的容器事件中可观察到如下的事件提示

镜像版本不可变

概述

容器镜像服务CRS 支持开启镜像版本不可变功能,保证相同版本的镜像仅被成功推送一次,可有效避免因误操作引起的版本覆盖问题。现支持命名空间级别的配置,并可自定义需要开启镜像版本不可变功能的镜像仓库和版本。

操作步骤

创建版本不可变规则

1.       进入 容器镜像服务控制台。

2.       点击已开通实例名称。

3.       左侧导航栏点击 容器镜像 – 版本不可变。

4.       点击页面中的 添加规则 按钮。

5.       选择命名空间,并填写规则生效的仓库和Tag。仓库和Tag的匹配规则如下:

参数

说明

key

精确匹配名称为key的仓库或Tag

key*

匹配前缀为key的仓库或Tag

**

匹配所有仓库或Tag

{key1,key2,key3*}

匹配多个仓库或Tag

6.       点击 确定 完成规则创建。

管理版本不可变规则

1.       进入 容器镜像服务控制台。

2.       点击已开通实例名称。

3.       左侧导航栏点击 容器镜像 – 版本不可变,可查看已有的版本不可变规则列表。

4.       点击 编辑 按钮可以调整已有的版本不可变规则内容。

5.       点击 禁用 按钮可以禁用已有的版本不可变规则。

6.       点击 删除 按钮可以删除已有的版本不可变规则。

操作审计

概述

操作审计页面记录了用户在容器镜像服务控制台内所进行的操作,可以帮助用户全面地了解历史操作行为。

查看操作审计记录

1.       进入 容器镜像服务控制台。

2.       点击已开通的企业版实例名称。

3.       左侧导航栏点击 实例管理 - 操作审计,即可看到操作审计记录。

操作对象筛选

1.       操作审计 页面可以对操作对象进行筛选。

2.       在 操作审计 页面点击操作对象筛选框。

3.       在筛选框中点击需要筛选的操作对象。

4.       操作审计 页面将自动筛选对应操作对象的操作审计记录。

4.1.10.1.4操作时间筛选

1.       操作审计 页面可以对操作时间进行筛选。

2.       在 操作审计 页面点击时间筛选框。

3.       在筛选框中选择需要筛选的时间范围,并点击确定。

4.       操作审计 页面将自动筛选对应时间范围内的操作审计记录。

4.1.10.1.5关键字筛选

1.       操作审计 页面可以对操作审计记录中的关键字进行筛选。

2.       在 操作审计 页面右上角的关键字输入框中输入需要筛选的关键字。

3.       点击关键字输入框右侧查询按钮进行筛选。

4.       操作审计 页面将自动筛选包含关键字的操作审计记录。关键字筛选的标准为:操作审计记录的操作用户、命名空间名称、仓库名称、操作行为和来源IP这些字段中至少有一个字段包含对应的关键字。