Amazon ECS タスク実行IAM ロール - Amazon Elastic Container Service

Amazon ECS タスク実行IAM ロール

タスク実行ロールは、ユーザーに代わって AWS API コールを実行するためのアクセス許可を Amazon ECS コンテナと Fargate エージェントに付与します。タスク実行 IAM ロールは、タスクの要件に応じて必要です。さまざまな目的とサービスのタスク実行ロールを、アカウントに複数関連付けることができます。アプリケーションの実行に必要な IAM 許可については、「タスク IAM ロール」を参照してください。

以下に示しているのは、タスク実行 IAM ロールの一般的なユースケースです。

  • タスクは AWS Fargate または外部インスタンスでホストされています…

    • Amazon ECR プライベートリポジトリからコンテナイメージをプルします。

    • タスクを実行するアカウントとは別のアカウントの Amazon ECR プライベートリポジトリからコンテナイメージをプルしています。

    • awslogs ログドライバーを使用して CloudWatch Logs にコンテナログを送信します。詳細については、「awslogs ログドライバーを使用する」を参照してください。

  • タスクは、AWS Fargate またはAmazon EC2 インスタンスでホストされています…

注記

タスク実行ロールは Amazon ECS コンテナエージェントバージョン 1.16.0 以降でサポートされています。

Amazon ECS は、AmazonECSTaskExecutionRolePolicy という管理ポリシーを提供します。このポリシーには、上記の一般的ユースケースで必要なアクセス許可が含まれています。以下に示す特殊なユースケースでは、タスク実行ロールにインラインポリシーを追加することが必要な場合があります。

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

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

IAM コンソールでのタスク実行 (ecsTaskExecutionRole) ロールの確認

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

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

  3. 検索ボックスに「ecsTaskExecutionRole」と入力します。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。

  4. [アクセス許可] タブで、AmazonECSTaskExecutionRolePolicy がロールにアタッチされていることを確認します。

    1. [Add Permissions] (許可の追加)、[Attach policies] (ポリシーの添付) を選択します。

    2. アタッチが可能なポリシーを絞り込むためには、[フィルター] に、「AmazonECSTaskExecutionRolePolicy]」と入力します。

    3. [AmazonECSTaskExecutionRolePolicy] ポリシーの左にあるボックスをオンにし、[ポリシーをアタッチ] を選択します。

  5. [Trust relationships (信頼関係)] を選択します。

  6. 信頼関係に以下のポリシーが含まれていることを確認します。信頼関係が以下のポリシーと一致する場合、[Cancel] (キャンセル) を選択します。信頼関係が一致しない場合、[Edit trust policy] (信頼ポリシー編集) を選択して、ポリシーを [Policy Document] (ポリシードキュメント) ウィンドウにコピーし、[Update policy] (ポリシー更新) を選択します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

タスク実行 (ecsTaskExecutionRole) ロールの作成

アカウントにまだタスク実行ロールがない場合は、次のステップに従ってロールを作成します。

タスク実行 IAM ロール (AWS Management Console) を作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [ロール][ロールの作成] の順に選択します。

  3. [Trusted entity type] (信頼されたエンティティタイプ) セクションで、[AWS service][Elastic Container Service] の順に選択します。

  4. [ユースケース] で、[Elastic Container Service タスク] を選択した後、[次へ] を選択します。

  5. [Attach permissions policy] (許可ポリシーの添付) セクションで、以下の操作を行います。

    1. [AmazonECSTaskExecutionRolePolicy]を検索し、ポリシーを選択します。

    2. [Set permissions boundary - optional] (許可境界の設定 - オプション) で、[Create role without a permissions boundary] (許可境界のないロールを作成する) を選択します。

    3. [Next] (次へ) をクリックします。

  6. [Role details] (ロール詳細) で、次の操作を行います。

    1. [Role name](ロール名) に ecsTaskExecutionRole を入力します。

    2. [Add tags (optional)] (タグ追加 (オプション)) の場合、ポリシーに関連付けるカスタムタグを指定します。

  7. [Create role] (ロールの作成) を選択します。

タスク実行 IAM ロール (AWS CLI) を作成するには
  1. IAM ロールに使用する信頼ポリシーが含まれる ecs-tasks-trust-policy.json という名前のファイルを作成します。ファイルには次の内容が含まれます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 前のステップで作成した信頼ポリシーを使用した ecsTaskExecutionRole という名前の IAM ロールを作成します。

    aws iam create-role \ --role-name ecsTaskExecutionRole \ --assume-role-policy-document file://ecs-tasks-trust-policy.json
  3. AWS 管理 AmazonECSTaskExecutionRolePolicy ポリシー ecsTaskExecutionRole をロールにアタッチします。本ポリシーの提供内容

    aws iam attach-role-policy \ --role-name ecsTaskExecutionRole \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

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

