🐳

Tips: finch から Google Artifact Registry にアクセスする

2024/06/30に公開

TL;DR

  • Google Artifact Registry に finchnerdctl からアクセスする方法を紹介します。
  • 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