0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[GCP]Artifact Registryへのログイン

Last updated at Posted at 2024-09-09

概要

に記述されているGARへの4つの認証方法について、初見で何をやっているのか理解出来なかったため内容を噛み砕いてみた。

前提

について把握していること

gCloud CLI認証ヘルパーを使う方法

前提

  • gcloud CLIをインストールしておく
  • GARへのアクセス権限を付与したGoogleアカウントまたはサービスアカウントを用意しておく

概要

  1. dockerの認証情報設定ファイル(~/.docker/config.json)へ「docker loginコマンド実行時に「対象のDockerレジストリがGARであれば、認証情報ヘルパーdocker-credential-gcloudから取得した認証情報を使う」ように設定する。
  2. gcloudコマンドで、GARへのアクセス権限が付与されたGoogleアカウントまたはサービスアカウントでログインする。
  3. docker loginコマンドでGARへログインする。
# 1. ~/.docker/config.json の credHelper へ設定(指定したArtifact Registryのホストでgcloudの認証情報を使う)を追加
gcloud auth configure-docker <Artifact Registryのホスト名>
 
# 2. gcloudコマンドを実行するアカウントの認証
## ユーザーアカウントにする場合(Webブラウザでのパスワード入力が必要)
gcloud auth login <ユーザーアカウント>
## サービスアカウントにする場合(Webブラウザでのパスワード入力不要)
gcloud auth activate-service-account <サービスアカウント> --key-file=<サービスアカウントキーファイルのパス>
 
# 3. Artifact Registyへログイン
docker login https://<Artifact Registryのホスト名>

gcloud auth login, gcloud auth activate-service-accountについては、gcloudコマンドまとめ を参照。
Artifact Registryのホスト名は、例えばus-central1-docker.pkg.dev
gcloudがインストールされていない環境では無理。
サービスアカウントを使う場合は、サービスアカウントキーをファイルとしてしか指定できないため、シークレットに保存している場合は一旦ファイルに出力するという手間が発生することになりそう。

スタンドアロン認証情報ヘルパーを使う

アプリケーションのデフォルト認証情報を使って認証する。
docker loginを実行する環境下でアプリケーションのデフォルト認証情報が取得できればよいため、gcloudコマンドのインストールは必須でない。

# スタンドアロン認証ヘルパーをインストール
VERSION=2.1.23
OS=linux  # or "darwin" for OSX, "windows" for Windows.
ARCH=amd64  # or "386" for 32-bit OSs
 
curl -fsSL "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v${VERSION}/docker-credential-gcr_${OS}_${ARCH}-${VERSION}.tar.gz" \
| tar xz docker-credential-gcr \
&& chmod +x docker-credential-gcr && sudo mv docker-credential-gcr /usr/bin/
 
# ~/.docker/config.json の credHelper へ設定(指定したArtifact Registryのホストでアプリケーションのデフォルト認証情報を使う)を追加
docker-credential-gcr configure-docker --registries=<Artifact Registryのホスト名>
 
# Artifact Registyへログイン
docker login https://<Artifact Registryのホスト名>

アクセストークンを使う

前提

  • gcloud CLIをインストールしておく
  • GARへのアクセス権限を付与したGoogleアカウントまたはサービスアカウントを用意しておく
  • gcloudコマンドを実行するユーザーにroles/iam.serviceAccountTokenCreatorロール(正確にはiam.serviceAccounts.getAccessTokenパーミッション)を付与しておく

概要

  1. GARへのアクセス権限が付与されたサービスアカウントに成り代わって、60分有効なアクセストークンを発行する
  2. 以下のユーザー名・パスワードを指定してdocker loginコマンドでGARへログインする。
  • ユーザー名: oauth2accesstoken
  • パスワード: <アクセストークン>
gcloud auth print-access-token --impersonate-service-account ACCOUNT | \
docker login -u oauth2accesstoken --password-stdin <Artifact Registryのホスト名>

サービスアカウントキーを使う

前提

  • GARへのアクセス権限を付与したGoogleアカウントまたはサービスアカウントを用意しておく
  • 上記のサービスアカウントのサービスアカウントキーを発行して保存しておく

概要
以下のユーザー名・パスワードを指定してdocker loginコマンドでGARへログインする。

  • ユーザー名: json_key
  • パスワード: サービスアカウントキー(中身)
cat <サービスアカウントキーファイルのパス> | 
docker login -u json_key --password-stdin https://<ロケーション>-docker.pkg.dev

※環境変数にサービスアカウントキーがあるのであれば、

echo ${<サービスアカウントキーの環境変数名>} | 
docker login -u json_key --password-stdin https://<ロケーション>-docker.pkg.dev

としてもいける。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?