调查漏洞

当您发现新漏洞时,请务必快速采取行动。本页面提供了为您预构建的必需 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。如需查看项目列表,您可以使用 gcloud projects list
  • RESOURCE_URL 是图片的完整网址,格式为:https://HOSTNAME/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

  1. 获取漏洞的标识符。

  2. 在以下过滤条件表达式中使用 CVE ID 或 GHSA 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。如需查看项目列表,您可以使用 gcloud projects list
  • VULN_ID 是漏洞的 ID。CVE ID 或 GHSA ID 编号,例如 CVE-2021-32798GHSA-884p-74jh-xrg2

例如,以下调用演示了如何检索项目中出现 CVE-2023-23915 的图片的扫描结果:

  curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    --data-urlencode "filter=(noteProjectId=\"goog-vulnz\" AND noteId=\"CVE-2023-23915\")" \
    https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences

替换以下内容:

  • PROJECT_ID 是您的 Google Cloud 项目 ID。如需查看项目列表,您可以使用 gcloud projects list

跨多个项目搜索漏洞

使用 curl 全局替换功能跨项目执行查询。

例如,以下代码段会将一个变量设置为包含两个项目 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,可以使用 gcloud projects list 查看项目列表。

不支持跨多个项目进行单个 API 调用。

大致了解项目的所有元数据

请求与您的项目 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 详情或认证。

查询特定出现情况的所有可用详细信息

如需详细了解单个出现情况,请使用以下请求。

例如,如果您使用 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 评分以及修复程序(如果有)等信息。

后续步骤