このドキュメントでは、Artifact Registry のリモート リポジトリの Docker Hub アップストリーム リポジトリへの認証を構成する方法について説明します。
公開イメージのみを使用する場合でも、Docker Hub への認証を行うことをおすすめします。認証を行うことにより、ダウンロードのレート制限が引き上げられます。Docker Hub のダウンロード レート制限の詳細については、Docker Hub のレート制限をご覧ください。リモート リポジトリを使用すると、Docker Hub ユーザー名と、Docker Hub で認証するためのシークレットとして保存した個人用アクセス トークンを追加できます。
このドキュメントは、Artifact Registry Docker リモート リポジトリと Docker Hub アカウントがすでに作成されていることを前提としています。
リモート リポジトリの詳細については、リモート リポジトリの概要をご覧ください。
必要なロール
リモート リポジトリの Docker Hub への認証の構成に必要な権限を取得するには、プロジェクトに対する次の IAM ロールの付与を管理者に依頼してください。
-
Artifact Registry 管理者 (
roles/artifactregistry.admin
) - Secret Manager 管理者(
roles/secretmanager.admin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
Docker Hub の個人用アクセス トークンを作成する
- Docker Hub にログインします。
- 読み取り専用の権限を持つ個人用アクセス トークンを作成します。
アクセス トークンをコピーします。
アクセス トークンをローカルまたは Cloud Shell のテキスト ファイルに保存します。
個人用アクセス トークンをシークレット バージョンに保存する
- Secret Manager で Secret を作成する
- Docker Hub の個人用アクセス トークンをシークレット バージョンとして保存します。
Artifact Registry サービス アカウントにシークレットへのアクセス権を付与する
Artifact Registry サービス エージェントは、Google Cloud サービスを操作するときに Artifact Registry の代理として動作します。サービス エージェントが Secret Manager に保存されているシークレットを使用できるようにするには、シークレット バージョンを表示する権限をサービス エージェントに付与する必要があります。
このサービス エージェント ID は次のとおりです。
service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com
PROJECT-NUMBER は、Artifact Registry が実行されている Google Cloud プロジェクトのプロジェクト番号です。
Artifact Registry サービス エージェントに Secret Manager のシークレット アクセサーのロールを付与するには:
Console
-
Google Cloud コンソールの [Secret Manager] ページに移動します。
-
[Secret Manager] ページで、シークレットの名前の横にあるチェックボックスをオンにします。
-
まだ開いていない場合は、[情報パネルを表示] をクリックしてパネルを開きます。
-
情報パネルで [プリンシパルを追加] をクリックします。
-
[新しいプリンシパル] テキストエリアに、追加するメンバーのメールアドレスを入力します。
-
[ロールを選択] プルダウンで、[シークレット マネージャー]、[Secret Manager のシークレット アクセサー] の順に選択します。
gcloud
$ gcloud secrets add-iam-policy-binding secret-id \
--member="member" \
--role="roles/secretmanager.secretAccessor"
ここで、member はユーザー、グループ、サービス アカウントなどの IAM メンバーです。
C#
Artifact Registry に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
Artifact Registry に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
Artifact Registry に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Artifact Registry に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
Artifact Registry に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
Artifact Registry に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Ruby
Artifact Registry に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
API
注: 他の例と異なり、IAM ポリシー全体が置き換えられます。
$ curl "https://secretmanager.googleapis.com/v1/projects/project-id/secrets/secret-id:setIamPolicy" \
--request "POST" \
--header "authorization: Bearer $(gcloud auth print-access-token)" \
--header "content-type: application/json" \
--data "{\"policy\": {\"bindings\": [{\"members\": [\"member\"], \"role\": \"roles/secretmanager.secretAccessor\"}]}}"
シークレットへのアクセス権の付与または取り消しについて詳しくは、シークレットへのアクセスを管理するをご覧ください。
Docker Hub 認証情報をリモート リポジトリに追加する
Docker Hub 認証情報でリモート リポジトリを更新するには:
コンソール
Google Cloud コンソールで [リポジトリ] ページを開きます。
リポジトリ リストでリポジトリを選択し、[リポジトリを編集] をクリックします。
[リモート リポジトリの認証モード] セクションで、Docker Hub ユーザー名と、Docker Hub アクセス トークンを含むシークレット バージョンを更新または追加します。
gcloud CLI
Docker Hub 認証情報でリモート リポジトリを更新するには、次のコマンドを実行します。
gcloud artifacts repositories update REPOSITORY \
--project=PROJECT_ID \
--location=LOCATION \
--remote-username=USERNAME \
--remote-password-secret-version=projects/SECRET_PROJECT_ID/secrets/SECRET_ID/versions/SECRET_VERSION
以下を置き換えます。
REPOSITORY
は、Artifact Registry リモート リポジトリの名前に置き換えます。PROJECT_ID
は、Google Cloud プロジェクト ID に置き換えます。LOCATION
は、リポジトリのリージョンまたはマルチリージョンのロケーションです。デフォルトを設定すると、このフラグを省略できます。サポートされているリポジトリのロケーションの一覧を表示するには、コマンドgcloud artifacts locations list
を実行します。USERNAME
は、Docker Hub のユーザー名に置き換えます。SECRET_PROJECT_ID
は、シークレットを作成した Google Cloud プロジェクトのプロジェクト ID に置き換えます。SECRET_ID
は、Secret に付けた名前に置き換えます。SECRET_VERSION
は、Docker Hub アクセス トークンを保存したシークレット バージョンに置き換えます。
認証情報は、次にリモート リポジトリがアップストリーム ソースからアーティファクトのリクエストを送信するときに使用されます。
次のステップ
- Artifact Registry のリポジトリの詳細を確認する。
- Docker を使用してイメージを pull する。
- Docker Hub リモート リポジトリのクイックスタートを行います。