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 です。

  • デフォルトでは、デフォルトレジストリで作成したリポジトリおよびイメージへの読み取りおよび書き込み権限が付与されます。

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

  • リポジトリは、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 で使用することができます。

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

注記

get-login コマンドは AWS CLI のバージョン 1.9.15 以降で利用できます。ただし、Docker の最新バージョン (17.06 以降) を使用している場合は、バージョン 1.11.91 以降をお勧めします。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 -u AWS -p password https://aws_account_id.dkr.ecr.us-east-1.amazonaws.com

    重要

    Unknown options: --no-include-email エラーが返された場合は、AWS CLI の最新バージョンをインストールします。詳細については、AWS Command Line Interface ユーザーガイド の「AWS コマンドラインインターフェイスのインストール」を参照してください。

    結果の出力は docker login コマンドです。このコマンドを使用して、Amazon ECR レジストリに対して Docker クライアントを認証します。

  2. Docker CLI をレジストリに対して認証するには、docker login コマンドをコピーしてターミナルに貼り付けます。このコマンドは、指定されたレジストリに対して 12 時間有効な認証トークンを提供します。

    注記

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

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

    重要

    docker login コマンドを実行すると、システムの他のユーザーに対して、プロセスリスト (ps -e) 表示でコマンド文字列が表示されます。docker login コマンドには認証情報が含まれているため、システムの他のユーザーがこのようにして認証情報を表示するリスクがあります。また、その認証情報を使用して、リポジトリへのプッシュアクセスおよびプルアクセスを取得する可能性があります。安全なシステムを使用していない場合は、このリスクを考慮してください。-p 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://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"]}