指紋を使用してパッケージ バージョンの ID を検証する

アーティファクトのフィンガープリントを使用すると、Artifact Registry リポジトリ内のパッケージを一意に識別できます。

パッケージをリポジトリに push すると、Artifact Registry はそのパッケージ バージョンのフィンガープリントを計算します。フィンガープリントは 暗号化によって変更できない参照であり、 Compute Engine や Cloud Build Google Cloud などのシステム間で移動するときにパッケージが変更されていないことを検証するために使用できます。パッケージのフィンガープリントを取得したら、それを使用して特定の Artifact Registry API リクエストでパッケージが有効であることを確認できます。 ローカルのフィンガープリントを手動で計算してリポジトリ内のフィンガープリントと比較することで、同じパッケージのローカル インスタンスとリポジトリ インスタンスを検証することもできます。

始める前に

  1. Artifact Registry を有効にします。 これには Artifact Registry API の有効化と、Google Cloud CLI のインストールが含まれます。
  2. (省略可)gcloud コマンドのデフォルトを構成します

必要なロール

Artifact Registry リポジトリでパッケージ バージョンのフィンガープリントを表示するために必要な権限を取得するには、 プロジェクトに対するArtifact Registry 読み取り roles/artifactregistry.reader)IAM ロールを付与するよう管理者に依頼してください。 Google Cloud ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタム ロールや他の事前定義 ロールから取得することもできます。

リポジトリ内のパッケージ バージョンのフィンガープリントを取得する

フィンガープリントの構造は次のとおりです。

VERSION@DIRSUM_SHA256:HASH_VALUE

Artifact Registry リポジトリ内のパッケージ バージョンのフィンガープリントを取得するには、Google Cloud CLI で次のコマンドを入力します。

gcloud artifacts versions describe VERSION --repository=REPOSITORY --location=LOCATION --package=PACKAGE_NAME

ここで

  • VERSION は、1.0543 などのパッケージのバージョンです。
  • REPOSITORY は、評価するパッケージを含むリポジトリです。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンの ロケーションです。デフォルトのデフォルトの場所を設定すると、このフラグを 省略できます。
  • PACKAGE_NAME は、パッケージの名前です。

レスポンスは次のようになります。

fingerprints:
- type: DIRSUM_SHA256
  value: 7c07b910c6dd6df6984a5591d00ad0074fe24cd81145d2c681cdfda3b3d65a04
name: projects/test-project/locations/us-west1/repositories/test-repo/packages/test-pkg/versions/v1
updateTime: '2025-08-15T00:03:41.809228Z'

フィンガープリントの完全なアドレスは、パッケージ バージョン、フィンガープリント タイプ、ハッシュ値の順に並べたものです。この例では、フィンガープリント アドレスは VERSION@DIRSUM_SHA256:7c07b910c6dd6df6984a5591d00ad0074fe24cd81145d2c681cdfda3b3d65a04です。

Artifact Registry API で不変の参照としてフィンガープリントを検証する

パッケージのフィンガープリントが次の形式でフォーマットされている場合、特定の Artifact Registry API リクエストはリポジトリからパッケージを検証します。

VERSION@DIRSUM_SHA256:HASH_VALUE

たとえば、リポジトリ内のパッケージにアタッチメントを作成するとします。 次のコマンドでは、target に定義されたパッケージがフォーマットされ、Artifact Registry がパッケージのフィンガープリントも検証します。

  gcloud artifacts attachments create my-attachment --target='projects/test-project/locations/us-west1/repositories/test-repo/packages/test-pkg/versions/v1@dirsum_sha256:30330c6b65a26ebf1a13e1b9ded4068b4c36d72ed3b62226e3243b5bee18fd31' --attachment-type="application/vnd.in-toto+json" --attachment-namespace="mynamespace.com" --files=att.txt

指定されたフィンガープリントが現在のバージョンのフィンガープリントと一致しない場合、Artifact Registry は API リクエストを拒否し、failed_precondition エラーを表示します。

次のリクエストは、API ライブラリ、Google Cloud CLI、curl を使用して渡されると、指定されたフィンガープリントを検証します。

次のリクエストは、API ライブラリと curl を使用して渡されると、フィンガープリントを検証します。

パッケージのローカル インスタンスとリポジトリ インスタンスが同じであることを検証する

システム間で移動するときにパッケージが変更されていないことを検証するには、リポジトリ外のパッケージのインスタンスのフィンガープリントを手動で計算します。Google Cloud

フィンガープリントを手動で計算する手順は次のとおりです。

  1. リポジトリ内のパッケージのフィンガープリントを表示するの説明に従って、Artifact Registry でパッケージのフィンガープリントを見つけます。

  2. 外部パッケージのフィンガープリントを手動で計算します。

    1. パッケージ内の各ファイルの短いファイル名と個々の SHA256 ハッシュを取得します。

      1. コンソールで [リポジトリ] ページを開きます。 Google Cloud

        [リポジトリ] ページを開く

      2. リポジトリを選択し、検証するパッケージ バージョンを含むイメージを選択します。

      3. [ファイル] タブをクリックします。

      4. ページに表示される各ファイルの短いファイル名と SHA256 ハッシュを特定します。 短いファイル名は、ファイルの場所の後の最後の文字列です。 たとえば、次のスクリーンショットは、Maven リポジトリ内のパッケージの Version 5.0 の 6 つのファイルを示しています。各ファイル名は my-app-5.0 で始まります。各ファイルのハッシュ値は、[Hashes] 列に表示されます。

        Maven パッケージのバージョン 5.0 の [**ファイル**] タブのサンプル。

    2. 短いファイル名でファイルをアルファベット順に並べ替えます。

    3. 並べ替えられたファイル エントリごとに、ハッシュ値とファイル名の間に 2 つのスペースを追加し、null バイトで終わるように、ファイル情報を次の短縮文字列に結合します。

      HASH_VALUE FILE_NAME/0

    4. 各短縮文字列を取得し、文字列間にスペースや文字を入れずに 1 つの完全なシーケンスに結合します。

    5. 完全なシーケンスの SHA256 ハッシュ値を計算します。最終的な SHA256 ハッシュ値は、外部パッケージの dirsum_sha256 です。

  3. 手動で計算したフィンガープリントと、リポジトリ内のパッケージのフィンガープリントを比較します。両方のフィンガープリントが同じ場合、リポジトリ内のパッケージのインスタンスは変更されていません。