タスクのプライベートレジストリの認証
AWS Secrets Manager を使用したタスクのプライベートレジストリ認証では、認証情報を安全に保存し、コンテナの定義で参照することができます。これにより、プライベートリポジトリのイメージをタスクで使用できるようになります。この機能は、Fargate または EC2 のどちらの起動タイプを使用するタスクでもサポートされています。
タスク定義で、Amazon ECR に保存されたイメージを参照している場合、このトピックは適用されません。詳細については、Amazon Elastic Container Registry ユーザーガイドの「Amazon ECS で Amazon ECR イメージを使用する」を参照してください。
EC2 起動タイプを使用するタスクの場合、この機能にはコンテナエージェントのバージョン 1.19.0 以降が必要です。ただし、最新のコンテナエージェントバージョンを使用することをお勧めします。エージェントのバージョンの確認と最新バージョンへの更新については、「Amazon ECS コンテナエージェントの更新」を参照してください。
Fargate の起動タイプを使用するタスクの場合、この機能にはプラットフォームバージョン 1.2.0 以降が必要です。詳細については、AWS Fargate プラットフォームのバージョン を参照してください。
コンテナの定義内で、作成したシークレットの完全な ARN で repositoryCredentials
を指定します。シークレットを使用するタスクのリージョンと異なるリージョンのシークレットを参照できますが、同じアカウント内にある必要があります。
Amazon ECS API、AWS CLI、または AWS SDK を使用する場合、起動するタスクと同じリージョンにシークレットが存在する場合は、シークレットの完全な ARN または名前のどちらも使用できます。AWS マネジメントコンソール を使用する場合は、シークレットの完全な ARN を指定する必要があります。
必要なパラメータを示すタスク定義のスニペットを以下に示します。
"containerDefinitions": [ { "image": "
private-repo/private-image
", "repositoryCredentials": { "credentialsParameter": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name
" } } ]
プライベートレジストリ認証を有効にするもうひとつの方法として、Amazon ECS コンテナエージェントの環境変数を使用してプライベートレジストリを認証する方法があります。このメソッドは、EC2 起動タイプを使用するタスクでのみサポートされています。詳細については、「コンテナインスタンスのプライベートレジストリの認証」を参照してください。
プライベートレジストリの認証で必須の IAM アクセス許可
この機能を使用するには、Amazon ECS タスクの実行ロールが必要です。このロールを使用して、コンテナエージェントでコンテナイメージをプルできます。詳細については、「Amazon ECS タスク実行 IAM ロール」を参照してください。
作成したシークレットにアクセスできるように、インラインポリシーとして以下のアクセス許可をタスクの実行ロールに手動で追加する必要があります。詳細については、「IAM ポリシーの追加と削除」を参照してください。
-
secretsmanager:GetSecretValue
-
kms:Decrypt
— カスタムの KMS キーを使用するが、デフォルトのキーは使用しない場合にのみ必須。そのカスタムキーの ARN はリソースとして追加されている必要があります。
アクセス許可を追加するインラインポリシーの例を以下に示します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name", "arn:aws:kms:<region>:<aws_account_id>:key/key_id" ] } ] }
プライベートレジストリの認証の有効化
基本的なシークレットを作成するには
プライベートレジストリ認証情報のシークレットを作成するには、AWS Secrets Manager を使用します。
-
AWS Secrets Manager コンソール (https://console.aws.amazon.com/secretsmanager/
) を開きます。 -
[新しいシークレットの保存] を選択します。
-
[Select secret type (シークレットタイプの選択)] で、[Other type of secrets (他の種類のシークレット)] を選択します。
-
[プレーンテキスト] を選択し、次の形式でプライベートレジストリ認証情報を入力します。
{ "username" : "
privateRegistryUsername
", "password" : "privateRegistryPassword
" } -
[次] を選択します。
-
[Secret name (シークレット名)] に、オプションのパスと名前 (例:
production/MyAwesomeAppSecret
またはdevelopment/TestSecret
) を入力し、[次] を選択します。オプションで説明を追加することもできます。後でこのシークレットを思い出すのに役立ちます。シークレット名に使用できるのは、ASCII 文字、数字、または次の記号のみです: /_+=.@-
-
(オプション) この時点で、シークレットのローテーションを設定することができます。この手順では、[Disable automatic rotation (自動ローテーションを無効化)] は無効のままにし、[次] を選択します。
新規または既存のシークレットでローテーションを設定する方法については、「AWS Secrets Manager シークレットの更新」を参照してください。
-
設定を確認し、次に [Store secret (シークレットの保存)] を選択して入力した内容すべてを Secrets Manager の新しいシークレットとして保存します。
プライベートレジストリ認証を使用するタスク定義を作成するには
-
Amazon ECS コンソール (https://console.aws.amazon.com/ecs
) を開きます。 -
ナビゲーションペインで、[Task Definitions] を選択します。
-
[Task Definitions (タスク定義)] ページで、[Create new Task Definition (新しいタスク定義の作成)] を選択します。
-
[Select launch type compatibility (起動タイプの互換性の選択)] ページで、タスクで使用する起動タイプを選択し、[次のステップ] を選択します。
注記 このステップは、AWS Fargate を使用する Amazon ECS が現在サポートされているリージョンにのみ適用されます。詳細については、「AWS Fargate での Amazon ECS」を参照してください。
-
[Task Definition Name (タスク定義名)] に、タスク定義の名前を入力します。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。
-
[Task execution role (タスク実行ロール)] で、既存のタスク実行ロールを選択するか、[Create new role (新しいロールの作成)] を選択して作成します。このロールを使用して、タスクのプライベートイメージをプルする Amazon ECS を認証することができます。詳細については、「プライベートレジストリの認証で必須の IAM アクセス許可」を参照してください。
重要 [Task execution role (実行ロール)] フィールドが表示されない場合は、[Configure via JSON (JSON による設定)] を選択し、[
executionRoleArn
] フィールドを手動で追加して、タスク実行ロールを指定します。その構文を以下に示します。"executionRoleArn": "arn:aws:iam::
aws_account_id
:role/ecsTaskExecutionRole" -
タスク定義で作成するコンテナごとに、以下のステップを実行します。
-
[Container Definitions (コンテナの定義)] セクションで、[Add container (コンテナの定義)] を選択します。
-
[Container name (コンテナ名)] に、コンテナの名前を入力します。 最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。
-
[イメージ] に、イメージ名、またはプライベートイメージのパスを入力します。 最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。
-
[Private repository authentication (プライベートレポジトリの認証)] オプションを選択します。
-
[Secrets manager ARN (シークレットマネージャー ARN)] に、以前作成したシークレットの完全な Amazon リソースネーム (ARN) を入力します。値は、20~2048 文字で指定します。
-
コンテナの定義で使用するために、残りの必須のフィールドとオプションのフィールドに入力します。その他のコンテナの定義パラメータは、[Advanced container configuration (詳細コンテナ設定)] メニューより設定できます。詳細については、「タスク定義パラメータ」を参照してください。
-
[Add] を選択します。
-
-
コンテナが追加されたら、[作成] を選択します。