このドキュメントでは、Artifact Analysis に保存されている Vulnerability Exploitability eXchange(VEX)ステートメントを表示し、VEX ステータスを使用して脆弱性をフィルタする方法について説明します。
セキュリティとポリシーの適用者は、これらの機能を使用して、セキュリティ問題の軽減タスクの優先順位付けを行うことができます。VEX データを使用してアーティファクトの構成を証明し、組織が規制要件を満たすようにすることもできます。
必要なロール
VEX 評価をアップロードし、脆弱性の VEX ステータスを確認するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
- 
            脆弱性のオカレンスを表示するには: Container Analysis のオカレンスの閲覧者 (roles/containeranalysis.occurrences.viewer)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
Google Cloud コンソールで VEX ステータスを表示する
Artifact Registry に保存されているコンテナ イメージの VEX 情報を表示するには:
- Artifact Registry の [リポジトリ] ページを開きます。 - リポジトリのリストが表示されます。 
- リポジトリ リストで、リポジトリ名をクリックします。 
- イメージのリストで、イメージ名をクリックします。 - イメージ ダイジェストのリストが開きます。 
- ダイジェストのリストで、ダイジェスト名をクリックします。 - ダイジェストの詳細ページが開き、タブの行が表示されます。デフォルトでは、[概要] タブが開いています。 
- タブの行で、[脆弱性] タブを選択します。 - このページには、[VEX ステータス] セクションを含む [スキャン結果] の概要が表示されます。 - [VEX ステータス] の概要セクションには、各 VEX ステータス タイプで分類されたパッケージの数が表示されます。特定の VEX ステータスのパッケージをすべて表示するには、ステータス タイプの横にある数字をクリックします。 - [脆弱性] タブには、脆弱性リスト内の各パッケージの VEX ステータスも表示されます。 - 脆弱性リストをフィルタするには: - 脆弱性リストの上にある [脆弱性をフィルタ] をクリックします。
- フィルタリストからフィルタを選択します。
- リストのフィルタリングに使用する値を指定します。
 
Cloud Build で VEX のステータスを表示する
Cloud Build を使用している場合は、 Google Cloud コンソールの [セキュリティ分析情報] サイドパネルで VEX 情報を表示することもできます。
Cloud Build を使用している場合は、 Google Cloud コンソールの [セキュリティ分析情報] サイドパネルでイメージのメタデータを表示できます。
[セキュリティ分析情報] サイドパネルには、Artifact Registry に保存されているアーティファクトのビルド セキュリティ情報の概要が表示されます。サイドパネルの詳細と、Cloud Build を使用してソフトウェア サプライ チェーンを保護する方法については、ビルドのセキュリティ分析情報を表示するをご覧ください。
gcloud CLI を使用して表示する
次のセクションでは、VEX 情報を取得し、必要に応じてフィルタを適用して結果を絞り込む方法について説明します。
単一のアーティファクトの VEX 情報を表示する
アップロードされた VEX 情報を表示するには、API をクエリして、メモタイプ VULNERABILITY_ASSESSMENT のメモを一覧表示します。
次の API 呼び出しを使用して、指定されたアーティファクトのすべての脆弱性評価メモをリクエストします。
curl -G -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    --data-urlencode "filter=(kind=\"VULNERABILITY_ASSESSMENT\" AND vulnerability_assessment.product.generic_uri=\"https://LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME@DIGEST\"" https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/notes
場所
- LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
- PROJECT_ID は、イメージが Artifact Registry リポジトリに保存されている Google Cloud プロジェクトの ID です。
- REPO_NAME は、イメージを含む Artifact Registry リポジトリの名前です。
- IMAGE_NAME は、イメージ名です。
- DIGEST: イメージ ダイジェスト(sha256:で始まる文字列)
VEX ステータスで脆弱性をフィルタする
gcloud を使用すると、VEX ステータスで脆弱性メタデータをフィルタできます。Artifact Analysis は、各 Grafeas 脆弱性オカレンスに保存されているステータスに基づいてフィルタします。
次のコマンドを実行して、指定した VEX ステータスに基づいて脆弱性の検出結果をフィルタします。
gcloud artifacts vulnerabilities list RESOURCE_URI \
    --occurrence-filter="vulnDetails.vex_assessment.state=\"STATUS\""
場所
- RESOURCE_URI は、https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH のようなイメージの完全な URL です。
- STATUS は、フィルタする VEX ステータスです。これは、known_affected、known_not_affected、under_investigation、fixedのいずれかの値になります。
たとえば、次のコマンドを実行して、VEX ステータスが AFFECTED の脆弱性の検出結果をフィルタします。
gcloud artifacts vulnerabilities list RESOURCE_URI \
    --occurrence-filter="vulnDetails.vex_assessment.state=\"AFFECTED\""
VEX なしの脆弱性を一覧表示する
まだ VEX 情報が関連付けられていない脆弱性を特定するには、次の gcloud コマンドを使用します。
gcloud artifacts vulnerabilities list /
    LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME@DIGEST /--occurrence-filter="isNull(vulnDetails.vex_assessment.state)"
場所
- LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
- PROJECT_ID は、イメージが Artifact Registry リポジトリに保存されている Google Cloud プロジェクトの ID です。
- REPO_NAME は、イメージを含む Artifact Registry リポジトリの名前です。
- IMAGE_NAME は、イメージ名です。
- DIGEST: イメージ ダイジェスト(sha256:で始まる文字列)
制限事項
- VEX ステートメントのアップロードは、コンテナ イメージでのみサポートされています。
- アップロードされた VEX ステートメントを CSAF、OpenVex、SPDX 標準にエクスポートすることはできません。
次のステップ
- SBOM について学習する。
- Artifact Analysis で脆弱性をスキャンする。