Artifact Analysis API を使用してメタデータにアクセスする

Assured Open Source Software(Assured OSS)は、利用可能なすべてのパッケージとパッケージ バージョンに対してセキュリティ メタデータを提供します。Artifact Analysis でこのメタデータにアクセスして、ビルドの詳細、脆弱性のステータス、テスト結果、ライセンス情報を確認できます。

このドキュメントは無料枠にのみ適用されます。Cloud Storage を使用してメタデータにアクセスする手順については、Cloud Storage を使用してメタデータにアクセスするをご覧ください。

セキュリティ メタデータ

Artifact Analysis は、オープンソースの Grafeas モデルに従ってメタデータ ストレージを提供します。パッケージのバージョンごとに次の情報が表示されます。

  • Assured OSS によってリリースされたパッケージの各バージョンの PackageNote。パッケージメモには、次の内容が含まれます。

    • distribution ここで、各 distribution は Assured OSS によって提供される 1 つのアーティファクトに対応します。これには、バイナリ ソースと再現可能なソースの場所とダイジェスト url(署名とハッシュをダウンロードできる場所)が含まれます。
    • relatedURL。ビルドの来歴、テスト証明書、脆弱性などのメタデータへのリンクが含まれています。
  • BuildOccurrence。このビルド オカレンスへのリンクは、パッケージ ノートの relatedURL セクションのラベル BUILD_OCCURRENCE にあります。ビルド オカレンスの intotoStatement には、SLSA v0.2 の来歴が含まれています。

  • 2 番目の BuildOccurrenance。このビルド オカレンスへのリンクは、パッケージ ノートの relatedURL セクションのラベル ORIGINAL_SOURCE_PROVENANCE にあります。このファイルには、元のソース(GitHub)の詳細が Source の形式で含まれています。

  • AttestationOccurrence。この証明書オカレンスへのリンクは、パッケージ メモの relatedURL セクションのラベル TEST_OCCURRENCE にあります。証明書のシリアル化されたペイロードには、パッケージ バージョンに対して行われたすべてのセキュリティ テストを表す JSON が含まれています。

  • 2 つ目の AttestationOccurrence。この証明書オカレンスへのリンクは、パッケージ メモの relatedURL セクションのラベル PACKAGE_ATTESTATION_OCCURRENCE にあります。証明書の JSON シリアル化ペイロードは、パッケージ ノートのペイロードとその署名です。この証明書は、パッケージ メモのコンテンツの整合性を検証するために使用されます。

  • パッケージに関連するすべての脆弱性の VulnerabilityNote と VulnerabilityOccurrence。メモとオカレンスを組み合わせることで、脆弱性の概要や説明、重大度、CVSSV3 スコア、影響を受けるバージョンと修正されたバージョンの情報、修復など、脆弱性に関する情報が提供されます。

Artifact Analysis からセキュリティ メタデータにアクセスする

Artifact Analysis のセキュリティ メタデータには、さまざまな言語で利用可能な Artifact Analysis API クライアントを使用してアクセスできます。Artifact Analysis API 用の Cloud クライアント ライブラリの使用を開始するには、必要な Artifact Analysis クライアント ライブラリをインストールするをご覧ください。

セキュリティ メタデータにアクセスする手順は次のとおりです。

ステップ 1 - 認証を設定する

アプリケーションのデフォルト認証情報(ADC)を使用して認証を設定します。

ステップ 2 - セキュリティ メタデータを取得する

セキュリティ メタデータを取得するには、次の情報を使用して note_name パッケージを作成します。

  • Project_ID: Google Cloud プロジェクトの英数字の識別子。
  • Package Language: Java または Python。大文字で指定する必要があります。
  • Package_ID: Java の場合は groupId_artifactId、Python の場合は packageName。この値では大文字と小文字が区別されます。パッケージのリリース名の有効な大文字と小文字の区別については、Assured OSS のすべてのパッケージを一覧表示するをご覧ください。
  • Version: パッケージのバージョン。

note_name の構造は projects/<project_id>/notes/<language>-<package_id>-<version> のようになります。

例: projects/cloud-aoss/notes/JAVA-org.apache.commons_commons-compress-1.21

オプション 1:

Container Analysis クライアント ライブラリを使用している場合は、note_name で getNotes を使用して PackageNote をクエリします。PackageNote には、他のメモやオカレンスへのリンクがあります。

オプション 2:

curl コマンドを使用している場合は、次のコマンドを使用します。

