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 に今後の新機能および機能拡張のためのアクセス許可を追加できるようにする必要があります。IAM コンソールの検索を使用して、アカウントに既にタスク実行ロールがあるかどうかを検索ecsTaskExecutionRoleし、確認できます。詳細については、「IAM ユーザーガイド」の「IAM コンソール検索」を参照してください。

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

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

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

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

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

  4. サービスまたはユースケース で、Elastic Container Service を選択し、Elastic Container Service タスクのユースケースを選択します。

  5. [次へ] を選択します。

  6. アクセス許可の追加セクションで、AmazonECSTaskExecutionRolePolicy を検索し、ポリシーを選択します。

  7. (オプション) アクセス許可の境界を設定します。このアドバンスド機能は、サービスロールで使用できますが、サービスにリンクされたロールではありません。

    1. [アクセス許可の境界の設定] セクションを開き、[アクセス許可の境界を使用してロールのアクセス許可の上限を設定する] を選択します。

      IAM には、アカウントの AWS 管理ポリシーとカスタマー管理ポリシーのリストが含まれます。

    2. アクセス許可の境界として使用するポリシーを選択します。

  8. [次へ] を選択します。

  9. このロールの目的を識別しやすいロール名またはロール名サフィックスを入力します。

    重要

    ロールに名前を付けるときは、次のことに注意してください。

    • ロール名は 内で一意である必要があり AWS アカウント、大文字と小文字を区別して一意にすることはできません。

      例えば、PRODROLEprodrole の両方の名前でロールを作成することはできません。ロール名がポリシーまたは ARN の一部として使用される場合、ロール名は大文字と小文字が区別されます。ただし、サインインプロセスなど、コンソールにロール名がユーザーに表示される場合、ロール名は大文字と小文字が区別されません。

    • 他のエンティティがロールを参照する可能性があるため、ロールを作成した後にロール名を編集することはできません。

  10. (オプション) [説明] にロールの説明を入力します。

  11. (オプション) ロールのユースケースとアクセス許可を編集するには、[ステップ 1: 信頼されたエンティティを選択] または [ステップ 2: アクセス権限を追加] のセクションで [編集] を選択します。

  12. (オプション) ロールの識別、整理、検索を簡単にするには、キーと値のペアとしてタグを追加します。IAM でのタグの使用に関する詳細については、『IAM ユーザーガイド』の「IAM リソースにタグを付ける」を参照してください。

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

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 エンドポイントへのアクセスを制限します。詳細については、「AWS vグローバル条件コンテキストキー」を参照してください。

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