新しい脆弱性に関する情報を入手したら、迅速に対応することが重要です。このページでは、事前構築された重要な API 呼び出しとフィルタの一覧を示します。これらの API 呼び出しを使用して、Artifact Analysis からスキャン結果を取得し、アーティファクトのステータスに関する情報を収集します。
このコンテンツは、自動スキャン メタデータで使用するように設計されています。イメージが 30 日間の継続的分析期間を超えている場合は、Artifact Registry に再度 push することで新しいスキャンを実行できます。
このページの例はすべて API に直接アクセスしますが、Container Analysis クライアント ライブラリまたは gcloud コマンドを使用することもできます。
必要な権限
これらの例ではすべて ListOccurrences
API メソッドを使用します。このメソッドを呼び出すには、分析するプロジェクトの Container Analysis オカレンスの閲覧者
(roles/containeranalysis.occurrences.viewer)
ロールが必要です。
所有しているプロジェクトを分析する場合は、必要な権限がすでに付与されています。
所有していないプロジェクトを分析する場合は、IAM アクセス管理の手順に沿って権限を付与します。
Artifact Analysis を使用するプロバイダと顧客のアクセス権の種類について詳しくは、権限をご覧ください。
イメージのすべての脆弱性メタデータを表示する
プロジェクト ID とイメージの完全なリソース URL(https://
を含む)を使用して、フィルタ kind=VULNERABILITY
を使用します。
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
の形式で指定した画像の完全な URL です。https://
は URL の先頭に含める必要があります。画像の 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
です。
脆弱性 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 は、CVE ID または GHSA ID 番号としての脆弱性の ID です(
CVE-2021-32798
やGHSA-884p-74jh-xrg2
など)。
複数のプロジェクトにわたる脆弱性を検索する
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 に関連付けられているすべてのオカレンスをリクエストします。
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 はパッケージの名前です。
イメージのすべてのパッケージ メタデータを表示する
イメージのさまざまな種類のパッケージ メタデータをすべて表示するには、プロジェクト ID とイメージ リソースの完全な URL を使用してフィルタ kind=PACKAGE_NAME
を使用します。
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
形式の画像の完全な URL です。https://
は URL の先頭に含める必要があります。イメージの URL を見つける必要がある場合は、プロジェクトのすべてのメタデータを表示するの呼び出しを使用できます。
出力には、依存関係の名前、バージョン、ライセンス情報を含む依存関係リストが含まれます。
使用可能なすべての詳細情報について特定のオカレンスをクエリする
オカレンスの詳細についてクエリを実行できます。たとえば、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 スコア、修正に関する情報(利用可能な場合)などの情報が含まれます。