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 を使用してスクリプトをダウンロードする手順は次のとおりです。
アプリケーションのデフォルト認証情報(ADC)を使用して認証を設定します。
container-analysis クライアント ライブラリをインストールします。具体的には、このコマンドで次のものをインストールする必要があります。
pip install google-cloud-containeranalysis次のコマンドを使用して、cloud-kms パッケージと cryptography パッケージをインストールします。
pip install --upgrade google-cloud-kms pip install --upgrade cryptography次のコマンドを使用して、
download_metadata.pyをシステムにダウンロードします。gcloud storage cp gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata.py PATH_TO_LOCAL_STORE --recursivePATH_TO_LOCAL_STORE は、ファイルを保存するローカルパスに置き換えます。
次のコマンドを使用して、スクリプトの使用手順が記載された
README.mdをダウンロードします。gcloud storage cp gs://cloud-aoss/utils/python-download-metadata/v1.1/README.md PATH_TO_LOCAL_STORE --recursivePATH_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`