プライベートレジストリの認証 - Amazon ECR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

プライベートレジストリの認証

「」を使用できます。AWS Management Consoleとすると、AWS CLI、またはAWSプライベートリポジトリを作成して管理する SDK。また、これらの方法を使用して、イメージの一覧表示や削除などのいくつかのアクションをイメージで実行できます。これらのクライアントは、標準の AWS 認証方法を使用します。Amazon ECR API を使用してイメージをプッシュおよびプルできますが、ほとんどの場合 Docker CLI (または言語固有の Docker ライブラリ) を使用します。

Docker CLIはネイティブのIAM認証方法をサポートしていません。Amazon ECR が Docker プッシュリクエストとプルリクエストを認証および承認できるようにするには、追加のステップを実行する必要があります。

レジストリ認証方法については、以降のセクションで説明します。

Amazon ECR 認証情報ヘルパーの使用

Amazon ECR には Docker 認証情報ヘルパーが用意されており、Amazon ECR にイメージをプッシュおよびプルするときに、Docker 認証情報をより簡単に保存および使用できます。インストールおよび設定手順については、「Amazon ECR Docker 認証情報ヘルパー」を参照してください。

認証トークンの使用

承認トークンのアクセス許可スコープは、認証トークンの取得に使用される IAM プリンシパルのアクセス許可スコープと一致します。認証トークンは、IAM プリンシパルからアクセス可能で 12 時間有効な Amazon ECR レジストリにアクセスするために使用されます。認証トークンを取得するには、GetAuthorizationToken API オペレーションを使用する必要があります。これにより、ユーザー名 AWS とエンコードされたパスワードを含む base64 エンコード認証トークンを取得します。AWS CLI の get-login-password コマンドでは、よりシンプルな方法で、認証トークンを取得し、デコードして、認証のために docker login コマンドにパイプできます。

get-login-password を使用して Amazon ECR プライベートレジストリに対して Docker を認証するには

get-login-password を使用して Amazon ECR レジストリに対して Docker を認証するには、aws ecr get-login-passwordコマンド。認証トークンをdocker loginコマンドを実行する場合は、AWSユーザー名に対して、認証先の Amazon ECR レジストリの URI を指定します。複数のレジストリに対して認証する場合は、レジストリごとにコマンドを繰り返す必要があります。

重要

エラーが発生した場合は、AWS CLI の最新バージョンをインストールまたはアップグレードします。詳細については、「」を参照してください。をインストールするAWS Command Line Interface()AWS Command Line Interfaceユーザーガイド

  • get-login-password (AWS CLI)

    aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
  • Get-ECRLoginCommand (AWS Tools for Windows PowerShell)

    (Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

get-login を使用して Amazon ECR プライベートレジストリに対して Docker を認証するには

を使用する場合AWS CLIバージョンが 1.17.10 より前のバージョンである場合、get-loginコマンドを使用すると、Amazon ECR レジストリーを認証できます。AWS CLI のバージョンは、aws --version コマンドで確認できます。

  1. aws ecr get-login コマンドを実行します。次の例は、リクエストを実行するアカウントに関連付けられたデフォルトレジストリ用です。他のアカウントのレジストリにアクセスするには、--registry-ids aws_account_id オプションを使用します。詳細については、「」を参照してください。get-login()AWS CLIコマンドリファレンス

    aws ecr get-login --region region --no-include-email

    結果の出力はdocker loginAmazon ECR レジストリに対して Docker クライアントを認証するために使用する、コマンドを実行します。

    docker login -u AWS -p password https://aws_account_id.dkr.ecr.region.amazonaws.com
  2. Docker CLI をレジストリに対して認証するには、docker login コマンドをコピーしてターミナルに貼り付けます。このコマンドは、指定されたレジストリに対して 12 時間有効な認証トークンを提供します。

    注記

    Windows PowerShell を使用している場合、このような長い文字列をコピーして貼り付けることはできません。代わりに次のコマンドを使用します。

    Invoke-Expression -Command (Get-ECRLoginCommand -Region region).Command
    重要

    docker login コマンドを実行すると、システムの他のユーザーに対して、プロセスリスト (ps -e) 表示でコマンド文字列が表示されます。docker login コマンドには認証情報が含まれているため、システムの他のユーザーがこのようにして認証情報を表示するリスクがあります。また、その認証情報を使用して、リポジトリへのプッシュアクセスおよびプルアクセスを取得する可能性があります。セキュリティで保護されたシステムを使用していない場合は、上記の ecr get-login-password コマンドを使用する必要があります。

HTTP API 認証の使用

Amazon ECR はDocker Registry HTTP API。ただし、Amazon ECR はプライベートレジストリであるため、すべての HTTP リクエストで承認トークンを提供する必要があります。curl-H オプションを使用して HTTP 認証ヘッダーを追加し、get-authorization-token AWS CLI コマンドで提供される認証トークンを渡します。

Amazon ECR HTTP API を使用して認証するには

  1. AWS CLI を使用して認証トークンを取得し、そのトークンを環境変数に設定します。

    TOKEN=$(aws ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken')
  2. API に対して認証するには、$TOKEN 変数を curl-H オプションに渡します。たとえば、次のコマンドでは、Amazon ECR リポジトリ内のイメージタグを一覧表示します。詳細については、Docker レジストリ HTTP API リファレンスドキュメントを参照してください。

    curl -i -H "Authorization: Basic $TOKEN" https://aws_account_id.dkr.ecr.region.amazonaws.com/v2/amazonlinux/tags/list

    出力は次のとおりです。

    HTTP/1.1 200 OK
    Content-Type: text/plain; charset=utf-8
    Date: Thu, 04 Jan 2018 16:06:59 GMT
    Docker-Distribution-Api-Version: registry/2.0
    Content-Length: 50
    Connection: keep-alive
    
    {"name":"amazonlinux","tags":["2017.09","latest"]}