🐳
Tips: finch から Google Artifact Registry にアクセスする
TL;DR
- Google Artifact Registry に
finch
やnerdctl
からアクセスする方法を紹介します。 - Service Account Key を使いません。Service Account Key をローカルに保存するのはセキュリティ上のリスクがあります。
Background
Google Artifact Registry に stub サーバーのイメージや、共通の base image をおいている場合は開発者のローカル端末から イメージを pull したいことがあります。
Docker を使用していたときは、 gcloud auth configure-docker
を使って、Docker に Google Cloud の認証情報を設定していました。
nerdctl のドキュメント には、Google Artifact Registry にアクセスする方法が記載されていますが、Service Account Key を使う方法で、ローカルに Service Account Key を保存する必要があります。
永続的な Service Account Key を生成するのはセキュリティ上のリスクがありますし、期限付きの Service Account Key を生成すると、再生成をするワークフローが必要となります。
Prerequisites
- gcloud がインストールされており、ログインしている。
- 自身に
roles/artifactregistry.reader
が付与されている。(push するときはroles/artifactregistry.writer
)
How to
gcloud auth print-access-token
を使って、OAuth2 アクセストークンを取得します。
このトークンはデフォルトで 1h 有効です。
# lima/nerdctl
gcloud auth print-access-token | lima nerdctl login -u oauth2accesstoken --password-stdin https://asia-northeast1-docker.pkg.dev
# finch
gcloud auth print-access-token | finch login -u oauth2accesstoken --password-stdin https://asia-northeast1-docker.pkg.dev
org policy で constraints/iam.allowServiceAccountCredentialLifetimeExtension
が有効になっている場合は、アクセストークンの有効期限を延長することができます。
gcloud auth print-access-token --lifetime=43200 | finch login -u oauth2accesstoken --password-stdin https://asia-northeast1-docker.pkg.dev
認証ができたら、pull や push ができるようになります。
finch pull ${REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO}/${IMAGE}:${TAG}
finch push ${REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO}/${IMAGE}:${TAG}
Summary
- 今回は Service Account Key を使わない方法で Google Artifact Registry にアクセスする方法を紹介しました。
- Service Account Key を使わず、期限付きのトークンを使うことで、セキュリティ上のリスクを軽減できます。
Discussion