Amazon ECS インフラストラクチャ IAM ロール - Amazon Elastic Container Service

Amazon ECS インフラストラクチャ IAM ロール

Amazon ECS インフラストラクチャ IAM ロールを使用すると、Amazon ECS はユーザーに代わってクラスター内のインフラストラクチャリソースを管理できます。次の場合に使用します。

  • Amazon EBS ボリュームを Fargate または EC2 起動タイプの Amazon ECS タスクにアタッチできます。インフラストラクチャロールにより、Amazon ECS はタスクの Amazon EBS ボリュームを管理できます。

  • Amazon ECS Service Connect サービス間のトラフィックを暗号化するには、Transport Layer Security (TLS) を使用します。

Amazon ECS がこの役割を引き受け、ユーザーに代わってアクションを実行すると、イベントが AWS CloudTrail に表示されます。Amazon ECS がそのロールを使用してタスクにアタッチされた Amazon EBS ボリュームを管理する場合、CloudTrail ログ roleSessionNameECSTaskVolumesForEBS となります。ロールを使用して Amazon ECS Service Connect サービス間のトラフィックを暗号化する場合、CloudTrail ログ roleSessionNameECSServiceConnectForTLS となります。この名前を使用して、[ユーザー名]でフィルタリングすることで CloudTrail コンソールでイベントを検索できます。

Amazon ECS には、マネージドポリシー AmazonECSInfrastructureRolePolicyForVolumesAmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity が用意されており、それぞれには、ボリュームのアタッチ、TLS に必要なアクセス許可が含まれています。詳細については、「Amazon Elastic Container Service に関する AWS 管理ポリシー」を参照してください。

