Amazon ECR
ユーザーガイド (API バージョン 2015-09-21)

Amazon ECR レジストリ

Amazon ECR レジストリを使用すると、高度な可用性を備えたスケーラブルなアーキテクチャでイメージをホストできるため、アプリケーションのコンテナを確実にデプロイできます。リポジトリを使用すると、イメージリポジトリと Docker イメージを管理できます。AWS アカウントごとに、(デフォルト) Amazon ECR レジストリが 1 つずつ提供されます。

レジストリの概念

  • デフォルトレジストリの URL は https://aws_account_id.dkr.ecr.region.amazonaws.com です。

  • デフォルトでは、アカウントにはデフォルトリポジトリ内のリポジトリへの読み取りおよび書き込みアクセス権があります。ただし、IAM ユーザーには、Amazon ECR API への呼び出しと、リポジトリへのイメージのプッシュまたはプルを行うアクセス許可が必要です。Amazon ECR には、さまざまなレベルでユーザーアクセスをコントロールするマネージド型ポリシーがいくつか用意されています。詳細については、「Amazon ECR マネージドポリシー」を参照してください。

  • docker push コマンドと docker pull コマンドを使用してレジストリ内のリポジトリに対してイメージをプッシュおよびプルできるように、そのレジストリに対して Docker クライアントを認証する必要があります。詳細については、「レジストリの認証」を参照してください。

  • リポジトリは、IAM のユーザーアクセスポリシーとリポジトリポリシーによって制御できます。

レジストリの認証

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

Docker CLI では標準の AWS 認証方法がサポートされていないため、Docker クライアントを別の方法で認証する必要があります。これにより、イメージのプッシュまたはプルをリクエストしているユーザーを Amazon ECR が認識することができます。Docker CLI を使用している場合は、docker login コマンドを使用して Amazon ECR レジストリに対して認証します。Amazon ECR で提供された認証トークンは 12 時間有効です。GetAuthorizationToken API オペレーションは、ユーザー名 (AWS) とパスワードを含む base64 でエンコードされた認証トークンを提供します。この認証トークンは、docker login コマンドでデコードして使用できます。ただし、よりシンプルな get-login コマンド (トークンを取得してデコードし、自動的に docker login コマンドに変換) を AWS CLI で使用することができます。

To authenticate Docker to an Amazon ECR registry with get-login

注記

The get-login command is available in the AWS CLI starting with version 1.9.15; however, we recommend version 1.11.91 or later for recent versions of Docker (17.06 or later). You can check your AWS CLI version with the aws --version command.

  1. Run the aws ecr get-login command. The example below is for the default registry associated with the account making the request. To access other account registries, use the --registry-ids aws_account_id option. For more information, see get-login in the AWS CLI Command Reference.

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

    Output:

    docker login -u AWS -p password https://aws_account_id.dkr.ecr.us-east-1.amazonaws.com

    重要

    If you receive an Unknown options: --no-include-email error, install the latest version of the AWS CLI. For more information, see Installing the AWS Command Line Interface in the AWS Command Line Interface User Guide.

    The resulting output is a docker login command that you use to authenticate your Docker client to your Amazon ECR registry.

  2. Copy and paste the docker login command into a terminal to authenticate your Docker CLI to the registry. This command provides an authorization token that is valid for the specified registry for 12 hours.

    注記

    If you are using Windows PowerShell, copying and pasting long strings like this does not work. Use the following command instead.

    Invoke-Expression -Command (aws ecr get-login --no-include-email)

    重要

    When you execute this docker login command, the command string can be visible to other users on your system in a process list (ps -e) display. Because the docker login command contains authentication credentials, there is a risk that other users on your system could view them this way. They could use the credentials to gain push and pull access to your repositories. If you are not on a secure system, you should consider this risk and log in interactively by omitting the -p password option, and then entering the password when prompted.

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://012345678910.dkr.ecr.us-east-1.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"]}