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

Amazon ECS タスク実行IAM ロール

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

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

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

    • 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 を検索します。ロールが存在しない場合は、「タスク実行 IAM ロールの作成」を参照してください。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。

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

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

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

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

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

タスク実行 IAM ロールの作成

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

タスク実行 IAM ロール (AWS Management Console) を作成するには

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

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

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

  4. [Use case] (ユースケース) で、[Elastic Container Service Task] (Elastic Container Service タスク)を選択した後、[Next] (次) を選択します。

  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. [ロールの作成] を選択します。

タスク実行 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 キーを使用するが、デフォルトのキーは使用しない場合にのみ必須。そのカスタムキーの 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": [ "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "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" } } } ] }