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

Amazon ECS タスク実行IAM ロール

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

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

  • あなたのタスクはAWS Fargateまたは外部インスタンスでと...

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

    • コンテナログを CloudWatch Logs に送信するには、awslogsログドライバーを使用します。詳細については、「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 マネージドポリシーがロールにアタッチされていることを確認します。ポリシーがアタッチされている場合、Amazon ECS タスク実行ロールは適切に設定されています。そうでない場合、次のサブステップに従ってポリシーをアタッチします。

    1. [ポリシーのアタッチ] を選択します。

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

タスク実行 ロールの作成

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

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

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

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

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

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

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

  6. を使用する場合タグの追加(オプション)で、ポリシーに関連付けるカスタムタグを指定し、次の手順:レビュー

  7. [Role Name] に ecsTaskExecutionRole と入力し、[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

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

プライベートレジストリ認証機能を使用するには、 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 アクセス許可

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 エンドポイントへのタスクアクセスを制限できます。この操作を行うには、 条件キーを使用するタスクのタスク実行ロールを作成します。

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

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