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

Amazon ECS タスク実行IAM ロール

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

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

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

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

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

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

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

注記

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

Amazon ECS は、上記の一般的なユースケースに必要なアクセス許可を含む、AmazonECSTaskExecutionRolePolicy という管理ポリシーを提供しています。詳細については、「AWS Managed Policy リファレンスガイド」の「AmazonECSTaskExecutionRolePolicy」を参照してください。特殊なユースケースでは、タスク実行ロールにインラインポリシーを追加する必要がある可能性があります。

Amazon ECS コンソールで、ECS タスク実行ロールを作成します。追加の機能や機能強化が導入された場合に Amazon ECS がそのアクセス許可を追加できるように、タスクのマネージド IAM ポリシーを手動でアタッチすることができます。IAM コンソールの検索を使用して ecsTaskExecutionRole を検索すると、アカウントにすでにタスク実行ロールがあるかどうかを確認できます。詳細については、IAM ユーザーガイドの「IAM コンソールの検索」を参照してください。

認証されたユーザーとしてイメージをプルすると、Docker Hub のプルレート制限が変更された場合でも、影響を受ける可能性が低くなります。詳細については、「コンテナインスタンスのプライベートレジストリの認証」を参照してください。

Amazon ECR と Amazon ECR パブリックを使用することで、Docker によって課せられる制限を回避できます。Amazon ECR からイメージをプルすると、ネットワークのプル時間を短縮し、トラフィックが VPC を離れる際のデータ転送の変更を減らすのにも役立ちます。

Fargate を使用するときは、repositoryCredentials を使用してプライベートイメージレジストリの認証を行う必要があります。Amazon ECS コンテナエージェントの環境変数である ECS_ENGINE_AUTH_TYPE および ECS_ENGINE_AUTH_DATA を設定したり、Fargate でホストされているタスクの ecs.config ファイルを変更したりすることはできません。詳細については、「タスクのプライベートレジストリの認証」を参照してください。

タスク実行 ロールの作成

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

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

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

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

  4. [サービスまたはユースケース][エラスティックコンテナサービス] を選択し、次に [エラスティックコンテナのサービスタスク] を選択します。

  5. [Next] を選択します。

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

  7. [Next] を選択します。

  8. [ロール名][ECSTaskExecutionRole] と入力します。

  9. ロールを確認したら、[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

ロールを作成したら、次の機能のアクセス許可をロールに追加します。

機能

追加のアクセス許可

Secrets Manager の認証情報を使用してコンテナイメージのプライベートリポジトリにアクセスする

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

Systems Manager または Secrets Manager を使用して機密データを渡す

Secrets Manager または Systems Manager のアクセス許可

Fargate タスクが、インターネットエンドポイントを介して Amazon ECR イメージをプルできるようにする

インターフェイスエンドポイントのアクセス許可によって Amazon ECR イメージをプルする Fargate タスクです。

設定ファイルを Amazon S3 バケットでホストする

Amazon S3 ファイルストレージのアクセス許可

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

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

Secrets Manager または Systems Manager のアクセス許可

コンテナエージェントが必要な AWS Systems Manager または Secrets Manager のリソースをプルできるようにするためのアクセス許可です。詳細については、「Amazon ECS コンテナに機密データを渡す」を参照してください。

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 タスクです。

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

Amazon S3 ファイルストレージのアクセス許可

Amazon S3 でホストされる設定ファイルを指定する場合、タスクの実行ロールには、設定ファイル用の s3:GetObject アクセス許可と、ファイルが格納されている Amazon S3 バケットに対する s3:GetBucketLocation アクセス許可が含まれている必要があります。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「ポリシーでのアクセス許可の指定」を参照してください。

次のポリシーの例では、Amazon S3 からファイルを取得するために必要なアクセス許可を追加します。Amazon S3 バケットの名前と設定ファイル名を指定します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/folder_name/config_file_name" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }