認証方法

Container Registry を認証するには、以下で説明するように、gcloud を Docker 認証ヘルパーとして使用する必要があります。

このページでは、高度な認証方式についても説明します。

はじめに

以下の準備を行います。

  1. Cloud SDK の最新バージョンをインストールしておくこと。これには gcloud コマンドライン ツールが含まれています。

  2. Docker をインストールしておくこと。

Docker 認証ヘルパーとしての gcloud

Container Registry を認証するには、gcloud を Docker 認証ヘルパーとして使用します。これを行うには、次のコマンドを実行します。

gcloud auth configure-docker

Container Registry を認証するには、このコマンドを一度実行する必要があります。

可能であれば、この方法を使用することを強くおすすめします。この方法では、プロジェクト リソースに安全で短期間のアクセス権が付与されます。

高度な認証方式

このページで説明する高度な認証方式は、gcloud を Docker 認証ヘルパーとして使用するのが理想的ではなく、かつ、高度な認証方式によるセキュリティへの影響を理解している場合にのみ使用してください。

高度な認証方式は次のとおりです。

スタンドアロン Docker 認証ヘルパー

Docker は、イメージを push および pull するために Container Registry にアクセスする必要があります。Docker 認証ヘルパー(gcloud を必要としない)docker-credential-gcr を使用して、Docker で使用するための Container Registry 認証情報を構成できます。

認証ヘルパーは、Container Registry 認証情報を自動的に、または --token-source フラグで指定した場所からフェッチし、それらを Docker の構成ファイルに書き込みます。このように、Docker のコマンドライン ツール docker を使用して、Container Registry と直接対話できます。

Docker 認証ヘルパーを使用するには:

  1. docker-credential-gcrGitHub リリースからダウンロードします。

    必要に応じて、curl コマンドライン ユーティリティを使用します。例:

      VERSION=2.0.0
      OS=linux  # or "darwin" for OSX, "windows" for Windows.
      ARCH=amd64  # or "386" for 32-bit OSs, "arm64" for ARM 64.
    
      curl -fsSL "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v${VERSION}/docker-credential-gcr_${OS}_${ARCH}-${VERSION}.tar.gz" \
        | tar xz --to-stdout ./docker-credential-gcr \
        > /usr/bin/docker-credential-gcr && chmod +x /usr/bin/docker-credential-gcr
    
  2. Container Registry と対話するときに Container Registry 認証情報を使用するように Docker を構成します(これを行う必要があるのは 1 回のみ)。

    docker-credential-gcr configure-docker
    

    詳しくは、docker-credential-gcr に関する GitHub のメイン ドキュメントをご覧ください。

  3. docker コマンドを使用して、別の Google Cloud プロジェクトに保存されているイメージを push または pull する場合は、権限とアクセス スコープが正しく構成されていることを確認してください。

gcloud docker

Docker にリクエストを送る前に、gcloud docker を使用して、Docker クライアントに Container Registry の認証情報を注入します。たとえば、ダイジェストによって識別されるイメージを push するには、次のコマンドを使用します。

gcloud docker -- push [HOSTNAME]/[PROJECT-ID]/[IMAGE]@[IMAGE_DIGEST]

ここで

  • [HOSTNAME] は、Console で [場所] の下に表示されます。gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io の 4 つのうち、いずれかのオプションになります。
  • [PROJECT-ID] は、Google Cloud Console プロジェクト ID です。プロジェクト ID にコロン(:)が含まれている場合は、ドメインをスコープとするプロジェクトをご覧ください。
  • [IMAGE] は、Container Registry 内のイメージ名です。
  • [IMAGE_DIGEST] は、イメージ コンテンツの sha256 ハッシュ値です。Console で、メタデータを表示する特定のイメージをクリックします。ダイジェストはイメージのダイジェストとして一覧表示されます。

詳細については、gcloud docker のドキュメントをご覧ください。

docker コマンドを使用して、別の Google Cloud プロジェクトに保存されているイメージを push または pull する場合は、権限とアクセス スコープが正しく構成されていることを確認してください。

アクセス トークン

アクセス トークンは、Google Cloud リソースへの読み取り / 書き込みアクセス権を付与する、短時間だけ有効なトークンです。

