可操作容器扫描
- starboard 指令废弃于极狐GitLab 15.4。starboard 指令计划移除于极狐GitLab 16.0。
支持的架构
在极狐GitLab 16.10.0 及以后办呢、极狐GitLab 代理 Helm Chart 1.25.0 及以后版本中,此功能支持 linux/arm64
和 linux/amd64
。而早期版本仅支持 linux/amd64
。
启用可操作容器扫描
您可以使用可操作容器扫描来扫描集群中的容器镜像是否存在安全漏洞。在极狐GitLab 16.9 及以后版本的代理中,使用封装了 Trivy 的镜像来扫描镜像漏洞。而在 16.9 之前,禁用 Trivy 来扫描。
可操作容器扫描可以通过使用 agent config
或项目的扫描执行策略来配置。
agent config
和 scan execution policies
,优先使用 scan execution policy
的配置。通过代理配置启用
要通过代理配置扫描 Kubernetes 集群中的所有镜像,使用包含 CRON 表达式 的 cadence
字段将 container_scanning
配置块添加到您的代理配置中,该表达式决定运行扫描的时间。
container_scanning:
cadence: '0 0 * * *' # Daily at 00:00 (Kubernetes cluster time)
cadence
字段是必需的。极狐GitLab 支持 cadence 字段的以下类型的 CRON 语法:
- 每日在指定时间每小时执行一次的 cadence,例如:
0 18 * * *
- 每周在指定日期和指定时间执行一次的 cadence,例如:
0 13 * * 0
默认情况下,可操作容器扫描尝试扫描所有命名空间中的工作负载是否存在漏洞。您可以使用 namespaces
字段设置 vulnerability_report
块,该字段可用于限制扫描哪些命名空间。例如,如果您只想扫描 default
和 kube-system
命名空间,则可以使用以下配置:
container_scanning:
cadence: '0 0 * * *'
vulnerability_report:
namespaces:
- default
- kube-system
对于每一个目标命名空间,下面展示的所有工作负载资源中的镜像都会被扫描:
- Pod
- ReplicaSet
- ReplicationController
- StatefulSet
- DaemonSet
- CronJob
- Job
通过扫描执行策略启用
要通过扫描执行策略扫描 Kubernetes 集群中的所有镜像,我们可以使用扫描执行策略编辑器创建新的计划规则。
以下是在 Kubernetes 代理所附加的集群内启用可操作的容器扫描的策略示例:
- name: Enforce Container Scanning in cluster connected through my-gitlab-agent for default and kube-system namespaces
enabled: true
rules:
- type: schedule
cadence: '0 10 * * *'
agents:
<agent-name>:
namespaces:
- 'default'
- 'kube-system'
actions:
- scan: container_scanning
调度规则的关键是:
-
cadence
(必需):运行扫描时的 CRON 表达式。 -
agents:<agent-name>
(必需):用于扫描的代理名称。 -
agents:<agent-name>:namespaces
(可选):要扫描的 Kubernetes 命名空间。如果省略,则扫描所有命名空间。
您可以在扫描执行策略文档中查看完整架构。
多集群配置的 OCS 漏洞解决方案
要想确保使用 OCS 进行漏洞追踪的精确性,您应该创建一个单独的极狐GitLab 项目,而且为每一个项目启用 OCS。如果您有多个集群,请确保每个集群都使用一个项目。
OCS 通过将当前扫描发现的漏洞与之前检测到的漏洞进行对比,自动解决集群中已不存在的漏洞问题。对于极狐GitLab项目,若先前扫描记录的漏洞在当前扫描中未再出现,系统会将其标记为已解决。
如果在相同的项目中配置了多个集群,那么一个集群中的 OCS 扫描会解决另一个集群中已不存在的漏洞,从而导致错误的漏洞报告。
配置扫描器资源要求
默认情况下,扫描器 pod 的默认资源要求为:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 500m
memory: 500Mi
您可以使用 resource_requirements
字段进行自定义。
container_scanning:
resource_requirements:
requests:
cpu: 200m
memory: 200Mi
limits:
cpu: 700m
memory: 700Mi
scan execution policies
启用了 Operational Container Scanning
,则需要在代理配置文件中定义资源要求。为 Trivy k8s 封装器自定义仓库
在扫描期间,OCS 使用 Trivy K8s 封装器仓库 来部署 pods,该仓库将由 Trivy Kubernete 生成的漏洞报告发送到 OCS。
如果您集群的防火墙限制了您对于 Trivy k8s 封装器仓库的访问,您可以配置从自定义仓库拉取镜像。需要确保自定义的仓库能够在镜像 Trivy k8s 封装器仓库的时保持兼容性。
container_scanning:
trivy_k8s_wrapper_image:
repository: "your-custom-registry/your-image-path"
查看集群漏洞
在极狐GitLab中查看漏洞信息:
- 在左侧边栏中,选择 搜索或转到 并找到包含代理配置文件的项目。
- 选择 操作 > Kubernetes 集群。
- 选择 代理 选项卡。
- 选择一个代理查看集群漏洞。
您也可以在可操作漏洞中查看到该信息。
扫描私有镜像
- 引入于极狐 GitLab 16.4。
要扫描私有镜像,扫描器使用镜像拉取 secret(直接引用和来自服务账户)来拉取镜像。
限制
在极狐GitLab 16.9 及以后版本中:OCS
- 能够处理的 Trivy 报告上限为 100MB。而之前版本的限制为 10MB。
- 当极狐GitLab 运行在
fips
模式下时,此功能是 禁用的。
故障排查
Error running Trivy scan. Container terminated reason: OOMKilled
如果扫描所需的资源不足或被扫描的镜像过大,则 OCS 会出现 OOM 错误。要解决此问题,按照配置资源需求来增加可用的内存数量。