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

Amazon ECS タスク実行 IAM ロール

Amazon ECS コンテナエージェントはユーザーに代わって Amazon ECS API を呼び出すため、エージェントがユーザーに属していることをサービスに伝えるために、IAM ポリシーおよびロールが必要です。この IAM ロールは、タスク実行 IAM ロールと呼ばれます。さまざまな目的の複数のタスク実行ロールを、アカウントに関連付けることができます。

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

  • タスクでは、Fargate 起動タイプを使用して ...

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

    • awslogs ログドライバーを使用します。

  • タスクは Fargate または 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. https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。

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

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

  4. [アクセス許可] を選択します。AmazonECSTaskExecutionRolePolicy マネージドポリシーがロールにアタッチされていることを確認します。ポリシーがアタッチされている場合、Amazon ECS タスク実行ロールは適切に設定されています。そうでない場合、次のサブステップに従ってポリシーをアタッチします。

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

    2. [フィルター] に AmazonECSTaskExecutionRolePolicy と入力して、アタッチする利用可能なポリシーを絞り込みます。

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

  5. [信頼関係]、[信頼関係の編集] の順に選択します。

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

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

ecsTaskExecutionRole IAM ロールを作成するには

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

  2. ナビゲーションペインで [Roles]、[Create role] の順に選択します。

  3. [信頼されたエンティティの種類を選択] セクションで、[Elastic Container Service] を選択します。

  4. [ユースケースの選択] セクションで、[Elastic Container Service のタスク]、[次の手順: アクセス許可] の順に選択します。

  5. [アクセス権限ポリシーをアタッチする] セクションで AmazonECSTaskExecutionRolePolicy を検索してポリシーを選択し、[Next: Review (次の手順: 確認)] を選択します。

  6. [Role Name] に ecsTaskExecutionRole と入力し、[Create role] を選択します。

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

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

作成したシークレットにアクセスできるように、インラインポリシーとして以下のアクセス許可をタスクの実行ロールに手動で追加する必要があります。詳細については、「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" ] } ] }

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

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

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

  • ssm:GetParameters — Systems Manager パラメータストアのパラメータをタスク定義で参照する場合は必須です。

  • secretsmanager:GetSecretValue — Secrets Manager シークレットを直接参照するか、Systems Manager パラメータストアのパラメータがタスク定義で Secrets Manager シークレットを参照している場合は必須です。

  • kms:Decrypt— シークレットでカスタムの KMS キーを使用するが、デフォルトのキーは使用しない場合にのみ必須です。そのカスタムキーの 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 エンドポイントへのアクセスを制限します。詳細については、「AWS グローバル条件コンテキストキー」を参照してください。

  • 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" } } } ] }