この機能を使用するには、Amazon ECS タスクの実行ロールが必要です。このロールを使用して、コンテナエージェントでコンテナイメージをプルできます。

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

  • secretsmanager:GetSecretValue

  • kms:Decrypt - カスタムの KMS キーを使用するが、デフォルトのキーは使用しない場合にのみ必須。カスタムキーの Amazon リソースネーム (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" ] } ] }

Amazon ECS シークレットで必須の IAM アクセス許可

Amazon ECS シークレット機能を使用するには、Amazon ECS タスク実行ロールを持っていて、タスク定義でそのロールを参照する必要があります。このロールにより、必要な AWS Systems Manager または Secrets Manager のリソースをコンテナエージェントがプルできます。詳細については、「コンテナへの機密データの受け渡し」を参照してください。

Secrets Manager の使用

作成した Secrets Manager シークレットにアクセスできるようにするには、タスクの実行ロールに対し、以下のアクセス許可を手動により追加します。アクセス許可の管理の詳細については、「IAM ユーザーガイド」の「IAM ID のアクセス許可の追加および削除」を参照してください。

  • secretsmanager:GetSecretValue – Secrets Manager シークレットを参照する場合に必須です。Secrets Manager からシークレットを取得するための許可を追加します。

次のポリシーの例では、必須のアクセス許可を追加します。

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

Systems Manager の使用

重要

EC2 起動タイプを使用するタスクの場合、この機能を使用するには ECS エージェント設定変数 ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true を使用する必要があります。コンテナインスタンスの作成時に ./etc/ecs/ecs.config ファイルに追加するか、既存のインスタンスに追加して ECS エージェントを再起動できます。詳細については、「Amazon ECS コンテナエージェントの設定」を参照してください。

作成した Systems Manager Parameter Store のパラメータにアクセスできるようにするには、タスク実行ロールに対し、以下のアクセス許可を手動で追加する必要があります。アクセス許可の管理の詳細については、「IAM ユーザーガイド」の「IAM ID のアクセス許可の追加および削除」を参照してください。

  • ssm:GetParameters – Systems Manager Parameter Store のパラメータをタスク定義で参照している場合は必須です。Systems Manager パラメータを取得するための許可を追加します。

  • secretsmanager:GetSecretValue – Secrets Manager シークレットをユーザーが直接参照している、あるいは、Systems Manager Parameter Store のパラメータが、タスク定義で Secrets Manager シークレットを参照している場合は必須です。Secrets Manager からシークレットを取得するための許可を追加します。

  • kms:Decrypt – シークレットが、デフォルトのキーではなく、カスタマーマネージドのキーを使用している場合にのみ必須です。そのカスタムキーの ARN はリソースとして追加されている必要があります。カスタマーマネージドキーを復号するための許可を追加します。

次の例のポリシーでは、必須のアクセス許可を追加します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters", "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:ssm:region:aws_account_id:parameter/parameter_name", "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name", "arn:aws:kms:region:aws_account_id:key/key_id" ] } ] }

インターネットエンドポイントを介して Amazon ECR イメージをプルする Fargate タスク用の IAM アクセス許可 (オプション)

Amazon ECR がインターフェイス VPC エンドポイントを使用するように設定されているときに、Amazon ECR からイメージをプルする Fargate 起動タイプを使用するタスクを起動するときは、特定の VPC または VPC エンドポイントへのアクセスにタスクを制限できます。この操作を行うには、IAM 条件キーを使用するタスクのタスク実行ロールを作成します。

次の IAM グローバル条件キーを使用して、特定の VPC または VPC エンドポイントへのアクセスを制限します。詳細については、「AWSvグローバル条件コンテキストキー」を参照してください。

  • aws:SourceVpc - 特定の VPC へのアクセスを制限します。

  • aws:SourceVpce - 特定の VPC エンドポイントへのアクセスを制限します。

次のタスク実行ロールポリシーは、条件キーを追加する方法の例を示しています。

重要

ecr:GetAuthorizationToken API アクションには、aws:sourceVpc または aws:sourceVpce 条件キーを適用することができません。これは、GetAuthorizationToken API コールは、タスクの Elastic Network Interface ではなく、AWS Fargate が所有する Elastic Network Interface を経由するためです。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpce": "vpce-xxxxxx", "aws:sourceVpc": "vpc-xxxxx" } } } ] }