リポジトリへの直接アクセスを使用して Python パッケージをダウンロードする

Assured OSS を Security Command Center と統合すると、Assured Open Source Software パッケージが、管理するプロジェクト内に作成された Artifact Registry リポジトリにホストされます。

このページでは、Assured OSS の Artifact Registry リポジトリに接続して、Python パッケージに直接アクセスしてダウンロードする方法について説明します。

このドキュメントは、Assured OSS の有料ティアにのみ適用されます。無料枠については、無料枠の直接リポジトリ アクセスを使用して Python パッケージをダウンロードするをご覧ください。

始める前に

  1. Assured OSS を Security Command Center と統合します。

  2. リクエストされたサービス アカウントの Assured OSS への接続を検証します。

  3. Google Cloud CLI の最新バージョンをインストールします。

  4. すでに Google Cloud CLI をインストールしている場合は、次のコマンドを実行して、最新バージョンがインストールされていることを確認してください。

    gcloud components update
    

認証の設定

次のいずれかの方法で Assured OSS Python パッケージ リポジトリに対して認証できます。

  • キーリングによる認証
  • サービス アカウント キーによる認証

以降のセクションでは、これらの認証方法の設定方法について説明します。

キーリングによる認証

Artifact Registry に対する認証を行うように Python キーリングを使用するには、キーリングによる認証および認証情報の検索の順番の情報をご覧ください。認証には Python キーリングを使用することをおすすめします。

認証用のキーリングを設定するには、次の手順に従います。

  1. keyring ライブラリをインストールします。

    pip install keyring
    
  2. Artifact Registry バックエンドをインストールします。

    pip install keyrings.google-artifactregistry-auth
    
  3. バックエンドを一覧表示してインストールを確認します。

    keyring --list-backends
    

    このリストには以下が含まれます。

    • ChainerBackend(priority:10)
    • GooglePythonAuth(priority:9)
  4. アプリケーションのデフォルト認証情報の設定については、認証の設定をご覧ください。

    この手順により、Assured OSS 認証ヘルパーがリポジトリとの接続時に鍵を取得するようになります。

サービス アカウント キーによる認証

アプリケーションでユーザー名とパスワードによる認証が必要な場合は、サービス アカウント キーで認証します。

パッケージ リポジトリの URL https://us-python.pkg.dev/PROJECT_ID/assuredoss-python/simple を URL https://_json_key_base64:BASE64_KEY@us-python.pkg.dev/PROJECT_ID/assuredoss-python/simple に置き換えます。

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

  • PROJECT_ID は、Assured Open Source Software の設定時に選択したプロジェクトの ID に置き換えます。
  • BASE64_KEY は、サービス アカウント JSON キーファイル全体の base64 エンコードに置き換えます。サービス アカウントの JSON キーファイル全体を base64 エンコードに変換するには、次のコマンドを使用します。

    BASE64_KEY=$(cat KEY_FILE_LOCATION | base64)
    

    KEY_FILE_LOCATION は、サービス アカウントの JSON キーファイルの場所に置き換えます。

パッケージをインストール

以下の手順では、依存関係をダウンロードするリポジトリとして PyPI を使用していることを前提としています。別のリポジトリを使用している場合は、別の手順で依存関係をダウンロードする必要があります。

Assured OSS の既存のパッケージをインストールする

ダウンロードする Assured OSS Python パッケージを指定するには、2 つの requirements.txt ファイルを作成します。サンプル ファイルは次のとおりです。

  • requirements-google.txt

    # Packages present in Google's Artifact Registry
    
    urllib3==1.26.11 --hash=sha256:1cffe1aa066363a75c856f261c8fce62d87f7c40ce0f46453ea12bf652b12a13
    jsonschema==4.13.0 --hash=sha256:29895bfe55b93b75552fbdd1e09aa0c82b7c1c9395d4f267e10c7d43cd31a74e
    
  • requirements-pypi.txt

    # Packages present in Google's Artifact Registry are mentioned here so that pip
    # downloads their dependencies from PyPI.
    
    urllib3==1.26.11
    jsonschema==4.13.0
    
    # Below this comment, add any package version which you need but is NOT
    # present in Google's Artifact Registry and therefore needs to be downloaded from
    # PyPI.
    

パッケージをダウンロードするには、次のコマンドを実行します。

  • Assured OSS の Artifact Registry に存在する必要なパッケージをダウンロードするには、次のコマンドを実行します。

     pip install --require-hashes --requirement=requirements-google.txt --index-url https://_json_key_base64:BASE64_KEY@us-python.pkg.dev/PROJECT_ID/assuredoss-python repo/simple  -v --no-deps
    

    次の点を考慮してください。

    • --require-hashes は任意です。含まれる場合、requirements.txt ファイル内のすべてのパッケージおよびすべてのパッケージ バージョンに対してハッシュが指定されます。
    • -v は任意です。指定した場合、コマンドはより多くの出力を提供します。
  • Assured OSS の Artifact Registry に存在しない必要なパッケージをダウンロードするには、次のコマンドを実行します。

     pip install --requirement=requirements-pypi.txt --index-url https://pypi.org/simple -v
    

    このコマンドは、前述のコマンドを使用してダウンロードしたパッケージの不足している依存関係もダウンロードします。

