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 インスタンスでホストされています。また、
-
プライベートレジストリの認証を使用します。詳細については、「プライベートレジストリ認証のアクセス許可」を参照してください。
-
Runtime Monitoring を使用します。
-
タスク定義は、Secrets Manager のシークレットまたは AWS Systems Manager Parameter Store のパラメータを使用して機密データを参照します。詳細については、「Secrets Manager または Systems Manager のアクセス許可」を参照してください。
-
注記
タスク実行ロールは 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
ファイルを変更したりすることはできません。詳細については、「タスクのプライベートレジストリの認証」を参照してください。
タスク実行 ロールの作成
アカウントにまだタスク実行ロールがない場合は、次のステップに従ってロールを作成します。
ロールを作成したら、次の機能のアクセス許可をロールに追加します。
機能 | 追加のアクセス許可 |
---|---|
Secrets Manager の認証情報を使用してコンテナイメージのプライベートリポジトリにアクセスする |
|
Systems Manager または Secrets Manager を使用して機密データを渡す | |
Fargate タスクが、インターネットエンドポイントを介して Amazon ECR イメージをプルできるようにする | インターフェイスエンドポイントのアクセス許可によって Amazon ECR イメージをプルする Fargate タスクです。 |
設定ファイルを Amazon S3 バケットでホストする | |
Amazon ECS ライフサイクルイベントを表示するように Container Insights を設定する |
Amazon ECS ライフサイクルイベントを表示するには、Container Insights を設定するために必要なアクセス権限が必要です。 |
Container Insights に Amazon ECS ライフサイクルイベントを表示する |
Amazon ECS ライフサイクルイベントを Container Insights で表示するには、以下のアクセス許可が必要です。 |
プライベートレジストリ認証のアクセス許可
作成したシークレットにアクセスできるようにするには、以下のアクセス許可を、インラインポリシーとしてタスクの実行ロール追加します。詳細については、「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 へのアクセスを制限します。タスクとエンドポイントをホストする VPC に制限できます。 -
aws:SourceVpce
- 特定の VPC エンドポイントへのアクセスを制限します。
次のタスク実行ロールポリシーは、条件キーを追加する方法の例を示しています。
{ "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 からファイルを取得するために必要なアクセス許可を追加します。Amazon S3 バケットの名前と設定ファイル名を指定します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "
s3:GetObject
" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
/folder_name
/config_file_name
" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
" ] } ] }
Amazon ECS ライフサイクルイベントを表示するには、Container Insights を設定するために必要なアクセス権限が必要です。
ライフサイクルイベントを設定するには、タスクロールで以下のアクセス許可が必要です。
-
events:PutRule
-
events:PutTargets
-
logs:CreateLogGroup
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutRule", "events:PutTargets", "logs:CreateLogGroup" ], "Resource": "*" } ] }
Amazon ECS ライフサイクルイベントを Container Insights で表示するには、以下のアクセス許可が必要です。
ライフサイクルイベントを表示するには、以下のアクセス権限が必要です。次のアクセス許可をインラインポリシーとしてタスク実行ロールに追加します。詳細については、「IAM ポリシーの追加と削除」を参照してください。
-
events:DescribeRule
-
events:ListTargetsByRule
-
logs:DescribeLogGroups
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:DescribeRule", "events:ListTargetsByRule", "logs:DescribeLogGroups" ], "Resource": "*" } ] }