Amazon ECS コンテナインスタンスの IAM ロール - Amazon Elastic Container Service

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

Amazon ECS コンテナインスタンス(Amazon EC2 と外部インスタンスの両方を含む)では、Amazon ECS コンテナエージェントを実行し、エージェントがユーザーに属していることをサービスに伝える IAM ロールが必要です。コンテナインスタンスを起動してクラスターに登録する前に、使用するコンテナインスタンス用の IAM ロールを作成する必要があります。ロールは、コンソールへのログインまたは AWS CLI コマンドの実行に使用するアカウントで作成されます。

重要

クラスターに外部インスタンスを登録する場合、使用する IAM ロールには Systems Manager のアクセス許可も必要です。詳細については、「Amazon ECS Anywhere IAM ロール」を参照してください。

Amazon ECS では、AmazonEC2ContainerServiceforEC2Role 管理 IAM ポリシーを提供し、これには Amazon ECS の完全な機能セットを使用するために必要なアクセス権限が含まれます。この管理ポリシーは、IAM ロールにアタッチし、コンテナインスタンスに関連付けることができます。または、使用するカスタムポリシーを作成するときに、管理ポリシーをガイドとして使用することもできます。コンテナインスタンスロールには、Amazon ECS コンテナエージェントと Docker デーモンがユーザーに変わって AWS API を呼び出すために必要な許可があります。管理ポリシーの詳細については、「AmazonEC2ContainerServiceforEC2Role」を参照してください。

Amazon ECS は、サポートされている Amazon EC2 インスタンスタイプを使用して、ENI 密度が高いコンテナインスタンスの起動をサポートします。この機能を使用する場合は、2 つのコンテナインスタンスロールを作成することをお勧めします。1 つのロールで awsvpcTrunking アカウント設定を有効にし、そのロールを ENI トランキングを必要とするタスクに使用します。awsvpcTrunking アカウント設定については、「アカウント設定による Amazon ECS 機能へのアクセス」を参照してください。

コンテナインスタンスロールを作成する

重要

クラスターに外部インスタンスを登録する場合は、Amazon ECS Anywhere IAM ロール を参照してください。

機能や機能強化が今後導入されたときに Amazon ECS がそれらに対するアクセス許可を追加できるように、手動でロールを作成し、その IAM 管理ポリシーをコンテナインスタンスにアタッチできます。必要に応じて、以下の手順を使用してマネージド IAM ポリシーをアタッチします。

AWS Management Console
Elastic Container Service のサービスロールを作成するには (IAM コンソール)
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. IAM コンソールのナビゲーションペインで、[ロール]、[ロールを作成] を選択します。

  3. 信頼できるエンティティタイプ で、AWS サービス を選択します。

  4. [サービスまたはユースケース][エラスティックコンテナサービス] を選択し、次に [エラスティックコンテナサービスのユースケースの EC2 ロール] を選択します。

  5. [Next] を選択します。

  6. [アクセス許可ポリシー] セクションで、[AmazonEC2ContainerServiceforEC2Role] ポリシーが選択されていることを確認します。

    重要

    AmazonEC2ContainerServiceforEC2Role 管理ポリシーは、コンテナインスタンス IAM ロールにアタッチする必要があります。アタッチされていない場合、AWS Management Console をクリックして、クラスターを作成します。

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

  8. [ロール名] には、[ecsInstanceRole] と入力します。

  9. ロールを確認したら、[Create role] (ロールを作成) を選択します。

AWS CLI

すべてのユーザー入力を自分の値に置き換えてください。

  1. instance-role-trust-policy.json というファイルを次の内容で作成します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
  2. 信頼ポリシードキュメントを使用してインスタンスの IAM ロールを作成するには、次のコマンドを使用します。

    aws iam create-role \ --role-name ecsInstanceRole \ --assume-role-policy-document file://instance-role-trust-policy.json
  3. create-instance-profile コマンドを使用して、ecsInstanceRole-profile という名前のインスタンスプロファイルを作成します。

    aws iam create-instance-profile --instance-profile-name ecsInstanceRole-profile

    レスポンスの例

    { "InstanceProfile": { "InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE", "Roles": [], "CreateDate": "2022-04-12T23:53:34.093Z", "InstanceProfileName": "ecsInstanceRole-profile", "Path": "/", "Arn": "arn:aws:iam::123456789012:instance-profile/ecsInstanceRole-profile" } }
  4. ecsInstanceRole インスタンスプロファイルに ecsInstanceRole-profile ロールを追加します。

    aws iam add-role-to-instance-profile \ --instance-profile-name ecsInstanceRole-profile \ --role-name ecsInstanceRole
  5. 次のコマンドを使用して、AmazonEC2ContainerServiceRoleForEC2Role マネージドポリシーをロールにアタッチします。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role \ --role-name ecsInstanceRole

