Amazon ECS コンテナエージェントは、基本認証を使用してプライベートレジストリで認証できます。プライベートレジストリ認証を有効にすると、タスク定義のプライベート Docker イメージを使用できます。この機能は、EC2 起動タイプを使用するタスクでのみサポートされています。
プライベートレジストリ認証を有効にする別の方法では、AWS Secrets Manager を使用して、プライベートレジストリ認証情報を安全に保存してから、コンテナの定義で参照します。これにより、プライベートリポジトリのイメージをタスクで使用できるようになります。このメソッドは、EC2 または Fargate 起動タイプのいずれかを使用するタスクをサポートします。詳細については、「Amazon ECS での AWS 以外のコンテナイメージの使用」を参照してください。
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
オプションを付けてコンテナエージェントを起動するdocker runコマンドに渡す必要があります。path_to_env_file
重要
これらの認証環境変数を、 Amazon EC2 ユーザーデータを使用してインスタンス起動時に挿入することや、--env
オプションを使用して docker run コマンドに渡すことはお勧めしません。これらの方法は、認証情報などの機密データには適していません。認証情報をコンテナインスタンスに安全に追加する方法については、「Amazon S3 に Amazon ECS コンテナインスタンスの設定を保存する」を参照してください。
認証形式
プライベートレジストリ認証には、dockercfg
と docker
の 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 のプライベートレジストリを有効にするには
-
SSH を使用してコンテナインスタンスにログインします。
-
/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
"}} -
エージェントが
ECS_DATADIR
環境変数を使用して状態を保存しているかどうかを確認します。docker inspect ecs-agent | grep ECS_DATADIR
出力:
"ECS_DATADIR=/data",
重要
前のコマンドで
ECS_DATADIR
環境変数が返されない場合は、エージェントを停止する前に、このコンテナインスタンスで実行されているタスクをすべて停止する必要があります。より新しいエージェントはECS_DATADIR
環境変数を使用して状態を保存するため、タスクが実行中でも問題なく停止および起動できます。詳細については、「Amazon ECS コンテナエージェントをアップデートする」を参照してください。 -
ecs
サービスを停止します。sudo stop ecs
出力:
ecs stop/waiting
-
ecs
サービスを再起動します。-
Amazon ECS に最適化された Amazon Linux 2 AMI の場合:
sudo systemctl restart ecs
-
Amazon ECS に最適化された Amazon Linux AMI の場合:
sudo stop ecs && sudo start ecs
-
-
(オプション) エージェント詳細分析 API オペレーションをクエリして、エージェントが実行されていることを確認し、新しいコンテナインスタンスに関する情報の一部を表示できます。詳細については、「Amazon ECS コンテナの詳細分析」を参照してください。
curl http://localhost:51678/v1/metadata