脆弱性を調査する

新しい脆弱性について知った場合は、迅速に対応することが重要です。このページでは、事前構築された重要な API 呼び出しとフィルタのリストを示します。これらの API 呼び出しを使用して、Artifact Analysis からスキャン結果を取得し、アーティファクトのステータスに関する情報を収集します。

このコンテンツは、自動スキャン メタデータでの使用を目的としています。イメージが 30 日間の継続分析期間を超えている場合は、Artifact Registry に再度 push して新しいスキャンを実行できます。

このページの例はすべて API に直接アクセスしますが、Container Analysis クライアント ライブラリgcloud コマンドを使用することもできます。

必要な権限

これらの例ではすべて、ListOccurrences API メソッドを使用しています。このメソッドを呼び出すには、分析するプロジェクトの Container Analysis 実行回数の閲覧者 (roles/containeranalysis.occurrences.viewer) ロールが必要です。

  • 所有するプロジェクトを分析している場合は、必要な権限がすでに付与されています。

  • 所有していないプロジェクトを分析する場合は、IAM アクセス管理の手順に沿って権限を付与します。

アーティファクト分析を使用するプロバイダとお客様のアクセスの種類については、権限をご覧ください。

イメージのすべての脆弱性メタデータを表示する

フィルタ KIND="VULNERABILITY" を使用して、プロジェクト ID と、https:// を含むイメージの完全なリソース URL を指定します。

  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 形式の画像の完全な URL です。URL の先頭に https:// を使用する必要があります。画像の URL を確認する必要がある場合は、「プロジェクトのすべてのメタデータを把握したい」の呼び出しを使用できます。

出力には、重大度、緩和オプション(利用可能な場合)、脆弱性が存在するパッケージの名前などの詳細を含む脆弱性リストが含まれます。

プロジェクトで特定の脆弱性を確認する

ほとんどの場合、Artifact Analysis は CVE 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、2 番目の脆弱性の ID は GHSA-884p-74jh-xrg2 です。

  1. 脆弱性の ID を取得します。

  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 の グロブを使用して、プロジェクト全体にクエリを実行します。

たとえば、次のスニペットは、2 つのプロジェクト 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 は、検証する 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 です。

出力には、プロジェクトに関連付けられた脆弱性情報とその他のサポートされているメタデータ タイプが含まれます。たとえば、プロジェクトにビルドの詳細や構成証明が含まれている場合があります。

特定の発生について、利用可能なすべての詳細情報をクエリする

個々の発生の詳細を取得するには、次のリクエストを使用します。

たとえば、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 からメッセージを受信した場合は、そのメッセージの URL の末尾にある数値を使用します。

出力には、パッケージの種類、脆弱性の重大度、CVSS スコア、修正に関する情報(利用可能な場合)などが含まれます。

次のステップ