アーティファクトのフィンガープリントを使用すると、Artifact Registry リポジトリ内のパッケージを一意に識別できます。
パッケージをリポジトリに push すると、Artifact Registry はそのパッケージ バージョンのフィンガープリントを計算します。フィンガープリントは 暗号化によって変更できない参照であり、 Compute Engine や Cloud Build Google Cloud などのシステム間で移動するときにパッケージが変更されていないことを検証するために使用できます。パッケージのフィンガープリントを取得したら、それを使用して特定の Artifact Registry API リクエストでパッケージが有効であることを確認できます。 ローカルのフィンガープリントを手動で計算してリポジトリ内のフィンガープリントと比較することで、同じパッケージのローカル インスタンスとリポジトリ インスタンスを検証することもできます。
始める前に
- Artifact Registry を有効にします。 これには Artifact Registry API の有効化と、Google Cloud CLI のインストールが含まれます。
- (省略可)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
フィンガープリントを手動で計算する手順は次のとおりです。
リポジトリ内のパッケージのフィンガープリントを表示するの説明に従って、Artifact Registry でパッケージのフィンガープリントを見つけます。
外部パッケージのフィンガープリントを手動で計算します。
パッケージ内の各ファイルの短いファイル名と個々の SHA256 ハッシュを取得します。
コンソールで [リポジトリ] ページを開きます。 Google Cloud
リポジトリを選択し、検証するパッケージ バージョンを含むイメージを選択します。
[ファイル] タブをクリックします。
ページに表示される各ファイルの短いファイル名と SHA256 ハッシュを特定します。 短いファイル名は、ファイルの場所の後の最後の文字列です。 たとえば、次のスクリーンショットは、Maven リポジトリ内のパッケージの
Version 5.0の 6 つのファイルを示しています。各ファイル名はmy-app-5.0で始まります。各ファイルのハッシュ値は、[Hashes] 列に表示されます。![Maven パッケージのバージョン 5.0 の [**ファイル**] タブのサンプル。](https://docs.cloud.google.com/static/artifact-registry/docs/images/fingerprint-file-list.png?hl=ja)
短いファイル名でファイルをアルファベット順に並べ替えます。
並べ替えられたファイル エントリごとに、ハッシュ値とファイル名の間に 2 つのスペースを追加し、null バイトで終わるように、ファイル情報を次の短縮文字列に結合します。
HASH_VALUE FILE_NAME/0各短縮文字列を取得し、文字列間にスペースや文字を入れずに 1 つの完全なシーケンスに結合します。
完全なシーケンスの SHA256 ハッシュ値を計算します。最終的な SHA256 ハッシュ値は、外部パッケージの
dirsum_sha256です。
手動で計算したフィンガープリントと、リポジトリ内のパッケージのフィンガープリントを比較します。両方のフィンガープリントが同じ場合、リポジトリ内のパッケージのインスタンスは変更されていません。