AmazonECSInfrastructureRolePolicyForVolumes
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateEBSManagedVolume", "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "arn:aws:ec2:*:*:volume/*", "Condition": { "ArnLike": { "aws:RequestTag/AmazonECSCreated": "arn:aws:ecs:*:*:task/*" }, "StringEquals": { "aws:RequestTag/AmazonECSManaged": "true" } } }, { "Sid": "TagOnCreateVolume", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:volume/*", "Condition": { "ArnLike": { "aws:RequestTag/AmazonECSCreated": "arn:aws:ecs:*:*:task/*" }, "StringEquals": { "ec2:CreateAction": "CreateVolume", "aws:RequestTag/AmazonECSManaged": "true" } } }, { "Sid": "DescribeVolumesForLifecycle", "Effect": "Allow", "Action": [ "ec2:DescribeVolumes", "ec2:DescribeAvailabilityZones" ], "Resource": "*" }, { "Sid": "ManageEBSVolumeLifecycle", "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:*:*:volume/*", "Condition": { "StringEquals": { "aws:ResourceTag/AmazonECSManaged": "true" } } }, { "Sid": "ManageVolumeAttachmentsForEC2", "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:*:*:instance/*" }, { "Sid": "DeleteEBSManagedVolume", "Effect": "Allow", "Action": "ec2:DeleteVolume", "Resource": "arn:aws:ec2:*:*:volume/*", "Condition": { "ArnLike": { "aws:ResourceTag/AmazonECSCreated": "arn:aws:ecs:*:*:task/*" }, "StringEquals": { "aws:ResourceTag/AmazonECSManaged": "true" } } } ] }
AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateSecret", "Effect": "Allow", "Action": "secretsmanager:CreateSecret", "Resource": "arn:aws:secretsmanager:*:*:secret:ecs-sc!*", "Condition": { "ArnLike": { "aws:RequestTag/AmazonECSCreated": [ "arn:aws:ecs:*:*:service/*/*", "arn:aws:ecs:*:*:task-set/*/*" ] }, "StringEquals": { "aws:RequestTag/AmazonECSManaged": "true", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "TagOnCreateSecret", "Effect": "Allow", "Action": "secretsmanager:TagResource", "Resource": "arn:aws:secretsmanager:*:*:secret:ecs-sc!*", "Condition": { "ArnLike": { "aws:RequestTag/AmazonECSCreated": [ "arn:aws:ecs:*:*:service/*/*", "arn:aws:ecs:*:*:task-set/*/*" ] }, "StringEquals": { "aws:RequestTag/AmazonECSManaged": "true", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "RotateTLSCertificateSecret", "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:UpdateSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:DeleteSecret", "secretsmanager:RotateSecret", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "arn:aws:secretsmanager:*:*:secret:ecs-sc!*", "Condition": { "StringEquals": { "secretsmanager:ResourceTag/aws:secretsmanager:owningService": "ecs-sc", "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }, { "Sid": "ManagePrivateCertificateAuthority", "Effect": "Allow", "Action": [ "acm-pca:GetCertificate", "acm-pca:GetCertificateAuthorityCertificate", "acm-pca:DescribeCertificateAuthority" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/AmazonECSManaged": "true" } } }, { "Sid": "ManagePrivateCertificateAuthorityForIssuingEndEntityCertificate", "Effect": "Allow", "Action": [ "acm-pca:IssueCertificate" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/AmazonECSManaged": "true", "acm-pca:TemplateArn":"arn:aws:acm-pca:::template/EndEntityCertificate/V1" } } } ] }

ECS インフラストラクチャロールの作成 (ecsInfrastructureRole)

すべての [ユーザー入力] は、お客様の情報で置き換えてください。

  1. IAM ロールに使用する信頼ポリシーが含まれている ecs-infrastructure-trust-policy.json という名前のファイルを作成します。ファイルには次の内容が含まれます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToECSForInfrastructureManagement", "Effect": "Allow", "Principal": { "Service": "ecs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 前のステップで作成した信頼ポリシーを使用して、ecsInfrastructureRole という名前の IAM ロールを作成するには、次の AWS CLI コマンドを使用します。

    aws iam create-role \ --role-name ecsInfrastructureRole \ --assume-role-policy-document file://ecs-infrastructure-trust-policy.json
  3. ユースケースに応じて、AWS マネージド AmazonECSInfrastructureRolePolicyForVolumes ポリシーまたは AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity ポリシーを ecsInfrastructureRole ロールにアタッチします。

    aws iam attach-role-policy \ --role-name ecsInfrastructureRole \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSInfrastructureRolePolicyForVolumes
    aws iam attach-role-policy \ --role-name ecsInfrastructureRole \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity

IAM コンソールの[カスタム信頼ポリシー]ワークフローを使用してロールを作成することもできます。詳細については、IAM ユーザーガイドの「カスタム信頼ポリシーを使用してロールを作成する (コンソール)」を参照してください。

重要

Amazon ECS がタスクにアタッチされた Amazon EBS ボリュームを管理するために ECS インフラストラクチャロールを使用している場合は、Amazon EBS ボリュームを使用するタスクを停止する前に、次の点を確認してください。

  • ロールが削除されていません。

  • ロールの信頼ポリシーは、Amazon ECS アクセス (ecs.amazonaws.com) を削除するように変更されていません。

  • マネージドポリシー AmazonECSInfrastructureRolePolicyForVolumes は削除されていません。ロールのアクセス許可を変更する必要がある場合は、ボリュームを削除するために、少なくとも ec2:DetachVolumeec2:DeleteVolumeec2:DescribeVolumes を残してください。

Amazon EBS ボリュームがアタッチされたタスクを停止する前にロールを削除または変更すると、タスクが DEPROVISIONING で停止し、関連する Amazon EBS ボリュームは削除されません。Amazon ECS は、必要なアクセス許可が回復するまで、定期的に自動的に再試行してタスクを停止し、ボリュームを削除します。DescribeTasks API を使用して、タスクのボリュームアタッチ状態と関連するステータス理由を表示できます。

ECS インフラストラクチャロールを Amazon ECS に渡すためのユーザー権限を付与する

ECS インフラストラクチャの IAM ロールを使用するには、そのロールを Amazon ECS に渡すためのユーザー権限を付与する必要があります。ユーザーに、次の iam:PassRole 権限をアタッチします。前に作成したインフラストラクチャロールの名前で ecsInfrastructureRole を置き換えます。

{ "Version": "2012-10-17", "Statement": [ { "Action": "iam:PassRole", "Effect": "Allow", "Resource": ["arn:aws:iam::*:role/ecsInfrastructureRole"], "Condition": { "StringEquals": {"iam:PassedToService": "ecs.amazonaws.com"} } } ] }

iam:Passrole およびユーザーの権限の更新について詳しくは、AWS Identity and Access Management ユーザーガイドの「AWS サービスにロールを渡すためのアクセス許可の付与」と「IAM ユーザーの権限の変更」を参照してください。