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

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

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

You can use the AWS マネジメントコンソール, the AWS CLI, or the AWS SDKs to create and manage private repositories. また、これらの方法を使用して、イメージの一覧表示や削除などのいくつかのアクションをイメージで実行できます。これらのクライアントは、標準の AWS 認証方法を使用します。Even though you can use the Amazon ECR API to push and pull images, you're more likely to use the Docker CLI or a language-specific Docker library.

The Docker CLI doesn't support native IAM authentication methods. Amazon ECR が、Docker のプッシュ要求とプル要求を認証、承認できるようにするには、追加の手順を実行する必要があります。

The registry authentication methods that are detailed in the following sections are available.

Using the Amazon ECR credential helper

Amazon ECR provides a Docker credential helper which makes it easier to store and use Docker credentials when pushing and pulling images to Amazon ECR. インストールおよび設定手順については、「Amazon ECR Docker 認証情報ヘルパー.」を参照してください。

Using an authorization token

承認トークンのアクセス許可スコープは、認証トークンの取得に使用される IAM プリンシパルのアクセス許可スコープと一致します。認証トークンは、Amazon ECR プリンシパルからアクセス可能で 12 時間有効な IAM レジストリにアクセスするために使用されます。To obtain an authorization token, you must use the GetAuthorizationToken API operation to retrieve a base64-encoded authorization token containing the username AWS and an encoded password. AWS CLI の get-login-password コマンドでは、よりシンプルな方法で、認証トークンを取得し、デコードして、認証のために docker login コマンドにパイプできます。

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

重要

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

  • 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

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

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

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

    結果の出力は docker login コマンドです。このコマンドを使用して、Amazon 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 コマンドには認証情報が含まれているため、システムの他のユーザーがこのようにして認証情報を表示するリスクがあります。また、その認証情報を使用して、リポジトリへのプッシュアクセスおよびプルアクセスを取得する可能性があります。安全なシステムを使用していない場合は、このリスクを考慮してください。-p password オプションを省略してインタラクティブにログインし、求められたときにパスワードを入力することを検討してください。

Using HTTP API authentication

Amazon ECR は Docker Registry HTTP API. をサポートしています。ただし、Amazon ECR はプライベートレジストリであるため、すべての HTTP リクエストで認可トークンを提供する必要があります。-Hcurl オプションを使用して 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. To authenticate to the API, pass the $TOKEN variable to the -H option of curl. For example, the following command lists the image tags in an Amazon ECR repository. For more information, see the Docker Registry HTTP API reference documentation.

    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"]}