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 Referenceget-login を参照してください。

    aws ecr get-login --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 コマンドラインインターフェイスのインストール」を参照してください。

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

  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 レジストリ 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"]}