ロールを作成したら、次の機能のアクセス許可をロールに追加します。

機能

追加のアクセス許可

Amazon ECR でコンテナイメージを取得する

Amazon ECR のアクセス許可

CloudWatch Logs でコンテナインスタンスをモニタリングする

コンテナインスタンスのモニタリングに必要なアクセス許可

設定ファイルを Amazon S3 バケットでホストする

Amazon S3 への読み取り専用アクセス

Amazon ECR のアクセス許可

コンテナインスタンスで使用する Amazon ECS コンテナインスタンスロールには、Amazon ECR に対する以下の IAM ポリシーのアクセス許可が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", "ecr:GetAuthorizationToken" ], "Resource": "*" } ] }

コンテナインスタンスに AmazonEC2ContainerServiceforEC2Role 管理ポリシーを使用すると、ロールに適切なアクセス権限が付与されます。ロールが Amazon ECR をサポートすることを確認するには、Amazon Elastic Container Service デベロッパーガイドの「Amazon ECS コンテナインスタンスの IAM ロール」を参照してください。

Amazon S3 への読み取り専用アクセス

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

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

次の AWS CLI コマンドを使用すると、Amazon S3 の読み取り専用アクセス許可をコンテナインスタンスのロールに許可できます。前に作成したロールの名前で ecsInstanceRole を置き換えます。

aws iam attach-role-policy \ --role-name ecsInstanceRole \ --policy-arn arn:aws::iam::aws:policy/AmazonS3ReadOnlyAccess

IAM コンソールを使用して、Amazon S3 の読み取り専用アクセス許可 (AmazonS3ReadOnlyAccess) をロールに追加することもできます。詳細については、AWS Identity and Access Management ユーザーガイドの「ロールのアクセス許可ポリシーの変更 (コンソール)」 を参照してください。

コンテナインスタンスのモニタリングに必要なアクセス許可

コンテナインスタンスが CloudWatch Logs にログデータを送信する前に、コンテナインスタンスに CloudWatch Logs API の使用を許可する IAM ポリシーを作成し、そのポリシーを ecsInstanceRole にアタッチする必要があります。

AWS Management Console
JSON ポリシーエディタでポリシーを作成するには
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. 左側のナビゲーションペインで、[ポリシー] を選択します。

    初めて [ポリシー] を選択する場合には、[管理ポリシーにようこそ] ページが表示されます。[今すぐ始める] を選択します。

  3. ページの上部で、[ポリシーを作成] を選択します。

  4. [ポリシーエディタ] セクションで、[JSON] オプションを選択します。

  5. 次の JSON ポリシードキュメントを入力します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": ["arn:aws:logs:*:*:*"] } ] }
  6. [次へ] をクリックします。

    注記

    いつでも [Visual] と [JSON] エディタオプションを切り替えることができます。ただし、[Visual] エディタで [] に変更または選択した場合、IAM はポリシーを再構成して visual エディタに合わせて最適化することがあります。詳細については、「IAM ユーザーガイド」の「ポリシーの再構成」を参照してください。

  7. [確認と作成] ページで、作成するポリシーの [ポリシー名][説明] (オプション) を入力します。[このポリシーで定義されているアクセス許可] を確認して、ポリシーによって付与されたアクセス許可を確認します。

  8. [ポリシーの作成] をクリックして、新しいポリシーを保存します。

ポリシーを作成したら、そのポリシーをコンテナインスタンスロールにアタッチします。ポリシーをロールにアタッチする方法については、AWS Identity and Access Management ユーザーガイドの「ロールのアクセス許可ポリシーの変更 (コンソール)」を参照してください。

AWS CLI
  1. instance-cw-logs.json というファイルを次の内容で作成します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": ["arn:aws:logs:*:*:*"] } ] }
  2. JSON ポリシードキュメントファイルを使用して IAM ポリシーを作成するには、次の コマンドを使用します。

    aws iam create-policy \ --policy-name cwlogspolicy \ --policy-document file://instance-cw-logs.json
  3. 次のコマンドを使用して、作成した IAM ポリシーの ARN を取得します。cwlogspolicy は、作成したポリシーの名前に置き換えます。

    aws iam list-policies --scope Local --query 'Policies[?PolicyName==`cwlogsppolicy`].Arn'
  4. ポリシー ARN を使用してコンテナインスタンスの IAM ロールにポリシーをアタッチするには、次のコマンドを使用します。

    aws iam attach-role-policy \ --role-name ecsInstanceRole \ --policy-arn arn:aws:iam:111122223333:aws:policy/cwlogspolicy