調查安全漏洞

得知有新的安全漏洞時,請務必迅速採取行動。這個頁面提供預先建構的必要 API 呼叫和篩選器清單。使用這些 API 呼叫,從構件分析服務擷取掃描結果,並收集構件狀態的相關資訊。

這類內容是專為自動掃描中繼資料而設計。如果圖片超過 30 天的持續分析時間範圍,可以再次推送至 Artifact Registry,執行新的掃描。

本頁的所有範例都會直接存取 API,但您也可以使用 Container Analysis 用戶端程式庫gcloud 指令

所需權限

所有範例都使用 ListOccurrences API 方法。如要呼叫這個方法,您需要所分析專案的「容器分析例項檢視者」(roles/containeranalysis.occurrences.viewer) 角色。

  • 如果您要分析自己擁有的專案,代表您已具備必要權限。

  • 如要分析不屬於您的專案,請按照 IAM 存取權管理操作說明授予權限。

如要進一步瞭解供應商和客戶使用構件分析時的存取權類型,請參閱權限

查看映像檔的所有安全漏洞中繼資料

使用篩選器 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 做為安全漏洞 ID。不過,GitHub Advisory Database 中列出的一些安全漏洞沒有相關聯的 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 後,您可以執行下列指令,擷取專案中含有 VULN_ID 發生事件 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-32798GHSA-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。

輸出內容會列出與專案相關的安全漏洞資訊和其他支援的中繼資料類型。舉例來說,專案可能含有建構詳細資料或認證。

在專案中檢查特定套件

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 分數,以及修正資訊 (如有)。

後續步驟