このドキュメントでは、Container Scanning API を有効にして、イメージを Artifact Registry に push し、イメージで見つかった脆弱性の一覧を表示する方法について説明します。
Artifact Analysis は、脆弱性情報をメモとして保存します。イメージに関連付けられたメモの各インスタンスが検出されるたびにオカレンスが作成されます。詳細については、概要と料金のドキュメントをご覧ください。
始める前に
- 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 Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. 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 Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init - Artifact Registry にリポジトリを作成し、アプリケーション コードを含むパッケージをリポジトリに push します。Artifact Registry でのパッケージの管理に慣れていない場合は、次のトピックをご覧ください。
この API を有効にすると、Artifact Registry で言語パッケージ スキャンも有効になります。サポートされているパッケージ タイプをご覧ください。
パッケージの脆弱性を表示する
Artifact Analysis は、Artifact Registry にアップロードされた新しいパッケージをスキャンします。このスキャンにより、パッケージとその依存関係に関する情報が抽出されます。
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 ページあたり最大 1,200 件の脆弱性が表示されます。
特定の CVE の詳細については、CVE 名をクリックします。
バージョン番号や影響を受ける場所などの脆弱性の発生の詳細を表示するには、脆弱性の名前を含む行で [表示] または [修正済みを表示] をクリックします。リンクテキストは、修正プログラムのない脆弱性については [表示]、修正プログラムが適用されている脆弱性については [修正済みを表示] です。
gcloud を使用してオカレンスを表示する
Artifact Registry のパッケージのオカレンスを表示するには、gcloud artifacts versions describe コマンドを実行します。
gcloud artifacts versions describe VERSION \
--location=LOCATION --repository=REPOSITORY --package=PACKAGE --show-package-vulnerability
ここで
- VERSION は、オカレンスを表示するパッケージのバージョンです。
- LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
- REPOSITORY は、パッケージが保存されるリポジトリの名前です。
- PACKAGE は、リポジトリ内のパッケージの名前です。このコマンドではパッケージ タグを指定できません。
API を使用してオカレンスを表示する
プロジェクトのオカレンスのリストを取得するには:
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
オカレンスをフィルタする
gcloud コマンドや Artifact Analysis API のフィルタ文字列を使用して、表示する前にオカレンスを絞り込むことができます。以降では、サポートされている検索フィルタについて説明します。
特定の種類のオカレンスを表示する
kind 値を使用して、検出結果のタイプでフィルタできます。使用可能な種類をご覧ください。
次の例は、パッケージの脆弱性検出結果をフィルタする方法を示しています。
gcloud
パッケージ ベースのスキャンでは、Google Cloud CLI での検出結果のフィルタリングはサポートされていません。
API
API クエリで、次のフィルタ式を使用します。
kind="PACKAGE_VULNERABILITY" AND resourceUrl="RESOURCE_URL"
ここで
PACKAGE_VULNERABILITYは、オカレンスの種類です。- RESOURCE_URL は、
projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_ID/packages/PACKAGE_ID/PACKAGE_TYPE/VERSION_ID形式のパッケージの完全な URL です。
hasPrefix 関数を使用すると、より広い範囲でフィルタできます。
たとえば、次のフィルタは、同じパッケージの複数のバージョンにわたって特定の種類のオカレンスをフィルタします。
kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")
ここで
- RESOURCE_URL_PREFIX は、リソース URL のサブ文字列を指定します。
- パッケージのすべてのバージョンをフィルタするには、バージョンを省略します。
projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_IDの形式を使用します。 - プロジェクト内のすべてのパッケージをフィルタするには、リソースのロケーションとプロジェクトのみを指定します。
projects/PROJECT_ID/locations/LOCATIONの形式を使用します。
- パッケージのすべてのバージョンをフィルタするには、バージョンを省略します。
脆弱性オカレンスを表示する
脆弱性検出のリストは、gcloud CLI または Artifact Analysis API を使用して表示できます。
gcloud
パッケージの脆弱性オカレンスのリストを取得するには、--show-package-vulnerability フラグを使用します。
gcloud artifacts versions describe VERSION_ID --repository=REPOSITORY_ID
--package=GROUP_ID:ARTIFACT_ID --show-package-vulnerability
ここで
- VERSION は、パッケージのバージョン番号です。
- REPOSITORY は、パッケージが保存されるリポジトリの名前です。
- GROUP_ID は、パッケージのグループ ID です。
- ARTIFACT_ID は、パッケージのアーティファクト識別子です。
API
API クエリで、次のフィルタ式を使用します。
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22VULNERABILITY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22
ここで
- ENCODED_RESOURCE_URL は、イメージへのエンコードされたパスです。エンコードについては、URL エンコードをご覧ください。
API の使用について詳しくは、projects.occurrences.get をご覧ください。
特定のメモに関連付けられている画像を表示する
特定のメモ ID に関連付けられているリソースのリストを取得できます。たとえば、特定の CVE の脆弱性を含むイメージを一覧表示できます。
プロジェクト内で特定のメモに関連付けられているすべてのイメージを一覧表示するには、次のフィルタ式を使用します。
gcloud
パッケージ ベースのスキャンでは、Google Cloud CLI での検出結果のフィルタリングはサポートされていません。
API
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=noteProjectId%3D%22goog-vulnz%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22%20AND%20noteId%3D%22NOTE_ID%22
ここで
goog-vulnzは、Artifact Analysis の脆弱性分析のPROVIDER_PROJECT_IDです。カスタム プロジェクトで Artifact Analysis を使用している場合は、この値を独自のプロバイダ プロジェクト ID に置き換えることができます。- ENCODED_RESOURCE_URL は、イメージへのエンコードされたパスです。エンコードについては、URL エンコードをご覧ください。
- NOTE_ID はメモの ID です。たとえば、Artifact Analysis のスキャン結果に脆弱性が表示される場合、多くの場合、
CVE-2019-12345のような CVE ID 形式が使用されます。
特定のイメージのメモを確認するには、次のフィルタ式を使用します。
gcloud
パッケージ ベースのスキャンでは、Google Cloud CLI での検出結果のフィルタリングはサポートされていません。
API
API クエリに次のフィルタ式を追加します。
resourceUrl="RESOURCE_URL" AND noteProjectId="goog-vulnz" \ AND noteId="NOTE_ID"
ここで
- RESOURCE_URL は、
projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_ID/packages/PACKAGE_ID/PACKAGE_TYPE/VERSION_ID形式のパッケージの完全な URL です。 goog-vulnzは、Artifact Analysis の脆弱性分析のPROVIDER_PROJECT_IDです。- NOTE_ID はメモの ID です。多くの場合、セキュリティ関連のメモは
CVE-2019-12345という形式になります。
次のステップ
- Pub/Sub 通知を使用すると、脆弱性やその他のメタデータに関する通知を受け取ることができます。