メニュー
Amazon EC2 Container Service
開発者ガイド (API Version 2014-11-13)

Amazon ECS コンテナインスタンスの IAM ロール

Amazon ECS コンテナエージェントはユーザーに代わって Amazon ECS API アクションを呼び出すため、エージェントを実行するコンテナインスタンスでは、エージェントがユーザーに属していることをサービスに伝えるため、IAM ポリシーおよびロールが必要です。コンテナインスタンスを起動してクラスターに登録する前に、起動するときに使用するコンテナインスタンス用の IAM ロールを作成する必要があります。この要件は Amazon が提供する Amazon ECS 最適化 AMI で起動したコンテナインスタンス、またはエージェントを実行する予定の他のインスタンスに適用されます。

重要

コンテナインスタンスを実行しているコンテナは、インスタンスのメタデータを通してコンテナインスタンスのロールに提供されている権限すべてにアクセスできます。コンテナインスタンスのロールのアクセス許可は、以下に提供されるマネージド型 AmazonEC2ContainerServiceforEC2Role ポリシーのアクセス許可の最小リストに制限することをお勧めします。タスクのコンテナでここにリストされていない追加のアクセス許可が必要な場合は、独自の IAM ロールを使用してタスクを提供することをお勧めします。詳細については、「タスク用の IAM ロール」を参照してください。

次の iptables コマンドをコンテナインスタンスで実行することで、docker0 ブリッジのコンテナがコンテナインスタンスのロールに指定されている権限にアクセスするのを防止できます (タスク用の IAM ロール で指定されている権限は依然として許可します)。ただし、このルールが有効である間は、コンテナからインスタンスメタデータをクエリすることはできません。このコマンドはデフォルトの Docker のブリッジ構成を前提とし、host ネットワークモードを使用してコンテナで動作しないことに注意してください。詳細については、「ネットワークモード」を参照してください。

Copy
$ iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP

AmazonEC2ContainerServiceforEC2Role のポリシーを次に示します。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:CreateCluster", "ecs:DeregisterContainerInstance", "ecs:DiscoverPollEndpoint", "ecs:Poll", "ecs:RegisterContainerInstance", "ecs:StartTelemetrySession", "ecs:Submit*", "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }

注記

コンテナインスタンスの登録先クラスターが既に存在する場合、上記のポリシーの ecs:CreateCluster 行はオプションです。クラスターが既に存在しない場合、エージェントにはクラスターを作成するアクセス権限が必要です。または、コンテナインスタンスを起動する前に、create-cluster コマンドでクラスターを作成できます。

ecs:CreateCluster 行を省略すると、デフォルトクラスターを含めて Amazon ECS コンテナエージェントはクラスターを作成することができません。

上記のポリシーの ecs:Poll 行は Amazon ECS サービスに接続して、ステータスのレポートとコマンドを取得するアクセス許可をエージェントに付与するために使用されます。

Amazon ECS インスタンスのロールは、コンソールの最初の実行時に自動的に作成されます。ただし、コンテナインスタンスのためのマネージド型 IAM ポリシーを手動でアタッチして、Amazon ECS に今後の新機能および機能拡張のためのアクセス許可を追加できるようにする必要があります。次の手順を使用してアカウントに既に Amazon ECS インスタンスのロールが存在するか確認し、必要に応じてマネージド IAM ポリシーをアタッチすることができます。

IAM コンソールで ecsInstanceRole を確認するには

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

  2. ナビゲーションペインで [Roles (ロール) ] を選択します。

  3. ロールのリストで ecsInstanceRole を検索します。ロールが見つからない場合、次の手順を使用してロールを作成します。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。

  4. [Permissions] タブを選択します。

  5. [Managed Policies] セクションで、[AmazonEC2ContainerServiceforEC2Role] 管理ポリシーがロールにアタッチされていることを確認します。ポリシーがアタッチされている場合、Amazon ECS インスタンスのロールが適切に構成されています。そうでない場合、次のサブステップに従ってポリシーをアタッチします。

    1. [Attach Policy] を選択します。

    2. [Filter] ボックスに、アタッチする利用可能なポリシーを絞り込むために [AmazonEC2ContainerServiceforEC2Role] と入力します。

    3. [AmazonEC2ContainerServiceforEC2Role] ポリシーの左側にあるチェックボックスをオンにし、[Attach Policy] を選択します。

  6. [Trust Relationships] タブと、[Edit Trust Relationship] を選択します。

  7. 信頼関係に以下のポリシーが含まれていることを確認します。信頼関係が以下のポリシーと一致する場合、[Cancel] を選択します。信頼関係が一致しない場合、ポリシーを [Policy Document] ウィンドウにコピーし、[Update Trust Policy] を選択します。

    Copy
    { "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

コンテナインスタンスの ecsInstanceRole IAM ロールを作成するには

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

  2. ナビゲーションペインで [Roles] を選択し、続いて [Create New Role] を選択します。

  3. [Role Name] フィールドで、ロールの名前を ecsInstanceRole と入力し、[Next Step] を選択します

  4. [Select Role Type] セクションで、[Amazon EC2 Role for EC2 Container Service] ロールの横にある [Select] を選択します。

  5. [Attach Policy] セクションで、[AmazonEC2ContainerServiceforEC2Role] ポリシーを選択し、[Next Step] を選択します。

  6. ロール情報を確認し、[Create Role] を選択して終了します。

Amazon S3の読み取り専用アクセスをコンテナインスタンスのロールに追加する

設定情報を Amazon S3 のプライベートバケットに保存し、コンテナインスタンスの IAM ロールに読み取り専用アクセス権限を付与するのが、コンテナインスタンスの起動時に設定を許可する安全で便利な方法です。ecs.config ファイルのコピーをプライベートバケットに保存し、Amazon EC2 ユーザーデータを使用して AWS CLI をインストールします。その後、インスタンスの起動時に設定情報を /etc/ecs/ecs.config にコピーします。

ecs.config ファイルの作成と Amazon S3 への保存、およびこの構成を使用したインスタンスの起動の詳細については、Amazon S3 にコンテナインスタンスの構成を保存する を参照してください。

Amazon S3 の読み取り専用アクセス権限をコンテナインスタンスのロールに許可するには

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

  2. ナビゲーションペインで [Roles (ロール) ] を選択します。

  3. コンテナインスタンスに対して使用する IAM ロールを選択します (このロールには多くの場合、ecsInstanceRole というタイトルが付けられます)。詳細については、「Amazon ECS コンテナインスタンスの IAM ロール」を参照してください。

  4. [Permissions] タブを選択します。

  5. [Managed Policies] の下で、[Attach Policy] を選択します。

  6. [Attach Policy] ページで、ポリシーの結果を絞り込むために [Filter] フィールドに S3 と入力します。

  7. [AmazonS3ReadOnlyAccess] ポリシーの左側にあるチェックボックスをオンにし、[Attach Policy] をクリックします。

    注記

    このポリシーは、すべての Amazon S3 リソースへの読み取り専用アクセスを許可します。制限の厳しいバケットポリシーの例については、「バケットポリシーの例」 (Amazon Simple Storage Service 開発者ガイド) を参照してください。