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 Registry 和 Container Registry 中已扫描映像的元数据,以发现新漏洞。
Artifact Analysis 每天会多次从漏洞来源接收新的和更新后的漏洞信息。收到新漏洞数据时,Artifact Analysis 会更新已扫描映像的元数据,使其保持最新状态。Artifact Analysis 会更新现有漏洞发生实例,为新备注创建新的漏洞发生实例,并删除不再有效的漏洞发生实例。
Artifact Analysis 只会更新过去 30 天内推送或拉取的映像的元数据。30 天后,元数据将不再更新,结果将过时。此外,Artifact Analysis 会归档过时超过 90 天的元数据,这些元数据将无法在 Google Cloud 控制台、gcloud 或通过 API 中获取。如需重新扫描包含过时或归档元数据的映像,请拉取该映像。 刷新元数据最多可能需要 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 语义版本控制。