コンテナインスタンスのプライベートレジストリの認証 - Amazon Elastic Container Service

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

コンテナインスタンスのプライベートレジストリの認証

Amazon ECS コンテナエージェントは、基本認証を使用してプライベートレジストリで認証できます。プライベートレジストリ認証を有効にすると、タスク定義のプライベート Docker イメージを使用できます。この機能は、EC2 起動タイプを使用するタスクでのみサポートされています。

プライベートレジストリ認証を有効にするもう 1 つの方法は AWS Secrets Manager 、 を使用してプライベートレジストリの認証情報を安全に保存し、コンテナ定義で参照することです。これにより、プライベートリポジトリのイメージをタスクで使用できるようになります。このメソッドは、EC2 または Fargate 起動タイプのいずれかを使用するタスクをサポートします。詳細については、「タスクのプライベートレジストリの認証」を参照してください。

Amazon ECS コンテナエージェントでは、起動時に次の 2 つの環境変数を検索します。

  • ECS_ENGINE_AUTH_TYPE。送信する認証データのタイプを指定します。

  • ECS_ENGINE_AUTH_DATA。実際の認証情報が含まれます。

Amazon ECSに最適化されたAMIのLinuxバリアントは、コンテナインスタンスの起動時、およびサービスが開始されるたびに(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 として保存されます。

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 コマンドを使用して抽出できます。

cat ~/.docker/config.json | jq .auths

出力:

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

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

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

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

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 表現は次のようになります。

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

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

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

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

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 値を追加します。

    sudo vi /etc/ecs/ecs.config

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

    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 環境変数を使用して状態を保存しているかどうかを確認します。

    docker inspect ecs-agent | grep ECS_DATADIR

    出力:

    "ECS_DATADIR=/data",
    重要

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

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

    sudo stop ecs

    出力:

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

    • Amazon ECS に最適化された Amazon Linux 2 AMI の場合:

      sudo systemctl restart ecs
    • Amazon ECS に最適化された Amazon Linux AMI の場合:

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

    curl http://localhost:51678/v1/metadata