Assured OSS の無料枠で署名を検証する

キュレートされたオープンソース パッケージの整合性を確認するには、Assured Open Source Software(Assured OSS)アーティファクトの署名を検証します。

このドキュメントは無料枠にのみ適用されます。プレミアム ティアについては、セキュリティ メタデータにアクセスしてパッケージを検証するをご覧ください。

パッケージの検証

パッケージ署名は、Cloud Storage バケット内のパッケージとは別に ZIP 形式で保存されます。署名は、Assured OSS 検証ツール(aoss-verifier)または検証スクリプトを使用して検証できます。

aoss-verifier ツールを使用する

このツールを使用する前に、システムに Go がインストールされていることを確認してください。Go がインストールされていない場合は、Go のウェブサイトから Go をインストールします。

  1. オープンソース ソフトウェア パッケージの真正性と完全性を検証するには、aoss-verifier ツールをインストールします。

  2. $(go env GOPATH)/bin をエクスポートして、aoss-verifier verify-package コマンドを実行します。

    aoss-verifier verify-package \
       --language LANGUAGE \
       --package_id PACKAGE_ID \
       --version VERSION \
       --artifact_path ARTIFACT_PATH \
       [--disable_certificate_verification] \
       [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \
       [--disable_deletes]
    

    次のように置き換えます。

    • LANGUAGE: プログラミング パッケージの言語(java または python)。値は小文字にする必要があります。
    • PACKAGE_ID: Java の場合は groupId:artifactId、Python の場合は packageName。値は小文字にする必要があります。
    • VERSION: パッケージのバージョン。
    • ARTIFACT_PATH: 検証するローカル ディレクトリ内のデータファイルへのパス。次のファイル拡張子を使用します。
      • Java パッケージの jar ファイル拡張子
      • Python パッケージの whl ファイル拡張子

    --disable_certificate_verification はオプションのフラグです。使用されている場合、証明書チェーンを介してリーフ証明書とルート証明書の照合をスキップします。

    --temp_downloads_path は、ファイルをダウンロードするパスを設定するオプションのフラグです。(TEMP_DOWNLOADS_DIR_PATH を置き換えます)。このフラグが設定されていない場合、ファイルは現在のディレクトリの tmp_downloads フォルダにダウンロードされます。

    --disable_deletes は、ダウンロードしたファイルを保持するオプションのフラグです。デフォルトでは、ツールはダウンロードしたすべてのファイルをクリーンアップします。

詳細については、README をご覧ください。

検証スクリプトの使用

このセクションでは、検証スクリプトを使用して、ダウンロードしたパッケージの署名を検証する方法について説明します。

ステップ 1: 署名付き URL を取得する

ZIP ファイルの URL は、各パッケージのセキュリティ メタデータで確認できます。次の例は、Container Analysis メタデータのサンプルです。

次の例に示すように、description: digestUrl フィールドに署名 zip URL があります。

package {
  distribution {
    cpe_uri: "cpe:2.3:a:JAVA::com.fasterxml.jackson.core:jackson-databind:2.13.3:*:*:*:*:*:*:*"
    maintainer: "<nil>"
    url: "https://us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/com/fasterxml/jackson/core/jackson-databind/2.13.3/jackson-databind-2.13.3.jar"
    description: "{\n \"artifactMetadataList\": [\n {\n \"digestUrl\": \"gs://cloud-aoss/java/com.fasterxml.jackson.core:jackson-databind/2.13.3/jackson-databind-2.13.3_binary_2022-10-12T06:54:05Z.zip\"\n }\n ]\n}"
  }
  distribution {
    cpe_uri: "cpe:2.3:a:JAVA::com.fasterxml.jackson.core:jackson-databind:2.13.3:*:*:*:*:*:*:*"
    url: "https://us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/com/fasterxml/jackson/core/jackson-databind/2.13.3/jackson-databind-2.13.3-sources.jar"
    description: "{\n  \"digestUrl\": \"gs://cloud-aoss/java/com.fasterxml.jackson.core:jackson-databind/2.13.3/jackson-databind-2.13.3-sources_source_2022-10-12T06:54:05Z.zip\"\n}"
  }
}

Cloud Storage メタデータ(buildInfo.json file)のサンプル例。次の例に示すように、externalRefs : referenceLocator フィールドから署名 zip URL を取得できます。

"packages": [
        {
            "SPDXID": "SPDXRef-Package-logback-core-1.2.11.jar",
            "checksums": [
                {
                    "algorithm": "SHA256",
                    "checksumValue": "c847e0e310acda8bc1347c9d9cc051e91210b9f943e131fceb5034c2f0c9a5d8"
                }
            ],
            "downloadLocation": "https://us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/ch/qos/logback/logback-core/1.2.11/logback-core-1.2.11.jar",
            "externalRefs": [
                {
                    "referenceCategory": "SECURITY",
                    "referenceLocator": "cpe:2.3:a:*:JAVA\\:\\:ch\\.qos\\.logback\\:logback\\-core:1\\.2\\.11:*:*:*:*:*:*:*",
                    "referenceType": "cpe23Type"
                },
                {
                    "referenceCategory": "OTHER",
                    "referenceLocator": "gs://cloud-aoss/java/ch.qos.logback:logback-core/1.2.11/logback-core-1.2.11_binary_2022-10-12T14:19:11Z.zip",
                    "referenceType": "digestURL"
                }
            ],

手動検証にはローカル署名の zip を使用し、検証スクリプトを使用する場合は Cloud Storage URL を直接使用できます。signature.zip ファイルをダウンロードする手順は次のとおりです。

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

  2. 次のコマンドを使用して signature.zip をダウンロードします。

      gcloud storage cp SIGNATURE_ZIP_URL PATH_TO_LOCAL_STORE --recursive
    

    次のように置き換えます。

    • SIGNATURE_ZIP_URL: 署名 zip の URL。
    • PATH_TO_LOCAL_STORE: ファイルをダウンロードするローカルパス。

ステップ 2: ルート証明書を取得する

ルート証明書にアクセスするには、次の URL を使用します。

https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

証明書をローカルにダウンロードするか、証明書リンクを直接使用できます。証明書をダウンロードするには、次のコマンドを実行します。

curl -o PATH_TO_LOCAL_STORE/ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

PATH_TO_LOCAL_STORE は、証明書をダウンロードするローカルパスに置き換えます。

ステップ 3: パッケージ ファイルの場所を取得する

検証するファイルは、Java パッケージの jar ファイルと Python パッケージの wheel ファイルです。このファイルは、検証用の PATH_TO_DATA_FILE になります。

ステップ 4: 確認

手動署名検証の手順に沿って署名 zip を手動で検証することも、検証スクリプトを使用することもできます。

検証スクリプトを使用して検証するには、次のコマンドを実行します。

  1. 検証スクリプトをダウンロードして権限を付与します。

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
      chmod +x signatureverification.sh
    
  2. 検証スクリプトを実行して検証します。署名 zip とルート証明書には、リモート URL またはローカルパスを使用できます。

      ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url SIGNATURE_ZIP_URL --root_cert_url ROOT_CERT_URL
    

    次のように置き換えます。

    • PATH_TO_DATA_FILE は、ステップ 3 で特定したパッケージ ファイルのパスに置き換えます。
    • SIGNATURE_ZIP_URL は、ステップ 1 で取得した署名 zip URL に置き換えます。
    • ROOT_CERT_URL は、ステップ 2 で取得したルート証明書の URL に置き換えます。

メタデータの検証

このセクションでは、Cloud Storage を使用してアクセスした Assured OSS メタデータの署名を検証する方法について説明します。

aoss-verifier ツールを使用する

aoss-verifier ツールを使用してメタデータを検証します。

このツールを使用する前に、Go をインストールします。

  1. aoss-verifier ツールをインストールします。

  2. $(go env GOPATH)/bin をエクスポートして、aoss-verifier verify-metadata コマンドを実行します。

    aoss-verifier verify-metadata \
       --metadata_type TYPE \
       --language LANGUAGE \
       --package_id PACKAGE_ID \
       --version VERSION \
       [--disable_certificate_verification] \
       [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \
       [--disable_deletes]
    

    次のように置き換えます。

    • TYPE: 使用できる値は buildinfo、vexinfo、healthinfo です。
    • LANGUAGE: プログラミング パッケージの言語(java または python)。値は小文字にする必要があります。
    • PACKAGE_ID: Java の場合、形式は groupId:artifactId です。Python の場合、形式は packageName です。値は小文字にする必要があります。
    • VERSION: パッケージのバージョン。

    --disable_certificate_verification はオプションのフラグです。使用されている場合、証明書チェーンを介してリーフ証明書とルート証明書の照合をスキップします。

    --temp_downloads_path は、ファイルをダウンロードするパスを設定するオプションのフラグです(TEMP_DOWNLOADS_DIR_PATH を置き換えます)。このフラグが設定されていない場合、ファイルは現在のディレクトリの tmp_downloads フォルダにダウンロードされます。

    --disable_deletes は、ダウンロードしたファイルを保持するオプションのフラグです。デフォルトでは、ツールはダウンロードしたすべてのファイルをクリーンアップします。

詳細については、README をご覧ください。

検証スクリプトの使用

このセクションでは、検証スクリプトを使用してセキュリティ メタデータ ファイルを検証する方法について説明します。

ステップ 1: 署名 ZIP ファイルとメタデータ ファイルを取得する

メタデータにアクセスすると同様に、メタデータにアクセスできます。メタデータ ファイルは signature.zip ファイルとともに存在します。

例 - buildInfo.zip の内容

buildInfo.json
signature.zip

buildInfo.json は検証が必要なメタデータ ファイルで、signature.zip は署名 ZIP です。

ステップ 2: ルート証明書を取得する

次の URL リンクを使用してルート証明書を取得します。

https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

証明書をローカルにダウンロードするか、証明書リンクを直接使用できます。証明書をダウンロードするには、次のコマンドを実行します。

curl -o PATH_TO_LOCAL_STORE/ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt

PATH_TO_LOCAL_STORE は、証明書をダウンロードするローカルパスに置き換えます。

ステップ 3: 確認

signature.zip は、手動検証または検証スクリプトを使用して検証できます。

検証スクリプトを使用して検証するには、次のコマンドを実行します。

  1. 検証スクリプトをダウンロードして権限を付与します。

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
      chmod +x signatureverification.sh
    
  2. 検証スクリプトを実行して検証します。署名 ZIP にはローカルパスを使用する必要があります。ルート証明書には、URL またはローカルパスを使用できます。データファイルは、検証するメタデータ ファイル(buildInfo.json、vexInfo.json、healthInfo.json)です。

      ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_local_path SIGNATURE_LOCAL_PATH --root_cert_url ROOT_CERT_URL
    

    次のように置き換えます。

    • PATH_TO_DATA_FILE は、手順 1 で取得した検証対象のメタデータ ファイルに置き換えます。

    • SIGNATURE_LOCAL_PATH は、手順 1 で取得した署名 zip URL に置き換えます。

    • ROOT_CERT_URL は、手順 2 で取得したルート証明書の URL に置き換えます。

      すでにダウンロードしたローカル証明書を使用する場合は、代わりに次のオプションを使用します。

      --root_cert_local ROOT_CERT_LOCAL
      

      ROOT_CERT_LOCAL は、ローカル証明書のパスに置き換えます。

ユーティリティ スクリプトの検証

Assured OSS には 3 つのユーティリティ スクリプトが用意されています。このセクションでは、これらのスクリプトの署名を検証する方法について説明します。

Python Requirements.txt ジェネレータ

このファイルの署名には gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator-sig.zip でアクセスします。signature.zip は、手動検証または検証スクリプトを使用して検証できます。検証スクリプトを使用して署名を簡単に検証する手順は次のとおりです。

  1. 認証を設定します。

  2. requirements.txt 生成スクリプト ファイルをまだダウンロードしていない場合は、ファイルをダウンロードします。

     gcloud storage cp "gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator.sh" . --recursive
    
  3. ルート証明書を取得します。URL リンクは https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt です。証明書をローカルにダウンロードするか、証明書リンクを直接使用できます。証明書をダウンロードするには、次のコマンドを実行します。

    curl -o PATH_TO_LOCAL_STORE/ca.crt "https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt"
    

    PATH_TO_LOCAL_STORE は、証明書をダウンロードするローカルパスに置き換えます。

  4. まだダウンロードしていない場合は、検証スクリプトをダウンロードします。

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  5. 検証スクリプトを実行して検証します。

    ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url "gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator-sig.zip" --root_cert_url ROOT_CERT_URL
    

    次のように置き換えます。

    • PATH_TO_DATA_FILE は、ステップ 2 で取得した、検証する generator.sh スクリプトのローカルパスに置き換えます。
    • ROOT_CERT_URL は、ルート証明書の URL に置き換えます。すでにダウンロードされているローカル証明書を使用する場合は、次のコマンドを実行します。
    –root_cert_local ROOT_CERT_LOCAL
    

    ROOT_CERT_LOCAL は、ルート証明書のローカルパスに置き換えます。

署名検証スクリプト

このファイルの署名には gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification-sig.zip でアクセスします。signature.zip は、手動検証または検証スクリプトを使用して検証できます。検証スクリプトを使用して署名を簡単に検証する手順は次のとおりです。

  1. 認証を設定します。

  2. 署名検証スクリプト ファイルをまだダウンロードしていない場合は、ファイルをダウンロードします。

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  3. ルート証明書を取得します。URL リンクは https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt です。証明書をローカルにダウンロードするか、証明書リンクを直接使用できます。証明書をダウンロードするコマンド:

    curl -o PATH_TO_LOCAL_STORE/ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    

    PATH_TO_LOCAL_STORE は、証明書をダウンロードするローカルパスに置き換えます。

  4. 検証スクリプトを実行して検証します。

    ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification-sig.zip" --root_cert_url ROOT_CERT_URL
    

    次のように置き換えます。

    PATH_TO_DATA_FILE は、ステップ 2 で取得した、検証する検証スクリプトのローカルパスに置き換えます。ROOT_CERT_URL は、ルート証明書の URL に置き換えます。すでにダウンロードしたローカル証明書を使用する場合は、代わりに次のオプションを使用します。

    –root_cert_local ROOT_CERT_LOCAL
    

    ROOT_CERT_LOCAL は、ルート証明書のローカルパスに置き換えます。

メタデータ スクリプトをダウンロードする

このファイルの署名には gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata-sig.zip でアクセスします。signature.zip は、手動検証または検証スクリプトを使用して検証できます。検証スクリプトを使用して署名を簡単に検証する手順は次のとおりです。

  1. 認証を設定します。

  2. download_metadata.py スクリプト ファイルをまだダウンロードしていない場合は、ファイルをダウンロードします。

    gcloud storage cp "gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata.py" . --recursive
    
  3. ルート証明書を取得します。URL リンクは https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt です。証明書をローカルにダウンロードするか、証明書リンクを直接使用できます。

    証明書をダウンロードするには、次のコマンドを実行します。

    curl -o PATH_TO_LOCAL_STORE/ca.crt https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    

    PATH_TO_LOCAL_STORE は、証明書をダウンロードするローカルパスに置き換えます。

  4. 検証スクリプトをダウンロードします。

    gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0/signatureverification.sh" . --recursive
    chmod +x signatureverification.sh
    
  5. 検証スクリプトを実行して検証します。

    ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE --signature_url gs://cloud-aoss/utils/python-download-metadata/v1.1/download_metadata-sig.zip --root_cert_url ROOT_CERT_URL
    

    次のように置き換えます。

    • PATH_TO_DATA_FILE は、ステップ 2 で取得した、検証する download_metadata.py スクリプトのローカルパスに置き換えます。
    • ROOT_CERT_URL は、ルート証明書の URL に置き換えます。すでにダウンロードされているローカル証明書を使用する場合は、次のコマンドを実行します。
    –root_cert_local ROOT_CERT_LOCAL
    

    ROOT_CERT_LOCAL は、ルート証明書のローカルパスに置き換えます。

次のステップ