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

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

AWS Secrets Manager を使用したタスクのプライベートレジストリ認証では、認証情報を安全に保存し、コンテナの定義で参照することができます。これにより、プライベートリポジトリのイメージをタスクで使用できるようになります。この機能は、EC2 起動タイプを使用するタスクでのみサポートされています。

この機能を使用するには、バージョン 1.19.0 以上のコンテナエージェントが必要です。最新バージョンのコンテナエージェントを使用することをお勧めします。エージェントのバージョンの確認と最新バージョンへの更新については、「Amazon ECS コンテナエージェントの更新」を参照してください。

コンテナの定義内で、作成したシークレットの完全な ARN または ID で repositoryCredentials を指定します。参照するシークレットのリージョンが、タスクと異なる場合がありますが、同じアカウント内である必要があります。必要なパラメータを示すタスク定義のスニペットを以下に示します。

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

注記

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

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

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

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

  • secretsmanager:GetSecretValue

  • kms:Decrypt。カスタムの KMS キーを使用するが、デフォルトの KMS キーは使用しない場合にのみ必須。

アクセス許可を追加するインラインポリシーの例を以下に示します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "secretsmanager:GetSecretValue" ], "Resource": [ "aws:ssm:region:aws_account_id:secret:secret_name" ] } ] }

プライベートレジストリの認証の有効化

基本的なシークレットを作成するには

プライベートレジストリ認証情報のシークレットを作成するには、AWS Secrets Manager を使用します。

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

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

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

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

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

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

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

  7. (オプション) この時点で、シークレットのローテーションを設定することができます。ここではローテーションのない「基本」シークレットを扱っているため、[Disable automatic rotation (自動ローテーションを無効化)] のままにして [Next (次へ)] を選択します。

    新規または既存のシークレットでローテーションを設定する方法については、「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] ページで、[EC2]、[Next step] の順に選択します。

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

  6. [Task execution role (タスク実行ロール)] で、既存のタスク実行ロールを選択するか、[Create new role (新しいロールの作成)] を選択して作成します。このロールを使用して、タスクのプライベートイメージをプルする Amazon ECS を認証することができます。詳細については、「プライベートレジストリの認証では IAM アクセス許可が必須」を参照してください。

  7. タスク定義で作成するコンテナごとに、以下のステップを実行します。

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

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

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

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

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

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

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

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