メニュー
Amazon EC2 Container Service
開発者ガイド (API Version 2014-11-13)

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

Amazon ECS コンテナエージェントは、基本認証を使用して、Docker Hub などのプライベートレジストリで認証できます。プライベートレジストリ認証を有効にすると、タスク定義のプライベート Docker イメージを使用できます。

エージェントは起動時に 2 つの環境変数を検索します。送信する認証データのタイプを指定する ECS_ENGINE_AUTH_TYPE と、実際の認証情報が含まれている ECS_ENGINE_AUTH_DATA です。

Amazon ECS 最適化 AMI は、コンテナインスタンスが起動されるときに、また、サービスが (sudo start ecs コマンドを使用して) 開始されるたびに、/etc/ecs/ecs.config ファイルをスキャンしてこれらの変数を検索します。Amazon ECS に最適化されていない AMI は、ファイルにこれらの環境変数を保存し、--env-file path_to_env_file オプションを使用して、コンテナエージェントを起動する docker run コマンドに渡します。

重要

これらの認証環境変数を、Amazon EC2 ユーザーデータを使用してインスタンス起動時に挿入したり、--env オプションを使用して docker run コマンドに渡したりするのは、お勧めしません。これらの方法は認証情報などの機密データには適していません。認証情報を安全にコンテナインスタンスに追加するには、「Amazon S3 にコンテナインスタンスの構成を保存する」を参照してください。

認証形式

プライベートレジストリ認証には、dockercfgdocker の 2 つの形式を使用できます。

dockercfg 認証形式

dockercfg 形式は、docker login コマンドの実行時に作成された設定ファイルに保存されている認証情報を使用します。このファイルは、ローカルシステムで docker login を実行 (またはコンテナインスタンスにログインしてそこでコマンドを実行) して、レジストリユーザー名、パスワード、および E メールアドレスを入力することで作成できます。Docker のバージョンによって、ファイルは ~/.dockercfg または ~/.docker/config.json として保存されます。

Copy
$ cat ~/.docker/config.json

出力:

{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "zq212MzEXAMPLE7o6T25Dk0i"
    }
  }
}

重要

Docker の新しいバージョンは、外部 auths オブジェクトを使用して、上に示したような設定ファイルを作成します。Amazon ECS エージェントは、auths オブジェクトを持たない、以下の形式の dockercfg 認証データのみをサポートします。jq ユーティリティがインストールされている場合、次のコマンドでこのデータを取得できます: cat ~/.docker/config.json | jq .auths

Copy
$ cat ~/.docker/config.json

出力:

{
  "https://index.docker.io/v1/": {
    "auth": "zq212MzEXAMPLE7o6T25Dk0i",
    "email": "email@example.com"
  }
}

上記の例では、以下の環境変数を、Amazon ECS コンテナエージェントが実行時にロードする環境変数ファイル (Amazon ECS 最適化 AMI の場合は /etc/ecs/ecs.config) に追加する必要があります。Amazon ECS 最適化 AMI を使用せず、docker run を使用して手動でエージェントを開始する場合は、エージェント開始時に --env-file path_to_env_file オプションを使用して環境変数ファイルを指定します。

Copy
ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example.com"}}

次の構文で複数のプライベートレジストリを設定できます。

Copy
ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"repo.example-01.com":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example-01.com"},"repo.example-02.com":{"auth":"fQ172MzEXAMPLEoF7225DU0j","email":"email@example-02.com"}}

docker 認証形式

docker 形式は、エージェントが認証する必要があるレジストリサーバーの JSON 形式と、そのレジストリに必要な認証パラメーター (そのアカウントのユーザー名、パスワード、E メールアドレスなど) を使用します。Docker Hub アカウントの場合、JSON 表現は以下のようになります。

Copy
{ "https://index.docker.io/v1/": { "username": "my_name", "password": "my_password", "email": "email@example.com" } }

この例では、以下の環境変数を、Amazon ECS コンテナエージェントが実行時にロードする環境変数ファイル (Amazon ECS 最適化 AMI の場合は /etc/ecs/ecs.config) に追加する必要があります。Amazon ECS 最適化 AMI を使用せず、docker run を使用して手動でエージェントを開始する場合は、エージェント開始時に --env-file path_to_env_file オプションを使用して環境変数ファイルを指定します。

Copy
ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}

次の構文で複数のプライベートレジストリを設定できます。

Copy
ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"repo.example-01.com":{"username":"my_name","password":"my_password","email":"email@example-01.com"},"repo.example-02.com":{"username":"another_name","password":"another_password","email":"email@example-02.com"}}

プライベートレジストリの有効化

以下の手順を使用してコンテナインスタンスのプライベートレジストリを有効にします。

Amazon ECS 対応 AMI のプライベートレジストリを有効にするには

  1. SSH 経由でコンテナインスタンスにログインします。

  2. /etc/ecs/ecs.config ファイルを開き、レジストリとアカウントの ECS_ENGINE_AUTH_TYPE 値および ECS_ENGINE_AUTH_DATA 値を追加します。

    Copy
    [ec2-user ~]$ sudo vi /etc/ecs/ecs.config

    この例では、Docker Hub のユーザーアカウントが認証されます。

    Copy
    ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}
  3. エージェントが ECS_DATADIR 環境変数を使用して状態を保存しているかどうかを確認します。

    Copy
    [ec2-user ~]$ docker inspect ecs-agent | grep ECS_DATADIR

    出力:

    "ECS_DATADIR=/data",

    重要

    前のコマンドで ECS_DATADIR 環境変数が返されない場合は、エージェントを停止する前に、このコンテナインスタンスで実行されているタスクをすべて停止する必要があります。より新しいエージェントは ECS_DATADIR 環境変数を使用して状態を保存するため、タスクが実行中でも問題なく停止および起動できます。詳細については、「Amazon ECS コンテナエージェントの更新」を参照してください。

  4. ecs サービスを停止します。

    Copy
    [ec2-user ~]$ sudo stop ecs

    出力:

    ecs stop/waiting
  5. ecs サービスを再起動します。

    Copy
    [ec2-user ~]$ sudo start ecs

    出力:

    
    ecs start/running, process 2959
  6. (オプション) エージェント詳細分析 API をクエリして、エージェントが実行されていることを確認し、新しいコンテナインスタンスに関する情報の一部を表示できます。詳細については、「Amazon ECS コンテナエージェントの詳細分析」を参照してください。

    Copy
    [ec2-user ~]$ curl http://localhost:51678/v1/metadata

    出力:

    
    {
      "Cluster": "default",
      "ContainerInstanceArn": "<container_instance_ARN>",
      "Version": "Amazon ECS Agent - v1.14.3 (15de319)"
    }