VEX ステートメントを作成する

このドキュメントでは、 Vulnerability Exploitability eXchange(VEX)ステートメントを作成する方法について説明します。

Artifact Analysis は、関連する VEX ステートメントを Artifact Registry に push されたコンテナ イメージごとに保存できます。VEX は、プロダクトが既知の脆弱性の影響を受けているかどうかを示すセキュリティ アドバイザリの一種です。

各ステートメントには次の情報が含まれます。

  • VEX ステートメントのパブリッシャー
  • ステートメントが書き込まれるアーティファクト
  • 既知の脆弱性の脆弱性評価(VEX ステータス)

ソフトウェア パブリッシャーは、VEX ステートメントを作成して、アプリケーションのセキュリティ対策について説明できます。VEX ステートメントには、特定のアーティファクトで発見された脆弱性が記載され、顧客や規制機関への影響に関するコンテキストが提供されます。

セキュリティとポリシーの適用者は、VEX ステータスを使用してソフトウェア サプライ チェーンのリスクをトリアージし、VEX ステートメントを使用してアーティファクトの構成を証明することで、組織が規制要件を満たすようにすることができます。

VEX のステータス

VEX ステータスは、アーティファクトが既知の脆弱性の影響を受けているかどうかを示します。

ステータスは次のいずれかになります。

  • 影響なし: この脆弱性に関する修正は必要ありません。
  • 影響あり: 修復措置をおすすめします。
  • 修正済み: このバージョンのプロダクトでは、脆弱性に対する 修正が適用されています。
  • 調査中: このプロダクトのステータスはまだ調査中です。 パブリッシャーは、今後のリリースでステータスを更新します。

始める前に

  1. ログイン Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、 新しいアカウントを登録します

  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Container Analysis, Artifact Registry APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Google Cloud CLI をインストールします。

  6. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  7. gcloud CLI を初期化するには、次のコマンドを実行します:

    gcloud init
  8. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Container Analysis, Artifact Registry APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Google Cloud CLI をインストールします。

  12. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  13. gcloud CLI を初期化するには、次のコマンドを実行します:

    gcloud init
  14. コンテナ イメージを Artifact Registry リポジトリに保存するか、リポジトリを作成してイメージを push します。

必要なロール

VEX 評価をアップロードして脆弱性の VEX ステータスを確認するために必要な権限を取得するには、プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタム ロールや他の事前定義 ロールから取得することもできます。

VEX ステートメントを作成する

Artifact Analysis は、JSON の Common Security Advisory Format(CSAF) 2.0 標準をサポートしています。新しい VEX ステートメントを作成するには、CSAF スキーマを使用します。

以下は、既知の脆弱性に対して 1 つの cve ブランチを持つ Artifact Registry 内のイメージの VEX ステートメントの例です。

CVE ごとに product_status の値を定義する必要があります。


{
  "document": {
    "csaf_version": "2.0",
    "lang": "en-US",
    "publisher": {
      "name": "Sample-Company",
      "namespace": "https://sample-company.com"
    },
    "title": "Vex document 1.1"
  },
  "product_tree": {
    "branches": [
      {
        "name": "https://LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME",
        "product": {
          "name": "PRODUCT_NAME",
          "product_id": "IMAGE_NAME"
        }
      }
    ]
  },
  "vulnerabilities": [
    {
      "cve": "CVE_ID",
      "product_status": {
        "PRODUCT_STATUS": [
          "IMAGE_NAME"
        ]
      }
    }
  ]
}

場所

  • PRODUCT_NAME イメージの人間が読めるプロダクト名。 文字列値を受け取ります。値は、バージョン番号やその他の属性を含む、プロダクトの完全な正規名にする必要があります。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
  • PROJECT_ID は、 リポジトリを含むプロジェクトの ID です。
  • REPO_NAME は、Artifact Registry の Docker リポジトリの名前です。
  • IMAGE_NAME は、イメージ名です。
  • CVE_ID は、脆弱性の識別子( CVE-2017-11164 など)です。
  • PRODUCT_STATUS は、セキュリティ リスクの評価です。 Artifact Analysis は、known_affectedknown_not_affectedunder_investigationfixed の 4 つのステータス タイプをサポートしています。

VEX ステートメントにリストする脆弱性ごとに、cve ブランチを作成し、product_status の値を定義する必要があります。

product_tree.branches.namename フィールドの値はイメージ URI です。この値を含めることで、VEX ステートメントが特定の Docker イメージに関連付けられます。

次のステップ