タスクのプライベートレジストリの認証 - Amazon Elastic Container Service

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

AWS Secrets Manager を使用したタスクのプライベートレジストリ認証では、認証情報を安全に保存し、タスク定義で参照することができます。これは、タスク定義で認証が必要な AWS の外部にあるプライベートレジストリーに存在するコンテナイメージを参照できます。この機能は、Amazon ECS Anywhere を使用して Fargate、Amazon EC2 インスタンス、および外部インスタンスでホストされるタスクでサポートされています。

重要

タスク定義で、Amazon ECR に保存されたイメージを参照している場合、このトピックは適用されません。詳細については、Amazon Elastic Container Registry ユーザーガイドの「Amazon ECS で Amazon ECR イメージを使用する」を参照してください。

EC2 インスタンスでホストされるタスクの場合、この機能のために、コンテナーエージェントのバージョン 1.19.0 以降が必要です。ただし、最新のコンテナエージェントのバージョンを使用することをお勧めします。エージェントのバージョンの確認方法と最新バージョンへの更新方法については、「Amazon ECS コンテナエージェントをアップデートする」を参照してください。

Fargate でホストされているタスクの場合、この機能にはプラットフォームバージョン 1.2.0 以降が必要です。詳細については、AWS Fargate プラットフォームのバージョン を参照してください。

コンテナの定義内で、作成したシークレットの詳細 で repositoryCredentials オブジェクトを指定します。参照するシークレットは、タスクが使用するものと異なる AWS リージョン、または異なるアカウントに置くことができます。

注記

Amazon ECS API、AWS CLI、または AWS SDK を使用しており、起動するタスクと同じ AWS リージョン にシークレットが存在する場合は、シークレットの完全な ARN または名前のどちらも使用可能です。シークレットが別のアカウントに存在する場合は、シークレットの完全な ARN を指定する必要があります。AWS Management Console を使用する場合は、シークレットの完全な ARN を常に指定する必要があります。

必要なパラメータが含まれるタスク定義のスニペットを、以下に示します。

"containerDefinitions": [ { "image": "private-repo/private-image", "repositoryCredentials": { "credentialsParameter": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name" } } ]
注記

プライベートレジストリ認証を有効にするもうひとつの方法として、Amazon ECS コンテナエージェントの環境変数を使用してプライベートレジストリを認証する方法があります。このメソッドは、Amazon EC2 インスタンスでホストされるタスクでのみサポートされています。詳細については、「コンテナインスタンスのプライベートレジストリの認証」を参照してください。

プライベートレジストリの認証で必須の IAM アクセス許可

この機能を使用するには、Amazon ECS タスクの実行ロールが必要です。このロールを使用して、コンテナエージェントでコンテナイメージをプルできます。詳細については、「Amazon ECS タスク実行IAM ロール」を参照してください。

作成したシークレットにアクセスできるようにするには、以下のアクセス許可を、インラインポリシーとしてタスクの実行ロール追加します。詳細については、「IAM ポリシーの追加と削除」を参照してください。

  • secretsmanager:GetSecretValue

  • kms:Decrypt - カスタムの KMS キーを使用するが、デフォルトのキーは使用しない場合にのみ必須。カスタムキーの Amazon リソースネーム (ARN) は、リソースとして追加する必要があります。

次の例では、インラインポリシーによりアクセス許可を追加しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "ssm:GetParameters", "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 を使用します。

  1. https://console.aws.amazon.com/secretsmanager/ から AWS Secrets Manager コンソールを開きます。

  2. [Store a new secret] (新しいシークレットの保存) を選択します。

  3. [Select secret type] (シークレットタイプの選択) で、[Other type of secrets] (他の種類のシークレット) を選択します。

  4. [プレーンテキスト] を選択し、次の形式でプライベートレジストリ認証情報を入力します。

    { "username" : "privateRegistryUsername", "password" : "privateRegistryPassword" }
  5. [Next] を選択します。

  6. [Secret name] (シークレット名) に、オプションのパスと名前 (例: production/MyAwesomeAppSecret または development/TestSecret) を入力し、[Next] (次へ) を選択します。オプションで説明を追加することもできます。後でこのシークレットを思い出すのに役立ちます。

    シークレット名に使用できるのは、ASCII 文字、数字、または以下の記号のみです: /_+=.@-

  7. (オプション) この時点で、シークレットのローテーションを設定することができます。この手順では、[Disable automatic rotation] (自動ローテーションを無効化) は無効のままにし、[] を選択します。

    新規または既存のシークレットの更新を設定する方法については、「AWS Secrets Manager シークレットの更新」を参照してください。

  8. 設定を確認した上で、[Store secret] (シークレットの保存) を選択し、入力した全内容を Secrets Manager の新しいシークレットとして保存します。

プライベートレジストリ認証を使用するタスク定義を作成するには

  1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs/) を開きます。

  2. ナビゲーションペインで、[タスク定義] を選択します。

  3. [Task Definitions (タスク定義)] ページで、[Create new Task Definition (新しいタスク定義の作成)] を選択します。

  4. [Select launch type compatibility (起動タイプの互換性の選択)] ページで、タスクで使用する起動タイプを選択し、[次のステップ] を選択します。

    注記

    このステップは、Amazon ECS での AWS Fargate の使用がサポートされているリージョンにのみ適用します。詳細については、「AWS Fargate での Amazon ECS」を参照してください。

  5. [Task Definition Name] (タスク定義名) に、タスク定義の名前を入力します。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

  6. [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"
  7. タスク定義で作成するコンテナごとに、以下のステップを実行します。

    1. [Container Definitions (コンテナの定義)] セクションで、[Add container (コンテナの定義)] を選択します。

    2. [Container name] (コンテナ名) に、コンテナの名前を入力します。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

    3. [Image (イメージ)] に、イメージ名、またはプライベートイメージのパスを入力します。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

    4. [Private repository authentication (プライベートレポジトリの認証)] オプションを選択します。

    5. [Secrets manager ARN (シークレットマネージャー ARN)] に、以前作成したシークレットの完全な Amazon リソースネーム (ARN) を入力します。値は、20~2048 文字で指定します。

    6. コンテナの定義で使用するために、残りの必須のフィールドとオプションのフィールドに入力します。その他のコンテナの定義パラメータは、[Advanced container configuration] (詳細コンテナ設定) メニューより設定できます。詳細については、「タスク定義パラメータ」を参照してください。

    7. [Add] (追加) を選択します。

  8. コンテナが追加されたら、[作成] を選択します。