Cloud Storage を使用してメタデータにアクセスする

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

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

セキュリティ メタデータ ファイル

各 Assured OSS パッケージ バージョンのセキュリティ メタデータは、Cloud Storage バケット内の次の 4 つのファイルに分散されています。

  • buildinfo.zip: このファイルには、パッケージのビルド情報に関するメタデータが含まれています。このメタデータは、パッケージの再ビルド、証明書のローテーション、新しいフィールドの追加など、非常にまれなシナリオで変更されます。
  • vexinfo.zip: このファイルには、CycloneDX 1.4 形式のパッケージの脆弱性情報が含まれています。これは、パッケージの脆弱性に関する情報があるたびに変更されることが想定されています。
  • healthinfo.zip: このファイルには、パッケージで実行されたテストの詳細が含まれています。これは、パッケージのテスト ステータスが変更された場合に変わる可能性があります。たとえば、新しいセキュリティ テストが実行された場合や、カバレッジの結果が変更された場合です。
  • licenseinfo.zip: このファイルには、パッケージのライセンス情報に関連するメタデータが含まれています。パッケージのライセンス情報は、パッケージのパブリッシャーが情報を変更すると変更される可能性があります。

各 ZIP ファイルには、次の 2 つのファイルが含まれています。

  • データを含む JSON ファイル。
  • そのデータの署名を含む signature.zip ファイル。

JSON ファイルの構造

JSON ファイルの構造については、次のセクションで説明します。

buildInfo.json

  • creationTime: このドキュメントの作成時刻(RFC 3339 文字列形式)。
  • creator: ドキュメントのオーナー。次の詳細情報が表示されます。
    • name: このドキュメントを作成した組織の名前。
    • email: 問い合わせや苦情がある場合の組織のメールアドレス。
  • buildDetails: バイナリのビルドに関連する詳細。次の詳細情報が表示されます。
    • packageFileName: ビルドの詳細が適用されるファイルの名前。
    • buildProvenance: SLSA v0.2 形式のパッケージのビルドの来歴を表す文字列。これは Cloud Build によって生成されます。
    • envelope: 来歴ドキュメントの整合性を検証するために使用できる DSSE エンベロープを表す文字列。これは Cloud Build によって生成されます。
    • slsaLevel: ビルドシステムが準拠している SLSA レベルを示します。
    • buildTool: パッケージのビルドに使用されるツールの名前(Cloud Build)。詳細については、Cloud Build をご覧ください。
    • transitiveClosureState: これは、パッケージのすべてのビルド依存関係(直接または間接)が Assured OSS のポートフォリオにも存在するかどうかを示す ENUM です。次の 2 つの値があります。
      • OPEN: Assured OSS でサポートされている推移的依存関係がゼロまたは一部のみの場合。
      • CLOSED: すべての推移的な依存関係が Assured OSS でサポートされている場合。
  • sourceInfo: パッケージのビルドに使用されたソースコードに関する情報。次の詳細情報が表示されます。
    • sourceUrl: GitHub URL 文字列。
    • commitHash: リリースに添付された commit ハッシュ文字列。
    • tag: パッケージ バージョンに関連付けられているリリースタグ。
    • host: GitHub でソースコードをホストするシステムの名前。
    • commitTime: commit の時刻(RFC 3339 文字列形式)。
  • sbom - SPDX 2.3 形式の SBOM 文字列。

vexInfo.json

  • creationTime: このドキュメントの作成時刻(RFC 3339 文字列形式)。
  • creator: ドキュメントのオーナー。次の詳細情報が表示されます。
    • name: このドキュメントを作成した組織の名前。
    • email: 問い合わせや苦情がある場合の組織のメールアドレス。
  • vexData: CycloneDX 1.4 形式の Vulnerability Exploitability eXchange(VEX)文字列。

