当您得知有新的漏洞时,快速采取行动非常重要。此页面列出了为您预构建的基本 API 调用和过滤条件。使用这些 API 调用从 Artifact Analysis 中检索扫描结果,并收集有关制品状态的信息。
此内容旨在与自动扫描元数据搭配使用。如果您的映像已超出 30 天的持续分析期限,您可以再次推送到 Artifact Registry 来运行新的扫描。
此页面上的所有示例都直接访问 API,但您也可以使用 Container Analysis 客户端库或 gcloud 命令。
所需权限
所有这些示例都使用 ListOccurrences
API 方法。如需调用此方法,您需要所分析项目的 Container Analysis Occurrences Viewer
(roles/containeranalysis.occurrences.viewer)
角色。
如果您要分析自己拥有的项目,则您已拥有所需的权限。
如果您要分析不属于自己的项目,请按照 IAM 访问权限管理说明授予权限。
如需详细了解使用 Artifact Analysis 的提供商和客户的访问权限类型,请参阅权限。
查看映像的所有漏洞元数据
使用过滤器 kind=VULNERABILITY
,并提供项目 ID 和映像的完整资源网址(包括 https://
):
curl -G -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
--data-urlencode "filter=(kind=\"VULNERABILITY\" AND resourceUrl=\"RESOURCE_URL\")" \
https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences
其中:
- PROJECT_ID 是您的 Google Cloud 项目 ID。
- RESOURCE_URL 是图片的完整网址,格式为:
https://HOST_NAME/PROJECT_ID/IMAGE_ID@sha256:HASH
。https://
必须包含在网址的开头。 如果您需要查找图片的网址,可以使用查看项目的所有元数据中的调用。
输出包括一个漏洞列表,其中包含严重程度、缓解选项(如果有)以及包含漏洞的软件包的名称等详细信息。
检查项目中的特定漏洞
在大多数情况下,Artifact Analysis 使用 CVE ID 作为漏洞标识符。不过,GitHub 咨询数据库中列出的一些漏洞没有关联的 CVE ID。在这种情况下,Artifact Analysis 会改用 GHSA ID。
漏洞 ID 包含在 noteName
字段中。对于 CVE ID,它以 CVE
前缀开头;对于 GHSA ID,它以 GHSA
前缀开头。请看以下示例输出,该输出是通过运行命令来查看映像的所有漏洞获得的:
vulnerabilities:
HIGH:
- name: projects/my-project/occurrences/1234fh2c-699a-462f-b920-93a80f56f544
resourceUri: https://my_region-docker.pkg.dev/my-project/my-repo/my-image@sha256:8a1a79b587797c5164ec95977cf7aaaa828694a615947bdaed6a327d5b6a17bb
noteName: projects/goog-vulnz/notes/CVE-2021-32798
kind: VULNERABILITY
...
- name: projects/my-project/occurrences/OCCURRENCE_ID
resourceUri: https://my_region-docker.pkg.dev/my-project/my-repo/my-image@sha256:8a1a79b587797c5164ec95977cf7aaaa828694a615947bdaed6a327d5b6a17bb
noteName: projects/goog-vulnz/notes/GHSA-884p-74jh-xrg2
kind: VULNERABILITY
...
在此示例中,第一个漏洞的 ID 为 CVE-2021-32798
,第二个漏洞的 ID 为 GHSA-884p-74jh-xrg2
。
获得漏洞 ID 后,您可以运行以下命令,检索项目中受影响的映像列表,这些映像的发生 ID 为 VULN_ID:
curl -G -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
--data-urlencode "filter=(noteProjectId=\"goog-vulnz\" AND noteId=\"VULN_ID\")" \
https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences
其中:
- PROJECT_ID 是您的 Google Cloud 项目 ID。
- VULN_ID 是漏洞的 ID,可以是 CVE ID 或 GHSA ID 编号,例如
CVE-2021-32798
或GHSA-884p-74jh-xrg2
。
跨多个项目搜索漏洞
使用 curl globbing 跨项目发出查询。
例如,以下代码段设置了一个包含两个项目 ID 的变量,然后针对每个项目发送一个 API 调用来搜索提及情况。
PROJECT_IDS="PROJECT_ID_1,PROJECT_ID_2"
curl -G -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://containeranalysis.googleapis.com/v1/projects/{$PROJECT_IDS}/occurrences"
其中:
- PROJECT_ID_1 是您要检查的第一个项目的 Google Cloud 项目 ID。
- PROJECT_ID_2 是您要检查的第二个项目的 Google Cloud 项目 ID。
查看项目的所有元数据
请求与您的项目 ID 相关联的所有事件:
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
其中:
- PROJECT_ID 是您的 Google Cloud 项目 ID。
输出结果中包含与您的项目关联的漏洞信息和其他受支持的元数据类型。例如,您的项目可能包含 build 详细信息或证明。
检查项目中的特定软件包
Artifact Analysis 会为扫描的制品创建软件包依赖项。 如需查找将特定软件包作为依赖项的所有制品,您可以按软件包名称进行过滤:
curl -G -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
--data-urlencode "filter=(dependencyPackageName=\"PACKAGE_NAME\")" \
https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences
其中:
- PROJECT_ID 是您的 Google Cloud 项目 ID。
- PACKAGE_NAME 是软件包的名称。
查看映像的所有软件包元数据
如需查看映像的所有不同类型的软件包元数据,请使用过滤条件 kind=PACKAGE_NAME
,并提供您的项目 ID 和完整的映像资源网址:
curl -G -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
--data-urlencode "filter=(kind=\"PACKAGE\" AND resourceUrl=\"RESOURCE_URL\")" \
https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences
其中:
- PROJECT_ID 是您的 Google Cloud 项目 ID。
- RESOURCE_URL 是图片的完整网址,格式为
https://HOST_NAME/PROJECT_ID/IMAGE_ID@sha256:HASH
。https://
必须包含在网址的开头。如果您需要查找图片的网址,可以使用查看项目的所有元数据中的调用。
输出包含一个依赖项列表,其中包含依赖项名称、版本和许可信息。
查询特定活动的所有可用详细信息
您可以运行查询,详细了解事件。 例如,如果您使用 Pub/Sub 来接收有关漏洞发生情况的通知,那么 Pub/Sub 会发送基本详细信息,帮助您确定发生更改的漏洞以及更改发生的时间。
载荷包含一个发生实例 ID。您可以使用发生 ID 查询详细信息,以便对问题进行分诊并采取行动。
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
其中:
- PROJECT_ID 是您的 Google Cloud 项目 ID。
OCCURRENCE_ID 可以是以下任一值,具体取决于查看项目的所有元数据中的命令的输出:
- 出现次数列表中的一个数值。
- Pub/Sub 消息中网址末尾的数值。
输出包含软件包类型、漏洞严重程度、CVSS 得分以及修复信息(如有)等信息。