Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

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

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 を使用します。

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

  2. [新しいシークレットの保存] を選択します。

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

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

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

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

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

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

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

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

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

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

  2. ナビゲーションペインで、[Task Definitions] を選択します。

  3. [Task Definitions] ページで、[Create new Task Definition] を選択します。

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

    注記

    このステップは、AWS Fargate を使用する Amazon ECS が現在サポートされているリージョンにのみ適用されます。詳細については、「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. [イメージ] に、イメージ名、またはプライベートイメージのパスを入力します。 最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

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

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

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

    7. [Add] を選択します。

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