Artifact Analysis 提供两种映像扫描方式:自动扫描和按需扫描。本文档简要介绍了这两种扫描功能的功能详情。
Artifact Analysis 还提供元数据管理功能。如需详细了解如何将扫描和元数据存储空间结合使用,以端到端保护 CI/CD 流水线,请参阅Artifact Analysis 概览。
如需详细了解与扫描容器映像相关的费用,请参阅价格。
本概览假定您已熟悉如何在 Artifact Registry 或 Container Registry(已弃用) 中使用 Docker 代码库。
自动扫描
Artifact Analysis 会对 Artifact Registry 或 Container Registry(已弃用) 中的工件执行漏洞扫描。Artifact Analysis 还会识别依赖项和许可,以帮助您了解软件组成。
自动扫描包括两项主要任务:推送时扫描和持续分析。
推送式扫描
Artifact Analysis 会在新映像上传到 Artifact Registry 或 Container Registry 时扫描这些映像。此扫描可提取有关容器中软件包的信息。系统只会根据映像的摘要扫描映像一次。这意味着,添加或修改标记不会触发新的扫描。
Artifact Analysis 只会检测对安全漏洞进行公开监控的软件包中的漏洞。
完成映像扫描后,生成的漏洞结果是该映像的漏洞发生实例的集合。
Artifact Analysis 不会自动扫描现有映像。如需扫描现有映像,必须再次推送。
持续分析
Artifact Analysis 会为在您上传映像时发现的漏洞创建漏洞发生实例。初始扫描后,它会持续监控 Artifact Registry 和 Container Registry 中已扫描映像的元数据,以发现新漏洞。
Artifact Analysis 每天会多次从漏洞来源接收新的和更新后的漏洞信息。收到新漏洞数据时,Artifact Analysis 会更新已扫描映像的元数据,使其保持最新状态。Artifact Analysis 会更新现有漏洞发生实例,为新备注创建新的漏洞发生实例,并删除不再有效的漏洞发生实例。
Artifact Analysis 只会更新过去 30 天内推送或拉取的映像的元数据。Artifact Analysis 会归档超过 30 天的元数据。如需重新扫描包含归档元数据的映像,请拉取该映像。刷新元数据最多可能需要 24 小时。
清单列表
您还可以将漏洞扫描与清单结合使用。清单列表是指向多个平台清单的指针列表。借助它们,单个映像可以与多个架构或操作系统变体搭配使用。
Artifact Analysis 漏洞扫描仅支持 Linux amd64 映像。如果您的清单列表指向多个 Linux amd64 映像,系统只会扫描第一个映像;如果没有指向 Linux amd64 映像的指针,您将不会获得任何扫描结果。
按需扫描
借助按需扫描功能,您可以使用 gcloud CLI 在计算机本地或注册表中扫描容器映像。这样一来,您就可以根据需要访问漏洞结果的时间,灵活自定义 CI/CD 流水线。
支持的软件包类型
当您将容器映像推送到 Artifact Registry 中的 Docker 代码库时,Artifact Analysis 可以扫描多种类型的操作系统软件包和应用语言软件包中的漏洞。
Container Registry 已弃用。在 Container Registry 中,自动扫描仅扫描操作系统软件包。如果您使用的是 Container Registry,请了解如何改换为 Artifact Registry。
下表比较了 Artifact Analysis 可通过每种扫描服务扫描的软件包类型:
支持的操作系统软件包
支持的应用语言包
使用 Artifact Registry 进行自动扫描 | 使用 Container Registry 进行自动扫描(已弃用) | 按需扫描 | |
---|---|---|---|
Go 软件包 | |||
Java 软件包 | |||
Node.js 软件包 | |||
PHP 软件包 | |||
Python 软件包 | |||
Ruby 软件包 | |||
Rust 软件包 | |||
.NET 软件包 |
只有当应用语言软件包经过容器化并存储在 Docker 格式代码库中时,Artifact Analysis 才会扫描 Artifact Registry 中的应用语言软件包。不支持其他 Artifact Registry 代码库格式。
如需详细了解每个注册库产品提供的功能,请查看对比图表。
Windows Server 容器不支持 Artifact Analysis。
Artifact Analysis 界面
在 Google Cloud 控制台中,您可以查看 Artifact Registry 中容器的映像漏洞和映像元数据。
您可以使用 gcloud CLI 查看漏洞和映像元数据。
您还可以使用 Artifact Analysis REST API 执行上述任何操作。与其他 Cloud Platform API 一样,您必须使用 OAuth2 验证访问权限。通过身份验证后,您还可以使用该 API 创建自定义备注和发生实例,以及查看漏洞发生实例。
Artifact Analysis API 支持 gRPC 和 REST/JSON。您可以使用客户端库或使用适用于 REST/JSON 的 c网址 来调用 API。
控制易受攻击映像的部署
您可以在 Cloud Build 流水线中使用 Binary Authorization,根据 Artifact Analysis 提供的漏洞信息创建漏洞许可名单。如果漏洞违反了许可名单中的政策,则构建将失败。
您还可以将 Artifact Analysis 与 Binary Authorization 集成以创建证明,从而防止存在已知安全问题的容器映像在您的部署环境中运行。
漏洞来源
以下部分列出了 Artifact Analysis 用来获取 CVE 数据的漏洞来源。
操作系统软件包扫描
Artifact Analysis 使用以下来源:
- AlmaLinux OS
- Alpine
- CentOS - Red Hat 和 CentOS 使用相同的漏洞数据源。由于 CentOS 软件包是在 Red Hat 软件包之后发布的,因此针对 Red Hat 中某个漏洞的修复程序可能需要一些时间才能在 CentOS 中提供。
- Chainguard
- Debian
- Google Distroless 基于 Debian,并使用 Debian 漏洞数据。
- (美国)国家漏洞数据库
- Red Hat Enterprise Linux (RHEL)
- Red Hat 通用基础映像 (UBI)
- Rocky Linux
- SUSE Linux Enterprise Server (SLES)
- Ubuntu
- Wolfi
语言包扫描
Artifact Analysis 支持对容器映像中的语言软件包进行漏洞扫描。漏洞数据来自 GitHub 咨询数据库。
在大多数情况下,每个漏洞都会分配一个 CVE ID,此 ID 会成为该漏洞的主要标识符。如果没有为漏洞分配 CVE ID,系统会改为分配 GHSA ID 作为标识符。如果该漏洞日后获得 CVE ID,则漏洞 ID 会更新为与 CVE 相匹配。如需了解详情,请参阅检查项目中是否存在特定漏洞。
支持的操作系统版本
Artifact Analysis 支持以下操作系统软件版本的漏洞扫描:
- AlmaLinux OS - 版本:8、9 和次要版本
- Alpine Linux - 版本:3.3、3.4、3.5、3.6、3.7、3.8、3.9、3.10、3.11、 3.12、3.13、3.14、3.15、3.16、3.17、3.18、3.19、3.20
- CentOS - 版本:6、7、8 和次要版本
- Chainguard - 在单个发布轨道上进行滚动更新。
- Debian GNU/Linux - 版本:9、10、11、12
- Red Hat Enterprise Linux (RHEL) - 版本:6、7、8、9 及小版本,支持自动注册表扫描。
- Red Hat Universal Base Image (UBI) - 版本 8、9 及次要版本
- Rocky Linux - 版本:8、9 及次要版本
- SUSE Linux Enterprise Server (SLES) - 版本:12、15 及更低版本;同样支持 SLES for SAP 的这些版本
- Ubuntu - 版本:12.04、12.10、13.04、14.04、14.10、15.04、15.10、16.04、16.10、17.04、17.10、18.04、18.10、20.04、20.10、21.04、21.10、22.04、22.10、23.04、23.10、24.04
- Wolfi - 在单个发布轨道上进行滚动更新。
限制
- Artifact Analysis 会根据发布的每个主要版本的最新次要版本,为 RHEL 提供漏洞扫描结果。对于较旧的 RHEL 次要版本,扫描结果可能不准确。
- RHEL 版本 9 不支持按需扫描。
软件包管理器和语义版本控制
- Go - Artifact Analysis 会报告 Go 标准库中的软件包以及标准库中未包含的外部 Go 软件包的漏洞。系统会针对每种类型的软件包使用不同的标签报告漏洞。
- Java - Artifact Analysis 支持遵循 Maven 命名惯例的 Maven 软件包。如果软件包版本包含空格,系统将不会对其进行扫描。
- Node.js - 软件包版本匹配遵循语义版本控制规范。
- PHP - Artifact Analysis 会扫描 Composer 软件包。请参阅 Composer 语义版本控制。
- Python - Python 版本匹配遵循 PEP 440 语义。
- Ruby - Artifact Analysis 会扫描 RubyGems 软件包。请参阅 RybyGems 语义版本控制。
- Rust - Artifact Analysis 会扫描 Cargo 软件包。请参阅 Rust 语义版本控制。
- .NET - Artifact Analysis 会扫描 NuGet 软件包。请参阅 NuGet 语义版本控制。