本文档介绍了如何启用 Container Scanning API、将映像推送到 Artifact Registry,以及查看在映像中发现的漏洞列表。
Artifact Analysis 会以备注形式存储漏洞信息。Container Analysis 会为与映像相关联的备注的每个实例创建一个发生实例。如需了解详情,请参阅概览和价格文档。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Container Scanning APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Container Scanning APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 在 Artifact Registry 中创建一个 Docker 仓库,并将包含 npm 代码的容器映像推送到该仓库。如果您不熟悉 Artifact Registry,请参阅 Docker 快速入门。
Artifact Analysis 不会自动扫描现有映像。如需扫描现有映像,必须再次推送。
查看映像漏洞
Artifact Analysis 会在有新映像上传到 Artifact Registry 时扫描这些映像。此扫描可提取有关容器中软件包的信息。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Container Analysis API 在 Artifact Registry 中查看映像的漏洞事件。如果某个映像存在漏洞,您就可以获取详细信息。
Artifact Analysis 只会更新过去 30 天内推送或拉取的映像的元数据。Artifact Analysis 会归档超过 30 天的元数据。如需重新扫描包含归档元数据的映像,请拉取该映像。刷新元数据最多可能需要 24 小时。
在 Google Cloud 控制台中查看出现情况
如需查看映像中的漏洞,请执行以下操作:
获取代码库列表。
在代码库列表中,点击一个代码库。
在图片列表中,点击图片名称。
每个映像摘要的漏洞总数将显示在漏洞列中。
如需查看映像的漏洞列表,请点击漏洞列中的链接。
扫描结果部分会显示扫描的软件包类型、漏洞总数、可修复的漏洞、无法修复的漏洞以及有效的严重级别的摘要。
漏洞表会列出每个发现的漏洞的常见漏洞和披露 (CVE) 名称、实际严重级别、通用漏洞评分系统 (CVSS) 评分、修复程序(如果有)、包含漏洞的软件包的名称和软件包类型。
您可以过滤和排序这些文件,以按文件扩展名查看特定文件、目录或文件类型。
Google Cloud 控制台最多会在此表格中显示 1,200 个漏洞。如果您的映像有超过 1200 个漏洞,您必须使用 gcloud 或 API 才能查看完整列表。
如需详细了解特定 CVE,请点击 CVE 名称。
如需查看漏洞出现详情(例如版本号和受影响的位置),请点击包含漏洞名称的行中的查看或查看已修复。对于尚无修复程序的漏洞,链接文字为查看;对于已应用修复程序的漏洞,链接文字为查看已修复。
使用 gcloud 查看出现情况
如需在 Artifact Registry 中查看映像的出现次数,请运行以下命令:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
其中:
- LOCATION 是代码库的单区域或多区域位置。
- PROJECT_ID 是您的 Google Cloud 控制台 项目 ID。
- REPOSITORY 是存储了映像的代码库的名称。
IMAGE_ID 是代码库中的映像名称。您无法使用此命令指定映像标记。
默认情况下,该命令会返回最近的 10 张图片。如需显示不同数量的图片,请使用
--show-occurrences-from
标志。例如,以下命令会返回最近 25 张图片。gcloud artifacts docker images list --show-occurrences-from=25 \ us-central1-docker.pkg.dev/my-project/my-repo/my-image
如需查看某一映像标记或图层的漏洞,请使用以下命令:
gcloud artifacts docker images describe \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID:TAG \
--show-package-vulnerability
或
gcloud artifacts docker images describe \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH \
--show-package-vulnerability
其中:
- LOCATION 是代码库的单区域或多区域位置。
- PROJECT_ID 是您的 Google Cloud 控制台 项目 ID。
- REPOSITORY 是存储了映像的代码库的名称。
- IMAGE_ID 是代码库中的映像名称。
- TAG 是您想要获取其相关信息的图片标记。
HASH 是映像摘要。
Artifact Analysis 会返回包含
packageType
的结果。
如需过滤漏洞发生实例,请使用以下命令:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID \
--occurrence-filter=FILTER_EXPRESSION
其中:
- LOCATION 是代码库的单区域或多区域位置。
- PROJECT_ID 是您的 Google Cloud 控制台 项目 ID。
- REPOSITORY 是存储了映像的代码库的名称。
- IMAGE_ID 是代码库中的映像名称。
- FILTER_EXPRESSION 是一个示例过滤条件表达式,其格式请参阅过滤漏洞事件。
使用 API 查看出现情况
如需获取项目中发生实例的列表,请使用以下命令:
curl -X GET -H "Content-Type: application/json" -H \
"Authorization: Bearer $(gcloud auth print-access-token)" \
https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences
如需获取项目中漏洞的汇总,请使用以下命令:
curl -X GET -H "Content-Type: application/json" -H \
"Authorization: Bearer $(gcloud auth print-access-token)" \
https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences:vulnerabilitySummary
如需获取特定发生实例的详细信息,请执行以下操作:
curl -X GET -H "Content-Type: application/json" -H \
"Authorization: Bearer $(gcloud auth print-access-token)" \
https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences/OCCURRENCE_ID
在 Cloud Build 中查看漏洞
如果您使用的是 Cloud Build,还可以在 Google Cloud 控制台的安全分析侧边栏中查看映像漏洞。
安全性数据分析侧边栏提供了存储在 Artifact Registry 中的工件的构建安全信息的概览。如需详细了解侧边栏以及如何使用 Cloud Build 帮助保护软件供应链,请参阅查看构建安全数据分析。
过滤发生实例
您可以在 gcloud
命令和 Artifact Analysis API 中使用过滤条件字符串,以便在查看发生实例之前对其进行过滤。以下部分介绍了支持的搜索过滤条件。
查看特定类型的发生实例
您可以使用 kind
值按出现类型进行过滤。查看可用的类型。
以下示例演示了如何过滤出映像的部署实例:
gcloud
在 gcloud CLI 中,运行以下命令:
gcloud artifacts docker images list --show-occurrences \
--occurrence-filter='kind="DEPLOYMENT"' --format=json \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
其中:
API
在 API 查询中,使用以下过滤表达式:
kind="DEPLOYMENT" AND resourceUrl="RESOURCE_URL"
其中:
DEPLOYMENT
是发生实例的种类。- RESOURCE_URL 是图片的完整网址,格式为
https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH
。
您可以使用 hasPrefix
函数进行更广泛的过滤。
例如,以下过滤器用于在多个图片中查找特定类型的出现情况:
kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")
其中:
- RESOURCE_URL_PREFIX 用于指定资源网址中的子字符串。
- 如需过滤出某个图片的所有版本,请省略图片摘要。请使用以下格式:
https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@
- 如需过滤出项目中的所有图片,只需指定资源位置和项目。请使用以下格式:
https://LOCATION-docker.pkg.dev/PROJECT_ID/
- 如需过滤出某个图片的所有版本,请省略图片摘要。请使用以下格式:
查看漏洞发生实例
如需检索映像的漏洞发生实例列表,您可以按 VULNERABILITY
发生实例类型进行过滤。
gcloud
在 gcloud CLI 中,运行以下命令:
gcloud artifacts docker images list \
--show-occurrences \
--occurrence-filter='kind="VULNERABILITY"' \
--format=json \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
其中:
API
在 API 查询中,使用以下过滤表达式:
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22VULNERABILITY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22
其中:
- ENCODED_RESOURCE_URL 是图片的编码路径。如需了解编码,请参阅网址编码。
如需详细了解如何使用此 API,请参阅 projects.occurrences.get
。
按文件包类型过滤
如需将漏洞扫描结果限制为一种软件包类型,请运行以下 gcloud CLI 命令:
gcloud artifacts docker images list /
--show-occurrences /
--occurrence-filter='kind="VULNERABILITY" AND packageType="PACKAGE_TYPE"' /
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
其中:
VULNERABILITY
是发生实例的种类。- PACKAGE_TYPE 是应用语言软件包类型。可用类型包括:
COMPOSER
、GO
、MAVEN
、NPM
、NUGET
、PYTHON
、RUBYGEMS
和RUST
。 - LOCATION 是代码库的单区域或多区域位置。
- PROJECT_ID 是您的 Google Cloud 控制台 项目 ID。
- REPOSITORY 是存储了映像的代码库的名称。
- IMAGE_ID 是代码库中的映像名称。您无法使用此命令指定映像标记。
查看与特定备注相关联的图片
您可以检索与特定备注 ID 相关联的资源列表。例如,您可以列出具有特定 CVE 漏洞的映像。
如需列出项目中与特定备注相关联的所有映像,请使用以下过滤条件表达式:
gcloud
gcloud artifacts docker images list /
--show-occurrences /
--occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
LOCATION-docker.pkg.dev/PROJECT_ID
其中:
API
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=noteProjectId%3D%22goog-vulnz%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22%20AND%20noteId%3D%22NOTE_ID%22
其中:
如需检查特定备注的特定图片,请使用以下过滤条件表达式:
gcloud
gcloud artifacts docker images list /
--show-occurrences /
--occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
地点
API
在 API 查询中,添加以下过滤表达式:
resourceUrl="RESOURCE_URL" AND noteProjectId="goog-vulnz" \ AND noteId="NOTE_ID"
其中:
- RESOURCE_URL 是图片的完整网址,格式为
https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH
。 goog-vulnz
是 Artifact Analysis 漏洞分析的PROVIDER_PROJECT_ID
。如果您是在自定义项目中使用 Artifact Analysis,则可以将此值替换为您自己的提供方项目 ID。- NOTE_ID 是备注的 ID。安全相关备注的格式通常为
CVE-2019-12345
。
后续步骤
使用 Pub/Sub 通知接收有关漏洞和其他元数据的通知。
借助 Kritis Signer 和凭证,您可以在构建流水线中创建 Binary Authorization 证明。这些工具可以根据漏洞扫描结果创建 Binary Authorization 证明。如需了解详情,请参阅使用 Kritis Signer 创建证明或使用 Voucher 创建证明。