本文档介绍了如何启用 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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Container Scanning APIs.
-
Install the Google Cloud CLI.
-
如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Container Scanning APIs.
-
Install the Google Cloud CLI.
-
如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
- 在 Artifact Registry 中创建一个 Docker 代码库,并将包含 Go 代码的容器映像推送到该代码库。如果您不熟悉 Artifact Registry,请参阅 Docker 快速入门。
如需了解如何使用 Cloud Build 构建 Go 应用并将其容器化,请参阅 构建 Go 应用。
获取代码库列表。
在代码库列表中,点击一个代码库。
在映像列表中,点击映像名称。
每个映像摘要的漏洞总数将显示在漏洞列中。
如需查看映像的漏洞列表,请点击漏洞列中的链接。
扫描结果部分会显示扫描的软件包类型、漏洞总数、有修复的漏洞、无修复的漏洞和有效严重程度的摘要。
漏洞表格会列出发现的每个漏洞的常见漏洞和披露 (CVE) 名称、有效严重程度、通用漏洞评分系统 (CVSS) 评分、修复(如有)、包含漏洞的软件包的名称以及软件包类型。
您可以过滤和排序这些文件,以按文件扩展名检查特定文件、目录或文件类型。
Google Cloud 控制台在此表中最多显示 1,200 个漏洞。如果您的映像包含的漏洞超过 1200 个,您必须使用 gcloud 或 API 查看完整列表。
如需详细了解特定 CVE,请点击相应 CVE 名称。
如需查看漏洞出现详细信息(例如版本号和受影响的位置),请点击包含漏洞名称的行中的查看或查看已修复。对于没有修复的漏洞,链接文字为查看;对于已应用修复的漏洞,链接文字为查看已修复。
- 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
- LOCATION 是代码库的单区域或多区域位置。
- PROJECT_ID 是您的 Google Cloud 控制台项目 ID。
- REPOSITORY 是存储了映像的代码库的名称。
- IMAGE_ID 是代码库中的映像名称。
- TAG 是您想要获取其相关信息的映像标记。
HASH 是映像摘要。
Artifact Analysis 会返回包含
packageType
的结果。- LOCATION 是代码库的单区域或多区域位置。
- PROJECT_ID 是您的 Google Cloud 控制台项目 ID。
- REPOSITORY 是存储了映像的代码库的名称。
- IMAGE_ID 是代码库中的映像名称。
- FILTER_EXPRESSION 是一个示例过滤条件表达式,其格式请参阅过滤漏洞发生实例。
DEPLOYMENT
是发生实例的种类。- RESOURCE_URL 是映像的完整网址,格式为
https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH
。 - RESOURCE_URL_PREFIX 用于指定资源网址中的子字符串。
- 如需过滤映像的所有版本,请省略映像摘要。使用以下格式:
https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@
- 如需过滤项目中的所有映像,只需指定资源位置和项目即可。使用以下格式:
https://LOCATION-docker.pkg.dev/PROJECT_ID/
- 如需过滤映像的所有版本,请省略映像摘要。使用以下格式:
- ENCODED_RESOURCE_URL 是映像的编码路径。如需了解编码,请参阅网址编码。
VULNERABILITY
是发生实例的种类。- PACKAGE_TYPE 是应用语言软件包类型。
可用的类型包括:
COMPOSER
、GO
、MAVEN
、NPM
、NUGET
、PYTHON
、RUBYGEMS
和RUST
。 - LOCATION 是代码库的单区域或多区域位置。
- PROJECT_ID 是您的 Google Cloud 控制台项目 ID。
- REPOSITORY 是存储了映像的代码库的名称。
- IMAGE_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 通知可接收有关漏洞和其他元数据的通知。
将 Artifact Analysis 与 Binary Authorization 集成,以创建证明,从而防止存在已知安全问题的容器映像在您的部署环境中运行。
查看映像漏洞
Artifact Analysis 会在新映像上传到 Artifact Registry 时扫描这些映像。此扫描可提取有关容器中软件包的信息。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Container Analysis API 查看 Artifact Registry 中映像的漏洞事件。如果某个映像存在漏洞,您就可以获取详细信息。
Artifact Analysis 只会更新过去 30 天内推送或拉取的映像的元数据。30 天后,元数据将不再更新,结果也会过时。此外,Artifact Analysis 还会归档过时超过 90 天的元数据,并且这些元数据将无法在 Google Cloud 控制台、gcloud 中或通过 API 使用。如需重新扫描包含过时或归档元数据的映像,请拉取该映像。 刷新元数据最多可能需要 24 小时。
在 Google Cloud 控制台中查看出现次数
如需查看映像中的漏洞,请执行以下操作:
使用 gcloud 查看出现次数
如需查看 Artifact Registry 中映像的出现情况,请运行以下命令:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
其中:
如需查看某一映像标记或图层的漏洞,请使用以下命令:
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
其中:
如需过滤漏洞发生实例,请使用以下命令:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID \
--occurrence-filter=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 中的工件的 build 安全信息。如需详细了解侧边栏以及如何使用 Cloud Build 帮助保护软件供应链,请参阅查看 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"
其中:
您可以使用 hasPrefix
函数来扩大过滤范围。
例如,以下过滤条件用于在多个映像中过滤特定种类的发生实例:
kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")
其中:
查看漏洞发生实例
如需检索映像的漏洞发生实例列表,您可以按 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
其中:
如需详细了解如何使用此 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
其中:
查看与特定备注相关联的图片
您可以检索与特定备注 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"
其中: