認証方法

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 認証ヘルパーツールである docker-credential-gcr を使用して、Docker で使用するための Container Registry 認証情報を構成できます。

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

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

  1. docker-credential-gcr を次の 2 つの方法のいずれかでダウンロードします。

    • gcloud コマンドライン ツール:

      gcloud components install docker-credential-gcr
      
    • docker-credential-gcrGitHub リリースから、オプションで curl コマンドライン ユーティリティを使用。例:

      VERSION=1.5.0
      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 --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
    

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

gcloud docker

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

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

ここで

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

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

アクセス トークン

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

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

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

適切なアクセス トークン(Compute Engine インスタンス メタデータなど)を作成すれば、gcloud コマンドライン ツールがない場合でも同じスキームを使用できます。

このトークンによって付与されるアクセス権は、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.ioasia.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.ioasia.gcr.io のいずれかです。

JSON キーファイル

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

GCP で自動的に作成されたサービス アカウント(Container Registry サービス アカウントなど)には、プロジェクト全体の読み書きが許可される Editor 役割が付与されます。ただし、他のサービス アカウントに特定の権限を付与することもできます。Container Registry と対話できる役割については、アクセス制御の設定をご覧ください。

サービス アカウントには、Container Registry イメージを含むレジストリへのアクセス権を付与することができます。

また、サービス アカウントをイメージの pull および表示のためだけに使用する場合は、GCP Console の IAM メニューで、サービス アカウントのプロジェクト レベルの役割を読み取り専用の Viewer に設定します。ただし Viewer 役割は、プロジェクト全体およびそのすべてのリソースの読み取り専用権限を持つため、この設定が望ましくない場合もあります。

JSON キーファイルを使用するには、Google Cloud Platform 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.ioasia.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.ioasia.gcr.io のいずれかです。

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

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...