gcloud docker コマンドは、Container Registry にパスワードとして短時間だけ有効なアクセス トークンを渡すことで Docker コマンドを認証します。

  • docker pulldocker search の場合、アクセス トークンでは devstorage.read_only スコープを使用する必要があります。
  • docker push の場合、アクセス トークンでは devstorage.read_write スコープを使用する必要があります。

イメージの push と pull に必要なサービス アカウントの権限とスコープの詳細については、Google Cloud で Container Registry を使用するための要件をご覧ください。

gcloud コマンドライン ツールがない場合でも、適切なアクセス トークン(たとえば、Compute Engine インスタンス メタデータ)を作成することで、gcloud docker の認証スキームを使用できます。

このトークンによって付与されるアクセス権は、gcloud docker コマンドを使用して認証する場合に付与されるものと同じであるため、この方法はこれらの代替認証方法の中で最も安全です。

アクセス トークンを使用するには、アプリケーションのデフォルト認証情報のドキュメントをご覧ください。次の認証情報を使用します。

Linux / macOS

  • ユーザー名oauth2accesstoken です。
  • パスワードはアクセス トークンです。例: gcloud auth print-access-token

例:

gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://[HOSTNAME]

ここで、[HOSTNAME]gcr.ious.gcr.ioeu.gcr.io、または asia.gcr.io です。

または、--password-stdin をサポートしていない古い Docker クライアントの場合は次のようになります。

docker login -u oauth2accesstoken -p "$(gcloud auth print-access-token)" https://[HOSTNAME]

Windows

  • ユーザー名oauth2accesstoken です。
  • パスワードは、gcloud auth print-access-token の出力です。

例:

gcloud auth print-access-token
ya29.8QEQIfY_...

docker login -u oauth2accesstoken -p "ya29.8QEQIfY_..." https://[HOSTNAME]

ここで、[HOSTNAME]gcr.ious.gcr.ioeu.gcr.io、または asia.gcr.io です。

JSON キーファイル

サービス アカウントの JSON キーファイルは、特定の Cloud Console プロジェクトとそのリソースに限定された長期間有効な認証情報です。

イメージの push と pull に使用するサービス アカウントには、Container Registry とのやり取りに必要な権限とアクセス スコープが正しく構成されている必要があります。

Google Cloud で自動的に作成されたサービス アカウント(Container Registry サービス アカウントなど)には、親プロジェクトに対して読み書きが許可される Editor 役割が付与されます。Compute Engine のデフォルトのサービス アカウントには、同じプロジェクトのストレージに対する読み取り専用アクセスが構成されます。他のサービス アカウントに特定の権限を付与することもできます。プロジェクト間でイメージを push または pull するには、Container Registry とやり取りするサービス アカウントに適切な権限とアクセス スコープを構成する必要があります。

イメージの push と pull に必要なサービス アカウントの権限とスコープの詳細については、Google Cloud で Container Registry を使用するための要件をご覧ください。

JSON キーファイルを使用するには、Google Cloud Console ヘルプセンターのサービス アカウントに関する説明に沿って操作します。次の認証情報を使用します。

Linux / macOS

  • ユーザー名_json_key です(サービス アカウントの名前ではありません)。
  • keyfile.json にはサービス アカウントの JSON キーが含まれています。

例:

cat keyfile.json | docker login -u _json_key --password-stdin https://[HOSTNAME]

ここで、[HOSTNAME]gcr.ious.gcr.ioeu.gcr.io、または asia.gcr.io です。

または、--password-stdin をサポートしていない古い Docker クライアントの場合は次のようになります。

docker login -u _json_key -p "$(cat keyfile.json)" https://[HOSTNAME]

Windows

  • ユーザー名_json_key です(サービス アカウントの名前ではありません)。
  • keyfile.json にはサービス アカウントの JSON キーが含まれています。

例:

set /p PASS=<keyfile.json
docker login -u _json_key -p "%PASS%" https://[HOSTNAME]

ここで、[HOSTNAME]gcr.ious.gcr.ioeu.gcr.io、または asia.gcr.io です。

サービス アカウントの構成について詳しくは、サービス アカウントのドキュメントをご覧ください。

Google Cloud での Container Registry の使用

Compute Engine インスタンスと Google Kubernetes Engine クラスタは、インスタンスの Cloud Storage スコープに基づいて Container Registry イメージの push と pull を行います。Google Cloud での Container Registry の使用をご覧ください。

Container Registry に格納されているイメージは、App Engine フレキシブル環境にデプロイできます。