curl  -H "Content-Type: application/json" -H   "Authorization: Bearer $(gcloud auth print-access-token)" $URL
  • Java の場合は、URL https://containeranalysis.googleapis.com/v1/projects/cloud-aoss/notes/JAVA-org.jsoup_jsoup-1.15.2 を使用します。
  • Python の場合は、URL https://containeranalysis.googleapis.com/v1/projects/cloud-aoss/notes/PYTHON-Flask-Cors-3.0.10 を使用します。

サンプル メタデータ

{
  "name": "projects/cloud-aoss/notes/JAVA-org.jsoup_jsoup-1.15.2",
  "kind": "PACKAGE",
  "relatedUrl": [
    {
      "url": "projects/cloud-aoss/occurrences/621d7e7b-8e6c-4313-b24b-eae3a1d1b884",
      "label": "ORIGINAL_SOURCE_PROVENANCE"
    },
    {
      "url": "https://containeranalysis.googleapis.com/v1/projects/cloud-aoss/occurrences/a0967d97-634c-4066-b6da-0a723273a165",
      "label": "BUILD_OCCURRENCE"
    },
    {
      "url": "projects/cloud-aoss/occurrences/6005db73-7310-44f9-9a36-6ca0174732a1",
      "label": "TEST_OCCURRENCE"
    },
    {
      "url": "projects/cloud-aoss/notes/GHSA-gp7f-rwcx-9369",
      "label": "VULNERABILITY_GHSA-gp7f-rwcx-9369"
    }
  ],
  "createTime": "2022-10-12T06:48:19.162016Z",
  "updateTime": "2022-10-18T05:31:15.081736Z",
  "package": {
    "distribution": [
      {
        "cpeUri": "cpe:2.3:a:JAVA::org.jsoup:jsoup:1.15.2:*:*:*:*:*:*:*",
        "url": "https://us-maven.pkg.dev/…/org/jsoup/jsoup/1.15.2/jsoup-1.15.2.jar",
        "description": "..."
      },
      {
        "cpeUri": "cpe:2.3:a:JAVA::org.jsoup:jsoup:1.15.2:*:*:*:*:*:*:*",
        "url": "https://us-maven.pkg.dev/…/org/jsoup/jsoup/1.15.2/jsoup-1.15.2-sources.jar",
        "description": "..."
      }
]}}

relatedURL マップで提供されるメモとオカレンスの名前を使用して、ソース、ビルド、テスト、脆弱性に関連する追加データを取得します。これを行うには、GetNote API と GetOccurrence API、または curl コマンドを使用します。BUILD_OCCURRENCE の場合、API を使用するときに https://containeranalysis.googleapis.com/v1/ の最初の接頭辞を削除します。その他のエンティティの場合は、API パラメータで note_name または occurrence_name として URL を直接使用します。

Python スクリプトの例

ダウンロードしたメタデータ全体を出力する Python スクリプトのサンプルは、次の Cloud Storage の場所に README ファイルとともに用意されています。

gs://cloud-aoss/utils/python-download-metadata/v1.1

Google Cloud CLI を使用してスクリプトをダウンロードする手順は次のとおりです。

  1. アプリケーションのデフォルト認証情報(ADC)を使用して認証を設定します。

  2. container-analysis クライアント ライブラリをインストールします。具体的には、このコマンドで次のものをインストールする必要があります。

    pip install google-cloud-containeranalysis
    
  3. 次のコマンドを使用して、cloud-kms パッケージと cryptography パッケージをインストールします。

    pip install --upgrade google-cloud-kms
    pip install --upgrade cryptography
    
  4. 次のコマンドを使用して、download_metadata.py をシステムにダウンロードします。

    gcloud storage cp gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata.py
    PATH_TO_LOCAL_STORE --recursive
    

    PATH_TO_LOCAL_STORE は、ファイルを保存するローカルパスに置き換えます。

  5. 次のコマンドを使用して、スクリプトの使用手順が記載された README.md をダウンロードします。

    gcloud storage cp gs://cloud-aoss/utils/python-download-metadata/v1.1/README.md PATH_TO_LOCAL_STORE --recursive
    

    PATH_TO_LOCAL_STORE は、ファイルを保存するローカルパスに置き換えます。

サンプル コマンド

python ./download_metadata.py -l 'JAVA' -p 'org.apache.logging.log4j:log4j-core' -v '2.17.1'

Container Analysis メタデータの署名を検証するには、次のコマンドをスクリプトに追加します。

python ./download_metadata.py -l 'JAVA' -p 'org.apache.logging.log4j:log4j-core' -v '2.17.1' -s`

次のステップ