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

このページでは、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 メタデータのサンプルです。

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

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)のサンプル例。次の例に示すように、署名 zip URL は externalRefs : referenceLocator フィールドから取得できます。

"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: 使用できる値は buildinfovexinfohealthinfo です。
    • 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.jsonvexInfo.jsonhealthInfo.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 は、ルート証明書のローカルパスに置き換えます。

次のステップ