Assured OSS で利用可能なすべての Python パッケージを一覧表示する

API を使用して、Artifact Registry リポジトリで使用可能なすべての Python パッケージのリストを取得するには、Assured OSS で利用可能なすべての Python パッケージを一覧表示するをご覧ください。

requirements-google.txt ファイルの生成

このセクションでは、Python パッケージのダウンロードに必要な requirements-google.txt ファイルの生成に関する追加情報について説明します。ハッシュをダウンロードして、環境用の requirements-google.txt ファイルを生成するには、次の 2 つのオプションのいずれかを使用します。

  • スクリプトを使用して、すべてのアーティファクトに対して 1 つの要件ファイルを生成する

  • アーティファクトごとに個別の要件ファイルをダウンロードします。

以降のセクションでは、これらのオプションについて詳しく説明します。

オプション 1: スクリプトを使用して、すべてのアーティファクトに対して 1 つの要件ファイルを生成する

generator.sh スクリプトを使用して、Linux オペレーティング システム用 Assured OSS で利用可能なすべての Python パッケージ(およびそれらのハッシュ)用の単一の requirements-google.txt ファイルを生成します。パッケージは、Python のバージョン、マシン アーキテクチャ、オペレーティング システムなどの制約を満たす必要があります。その後、不要なパッケージのバージョンを削除して、結果のファイルを使用できます。

generator.sh スクリプトは、次の 2 つの形で役立ちます。

  • システムに正常にインストールできる、Assured OSS で使用できる Python パッケージ バージョンの最新のリストを生成します。
  • requirements-google.txt ファイルおよびすべてのハッシュを生成します。

必要なスクリプトとその README.md ファイルは Cloud Storage バケット(gs://cloud-aoss/utils/python-requirements-txt/v1.0)で利用可能で、gsutil コマンドライン ツールを使用してダウンロードできます。

スクリプトと README.md ファイルをダウンロードする手順は次のとおりです。

  1. 次のコマンドを使用して、サービス アカウントで認証を行い、Cloud Storage バケットにアクセスします。

    gcloud auth activate-service-account --key-file KEY_FILE
    

    KEY_FILE は、設定時に指定したサービス アカウントの認証情報を含むファイルのパスに置き換えます。

  2. 次のコマンドを使用して、generator.sh をマシンにダウンロードします。

    gsutil cp -r gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator.sh PATH_TO_LOCAL_STORE
    

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

  3. 次のコマンドを使用して README.md ファイルをダウンロードします。

    gsutil cp -r gs://cloud-aoss/utils/python-requirements-txt/v1.0/README.md PATH_TO_LOCAL_STORE
    

    PATH_TO_LOCAL_STORE は、ダウンロードしたファイルを保存するローカルパスに置き換えます。README.md ファイルには、スクリプトの使用手順が含まれています。

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

  • requirements-google.txt ファイルを生成するには、次のコマンドを実行します。

     chmod +x generator.sh
     ./generator.sh
    
  • CSV ファイル内のパッケージの情報を取得するには、次のコマンドを実行します。

    chmod +x generator.sh
    ./generator.sh -i
    

オプション 2: 必要なアーティファクトごとに requirements.txt をダウンロードする

Python アーティファクトごとに個別の requirements.txt(ハッシュを含む)ファイルをダウンロードし、単一の requirements.txt ファイルに結合することもできます。

アーティファクト ハッシュは Cloud Storage バケットで利用可能で、gsutil コマンドライン ツールを使用してダウンロードできます。各パッケージとバージョンのハッシュは、gs://cloud-aoss/python/PACKAGE_NAME/VERSION Cloud Storage バケットのロケーションにあります。

requirements.txt ファイルをダウンロードするには、次の手順に従います。

  1. 次のコマンドを使用して、サービス アカウントで認証を行い、Cloud Storage バケットにアクセスします。

    gcloud auth activate-service-account --key-file KEY_FILE
    

    KEY_FILE は、サービス アカウントの認証情報を含むファイルのパスに置き換えます。

  2. 次のコマンドを使用して、特定のパッケージとバージョンの requirements.txt をローカルマシンにダウンロードします。

    gsutil cp -r gs://cloud-aoss/python/PACKAGE_NAME/VERSION PATH_TO_LOCAL_STORE
    

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

    • PACKAGE_NAME: パッケージ名
    • VERSION: パッケージのバージョン
    • PATH_TO_LOCAL_STORE: ファイルをダウンロードするローカルパス

    サンプル コマンド:

    gsutil cp -r gs://cloud-aoss/python/bleach/5.0.0 /tmp/bleach

    サンプル requirements.txt ファイル

    bleach==5.0.0 \
     --hash=sha256:6d286e765bfd3e309209cfa1d063e4d46afa966dea8cb97431c02b1e3067d812
    

    このような requirements.txt ファイルのコンテンツは、1 つの requirements-google.txt ファイルに結合できます。

次のステップ