概要
に記述されているGARへの4つの認証方法について、初見で何をやっているのか理解出来なかったため内容を噛み砕いてみた。
前提
について把握していること
gCloud CLI認証ヘルパーを使う方法
前提
- gcloud CLIをインストールしておく
- GARへのアクセス権限を付与したGoogleアカウントまたはサービスアカウントを用意しておく
概要
- dockerの認証情報設定ファイル(
~/.docker/config.json
)へ「docker login
コマンド実行時に「対象のDockerレジストリがGARであれば、認証情報ヘルパーdocker-credential-gcloud
から取得した認証情報を使う」ように設定する。 - gcloudコマンドで、GARへのアクセス権限が付与されたGoogleアカウントまたはサービスアカウントでログインする。
-
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パーミッション)を付与しておく
概要
- GARへのアクセス権限が付与されたサービスアカウントに成り代わって、60分有効なアクセストークンを発行する
- 以下のユーザー名・パスワードを指定して
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
としてもいける。
参考