このドキュメントでは、Container Scanning API を有効にして、Artifact Registry にイメージを push し、イメージで見つかった脆弱性の一覧を表示する方法について説明します。
Artifact Analysis は、Artifact Registry のコンテナ イメージの脆弱性情報を提供します。メタデータはメモとして保存されます。イメージに関連付けられたメモの各インスタンスが検出されるたびにオカレンスが作成されます。詳細については、概要と料金に関するドキュメントをご覧ください。
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry and Container Scanning APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry and Container Scanning APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init - Artifact Registry に Docker リポジトリを作成し、コンテナ イメージをリポジトリに push します。Artifact Registry に習熟されていない場合は、Docker のクイックスタートをご覧ください。
この API を有効にすると、Artifact Registry で言語パッケージ スキャンも有効になります。サポートされているパッケージ タイプをご覧ください。
イメージの脆弱性を表示する
Artifact Analysis は、Artifact Registry にアップロードされた新しいイメージをスキャンします。このスキャンにより、コンテナ内のシステム パッケージに関する情報が抽出されます。
レジストリ内のイメージの脆弱性オカレンスを表示するには、 Google Cloud コンソール、Google Cloud CLI、または Container Analysis API を使用します。イメージに脆弱性が存在する場合、その詳細を確認できます。
Artifact Analysis は、過去 30 日以内に pull されたイメージとパッケージを継続的にスキャンします。30 日を過ぎると、スキャンされたイメージとパッケージのメタデータは更新されなくなり、結果は古くなります。
Artifact Analysis は、90 日以上前のメタデータをアーカイブします。このアーカイブされたメタデータは、API を使用してのみ評価できます。古いメタデータまたはアーカイブされたメタデータを含むイメージを再スキャンするには、そのイメージを pull します。メタデータの更新には、最長で 24 時間ほどかかることがあります。メタデータが古いかアーカイブされているパッケージは再スキャンできません。
Google Cloud コンソールで発生を表示する
イメージの脆弱性を表示するには:
リポジトリのリストを取得します。
リポジトリ リストで、リポジトリをクリックします。
イメージのリストで、イメージ名をクリックします。
各イメージ ダイジェストの脆弱性の総数が、[脆弱性] 列に表示されます。
イメージで検出された脆弱性の一覧を表示するには、[脆弱性] 列のリンクをクリックします。
[スキャン結果] セクションには、スキャンされたパッケージ タイプ、脆弱性の合計数、修正プログラムが利用可能な脆弱性、修正プログラムがない脆弱性、有効な重大度の概要が表示されます。
脆弱性の表には、検出された各脆弱性の共通脆弱性識別子(CVE)名、有効な重大度、共通脆弱性評価システム(CVSS)スコア、修正(利用可能な場合)、脆弱性が含まれるパッケージの名前、パッケージ タイプが一覧表示されます。
Google Cloud コンソールには、この表にページあたり最大 1,200 件の脆弱性が表示されます。これらのファイルをフィルタして並べ替え、特定のファイル、ディレクトリ、レイヤ、ファイル形式をファイル拡張子で確認できます。
特定の CVE の詳細については、CVE 名をクリックしてください。
バージョン番号や影響を受ける場所などの脆弱性発生の詳細を表示するには、脆弱性の名前を含む行で [表示] または [修正済みを表示] をクリックします。リンクテキストは、修正プログラムのない脆弱性については [View]、修正プログラムが適用されている脆弱性については [View Fixed] です。
特定のレイヤの脆弱性を表示する
Artifact Analysis は、レイヤ固有のメタデータを提供し、脆弱性を含むパッケージと、そのレイヤを導入した Docker ビルドコマンドを特定するのに役立ちます。Google Cloud コンソールでレイヤベースの脆弱性メタデータを表示するには:
Artifact Registry で、リポジトリのリストを開きます。
[リポジトリ] ページで、リポジトリをクリックします。
[リポジトリの詳細] ページで、イメージをクリックします。
画像モード リストで、イメージ ダイジェストをクリックします。
イメージ ダイジェストの詳細ページで、[脆弱性] タブをクリックします。
レイヤベースのメタデータが利用可能な場合、Artifact Analysis は [レイヤ] バーに選択可能なレイヤのリストを表示します。
レイヤのリストを表示するには、レイヤのプルダウン メニューをクリックします。
プルダウン リストが開き、レイヤの番号付きリストが表示されます。レイヤ 0 は一番下のレイヤを表し、その後のレイヤは前のレイヤを基盤として構築されます。脆弱性が見つかったレイヤのみが表示されます。
Artifact Analysis は、各レイヤについて、レイヤのビルドに使用された Docker コマンドと、そのレイヤで検出された脆弱性の数を示します。
特定のレイヤの脆弱性の詳細を確認するには、レイヤリストからレイヤを選択します。
脆弱性の表が更新され、選択したレイヤで見つかった脆弱性のみが表示されます。フィルタを追加したり、特定の脆弱性を調査したりできます。
脆弱性の横にある [表示] または [修正を表示] をクリックすると、脆弱性の詳細情報を確認できます。
[脆弱性の詳細] サイドパネルには、パッケージに脆弱性があるファイル ロケーションが表示されます。
[ファイルの場所] テーブルで、疑問符にカーソルを合わせると、追加のレイヤ メタデータが開きます。
ダイアログには、レイヤ インデックス、レイヤビルド コマンド、レイヤ ダイジェスト、脆弱性を修復できるベースイメージが表示されます。
gcloud を使用してオカレンスを表示する
Artifact Registry のイメージのオカレンスを表示するには、gcloud artifacts docker images list コマンドを実行します。
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
ここで
- LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
- PROJECT_ID は、コンソールの Google Cloud プロジェクト ID です。
- REPOSITORY は、イメージが保存されるリポジトリの名前です。
- IMAGE_ID は、リポジトリ内のイメージの名前です。このコマンドではイメージタグを指定できません。
デフォルトでは、このコマンドは最新の 10 件の結果を返します。異なる数の結果を表示するには、--show-occurrences-from フラグを使用します。たとえば、次のコマンドは最新の 25 件の結果を返します。
gcloud artifacts docker images list --show-occurrences-from=25 \
us-central1-docker.pkg.dev/my-project/my-repo/my-image
出力は次のようになります。
画像出力の例
{
"name": "projects/my-project/locations/us-central1/occurrences/22d3edfb-34f2-4d3f-be08-fd90c549f010",
"resource": {
"uri": "https://us-central1-docker.pkg.dev/my-project/my-repo/golang-nginx@sha256:5b54ef20748417ccdb0b87afedf98c44e699e2f59bd6cv48cbdc1ca2e72c80e3"
},
"noteName": "projects/my-project/locations/us-central1/notes/CVE-2005-2541",
"kind": "VULNERABILITY",
"createTime": "2025-01-21T15:57:01.238832Z",
"updateTime": "2025-01-21T15:57:01.238832Z",
"vulnerability": {
"severity": "CRITICAL",
"cvssScore": 10,
"packageIssue": [
{
"affectedLocation": {
"cpeUri": "cpe:/o:debian:debian_linux:12",
"package": "tar",
"version": {
"name": "1.34+dfsg",
"revision": "1.2+deb12u1",
"kind": "NORMAL"
}
},
"fixedLocation": {
"cpeUri": "cpe:/o:debian:debian_linux:12",
"package": "tar",
"version": {
"kind": "MAXIMUM"
}
},
"packageType": "OS",
"effectiveSeverity": "LOW",
"file_location": [
{
"file_path": "/var/lib/dpkg/status",
"layerDetails": {
"index": 0,
"diffID": "sha256:123",
"buildCommand": "FROM golang:example_sha256",
"BaseImages": [
{
"name": "library/golang",
},
],
},
},
],
}
],
"shortDescription": "CVE-2005-2541",
"longDescription": "NIST vectors: AV:N/AC:L/Au:N/C:C/I:C/A:C",
"relatedUrls": [
{
"url": "https://security-tracker.debian.org/tracker/CVE-2005-2541",
"label": "More Info"
}
],
"effectiveSeverity": "LOW",
"cvssVersion": "CVSS_VERSION_2",
"cvssV2": {
"baseScore": 10,
"attackVector": "ATTACK_VECTOR_NETWORK",
"attackComplexity": "ATTACK_COMPLEXITY_LOW",
"authentication": "AUTHENTICATION_NONE",
"confidentialityImpact": "IMPACT_COMPLETE",
"integrityImpact": "IMPACT_COMPLETE",
"availabilityImpact": "IMPACT_COMPLETE"
}
}
}
脆弱性オカレンスをフィルタする
脆弱性オカレンスをフィルタするには、--occurrence-filter パラメータを使用します。
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID \
--occurrence-filter=FILTER_EXPRESSION
ここで
- LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
- PROJECT_ID は Google Cloud コンソールのプロジェクト ID です。
- REPOSITORY は、イメージが保存されるリポジトリの名前です。
- IMAGE_ID は、リポジトリ内のイメージの名前です。
- FILTER_EXPRESSION は、脆弱性オカレンスのフィルタで説明されている形式のサンプル フィルタ式です。
特定のレイヤの脆弱性を表示する
layerDetails フィールドを使用すると、脆弱なパッケージを導入した特定のレイヤを特定し、そのレイヤに関する追加情報を確認できます。たとえば、次の画像に対する layerDetails 出力を考えてみましょう。
"layerDetails": {
"index": 0,
"diffID": "sha256:123",
"buildCommand": "FROM golang:example_sha256",
"BaseImages": [
{
"name": "library/golang",
},
],
}
出力には、イメージのレイヤ インデックスが 0 で、レイヤ ハッシュが sha256:123 であることが示されています。このレイヤのビルドに使用される Docker ビルドコマンドは FROM golang:example_sha256 です。このレイヤは library/golang ベースイメージにもあります。
API またはコードを使用してオカレンスを表示する
イメージのオカレンスを表示するには、次の形式で URL を使用してイメージを指定します。
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
API
cURL の使用
プロジェクトのオカレンスのリストを取得するには:
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
プロジェクトの脆弱性の概要を取得するには:
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:vulnerabilitySummary
特定のオカレンスの詳細を取得するには:
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
Java
Artifact Analysis のクライアント ライブラリをインストールして使用する方法については、Artifact Analysis クライアント ライブラリをご覧ください。詳細については、Artifact Analysis Java API リファレンス ドキュメントをご覧ください。
Artifact Analysis に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
Artifact Analysis のクライアント ライブラリをインストールして使用する方法については、Artifact Analysis クライアント ライブラリをご覧ください。詳細については、Artifact Analysis Go API リファレンス ドキュメントをご覧ください。
Artifact Analysis に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Artifact Analysis のクライアント ライブラリをインストールして使用する方法については、Artifact Analysis クライアント ライブラリをご覧ください。詳細については、Artifact Analysis Node.js API リファレンス ドキュメントをご覧ください。
Artifact Analysis に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Ruby
Artifact Analysis のクライアント ライブラリをインストールして使用する方法については、Artifact Analysis クライアント ライブラリをご覧ください。詳細については、Artifact Analysis Ruby API リファレンス ドキュメントをご覧ください。
Artifact Analysis に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。