healthInfo.json

  • creationTime: このドキュメントの作成時刻(RFC 3339 文字列形式)。
  • creator: ドキュメントのオーナー。次の詳細情報が表示されます。
    • name: このドキュメントを作成した組織の名前。
    • email: 問い合わせや苦情がある場合の組織のメールアドレス。
  • testingData: パッケージで実施されたセキュリティ テストの詳細。次の詳細情報が表示されます。
    • testType: 実施されたテストの種類。例: FUZZ
    • tool: テストの実施に使用されたツールの名前。
    • testStatus: テストのステータス。ステータスは次のいずれかになります。
      • TESTED: テストが実行されました。
      • NOT_REQUIRED: パッケージのテストは必要ありませんでした。たとえば、インターフェースのみを含むパッケージでは、ファズテストは必要ありません。
      • UNTESTED: パッケージはテストされませんでした。

licenseInfo.json

  • package_name: パッケージの名前(文字列形式)。
  • package_version: パッケージのバージョン。
  • license_info: パッケージに関連付けられているライセンス。

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

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

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

認証の設定については、認証を設定するをご覧ください。

ステップ 2 - URL を作成する

gcloud storage コマンドと curl コマンドのいずれかを使用して、メタデータをダウンロードできます。次の情報を使用して、両方の URL を作成します。

  • 言語: java または python。値は小文字にする必要があります。
  • Package_ID: Java の場合は groupId:artifactId、Python の場合は packageName。値は小文字にする必要があります。
  • バージョン: パッケージのバージョン。
  • Metadata_Type: buildinfo.zip、vexinfo.zip、healthinfo.zip のいずれかを選択します。

URL は次の形式にする必要があります。

gcloud

gs://cloud-aoss-metadata/<language>/<package_id>/<version>/<metadata_type>

URL は小文字にする必要があります。

Python の URL の例: gs://cloud-aoss-metadata/python/cryptography/37.0.4/buildinfo.zip

Java の URL の例: gs://cloud-aoss-metadata/java/com.google.errorprone:error_prone_annotations/2.15.0/buildinfo.zip

curl

https://storage.googleapis.com/cloud-aoss-metadata/<language>/<package_id>/<version>/<metadata_type>

URL は小文字にする必要があります。

Python の URL の例: https://storage.googleapis.com/cloud-aoss-metadata/python/cryptography/37.0.4/buildinfo.zip

Java の URL の例: https://storage.googleapis.com/cloud-aoss-metadata/java/com.google.errorprone:error_prone_annotations/2.15.0/buildinfo.zip

ステップ 3 - メタデータをダウンロードする

次のコマンドを使用してメタデータをダウンロードします。

gcloud

gcloud storage cp  "gs://cloud-aoss-metadata/<language>/<package_id>/<version>/<metadata_type>" outputFolderLocation

特定のパッケージとバージョンのビルド情報、健全性情報、VEX 情報などのすべてのメタデータ タイプをまとめてダウンロードするには、次のコマンドを使用します。

gcloud storage cp "gs://cloud-aoss-metadata/<language>/<package_id>/<version>" outputFolderLocation --recursive

メタデータは 3 つの ZIP ファイル(buildinfo.zip、healthinfo.zip、vexinfo.zip)に分散され、出力フォルダにダウンロードされます。

curl

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -L https://storage.googleapis.com/cloud-aoss-metadata/<language>/<package_id>/<version>/<metadata_type> -o output.zip

ステップ 4 - メタデータを抽出する

ZIP ファイルを展開します。macOS または Linux では、unzip コマンド(unzip input.zip -d outputFolder)を使用します。各 ZIP ファイルには、JSON ファイルと signature.zip ファイルが含まれています。JSON ファイルには実際のセキュリティ メタデータが含まれ、signature.zip ファイルには JSON の Google 署名を検証するファイルが含まれています。

ライセンス情報をダウンロードする

すべての Assured OSS パッケージのライセンス情報は、1 つの JSON ファイルに格納されています。このファイルをダウンロードするには、次のコマンドを実行します。

gcloud

gcloud storage cp  "gs://cloud-aoss/info/LicenseInfo.json" outputFolderLocation

curl

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -L https://storage.googleapis.com/cloud-aoss/info/LicenseInfo.json

ライセンス メタデータ ファイルの署名をダウンロードするには、次のコマンドを実行します。

gcloud

gcloud storage cp "gs://cloud-aoss/info/LicenseInfo.json-sig.zip" outputFolderLocation

curl

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -L https://storage.googleapis.com/cloud-aoss/info/LicenseInfo.json-sig.zip -o output.zip

次のステップ