Amazon ECS のサービスにリンクされたロール - Amazon ECS

Amazon ECS のサービスにリンクされたロール

Amazon ECS は、サービスがお客様に代わって その他のAWS サービスを呼び出すために必要な権限に、サービスにリンクされたロールを使用します。詳細については、IAM ユーザーガイドの「サービスにリンクされたロールの使用」を参照してください。

サービスにリンクされたロールによって付与されるアクセス許可

Amazon ECS は、と呼ばれるサービスにリンクされたロールを使用します。AWSServiceRoleForECSを呼び出して、Amazon ECS がAWSユーザーに代わって API を実行します。

AWSServiceRoleForECS サービスにリンクされたロールは、ecs.amazonaws.com サービスプリンシパルを信頼してロールを引き受けます。

ロールのアクセス許可ポリシーは、リソースに対して以下のアクションを実行することを Amazon ECSに許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECSTaskManagement", "Effect": "Allow", "Action": [ "ec2:AttachNetworkInterface", "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:Describe*", "ec2:DetachNetworkInterface", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", "elasticloadbalancing:DeregisterTargets", "elasticloadbalancing:Describe*", "elasticloadbalancing:RegisterInstancesWithLoadBalancer", "elasticloadbalancing:RegisterTargets", "route53:ChangeResourceRecordSets", "route53:CreateHealthCheck", "route53:DeleteHealthCheck", "route53:Get*", "route53:List*", "route53:UpdateHealthCheck", "servicediscovery:DeregisterInstance", "servicediscovery:Get*", "servicediscovery:List*", "servicediscovery:RegisterInstance", "servicediscovery:UpdateInstanceCustomHealthStatus" ], "Resource": "*" }, { "Sid": "AutoScaling", "Effect": "Allow", "Action": [ "autoscaling:Describe*" ], "Resource": "*" }, { "Sid": "AutoScalingManagement", "Effect": "Allow", "Action": [ "autoscaling:DeletePolicy", "autoscaling:PutScalingPolicy", "autoscaling:SetInstanceProtection", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "Null": { "autoscaling:ResourceTag/AmazonECSManaged": "false" } } }, { "Sid": "AutoScalingPlanManagement", "Effect": "Allow", "Action": [ "autoscaling-plans:CreateScalingPlan", "autoscaling-plans:DeleteScalingPlan", "autoscaling-plans:DescribeScalingPlans" ], "Resource": "*" }, { "Sid": "CWAlarmManagement", "Effect": "Allow", "Action": [ "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm" ], "Resource": "arn:aws:cloudwatch:*:*:alarm:*" }, { "Sid": "ECSTagging", "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:*:*:network-interface/*" }, { "Sid": "CWLogGroupManagement", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:DescribeLogGroups", "logs:PutRetentionPolicy" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/ecs/*" }, { "Sid": "CWLogStreamManagement", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/ecs/*:log-stream:*" }, { "Sid": "ExecuteCommandSessionManagement", "Effect": "Allow", "Action": [ "ssm:DescribeSessions" ], "Resource": "*" }, { "Sid": "ExecuteCommand", "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ecs:*:*:task/*", "arn:aws:ssm:*:*:document/AmazonECS-ExecuteInteractiveCommand" ] } ] }

サービスにリンクされたロールの作成

ほとんどの状況では、サービスにリンクされたロールを手動で作成する必要はありません。たとえば、新しいクラスターを作成する場合、(例として、Amazon ECSの初回実行のエクスペリエンス、クラスター作成ウィザード、もしくはAWS CLI もしくは SDKを使用する)、またはAWS Management Consoleでのサービスを作成もしくは更新するとき、サービスにリンクしたロールが存在しない場合は Amazon ECSによってそれらのロールが作成されます。

サービスにリンクされたロールの作成、編集、削除を IAM エンティティ (ユーザー、グループ、ロールなど) に許可するには、アクセス許可を設定する必要があります。

IAM エンティティで AWSサービスロールFor ECS のサービスにリンクされたロールを作成するには

サービスにリンクされたロールを作成する必要のある &IAM; エンティティのアクセス権限ポリシーに、次のステートメントを追加します。

{ "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole" ], "Resource": "arn:aws:iam::*:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS*", "Condition": {"StringLike": {"iam:AWSServiceName": "ecs.amazonaws.com"}} }

IAM (AWS CLI)でのサービスにリンクされたロールの作成

AWS Command Line InterfaceのIAMコマンドを使用して、サービスがロールを引き受けるために必要な信頼ポリシーとインラインポリシーを使用して、サービスにリンクされたロールを作成できます。

サービスにリンクされたロールを作成するには (CLI)

以下のコマンドを使用します。

$ aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

サービスにリンクされたロールを編集する

サービスにリンクされたロールを作成すると、多くのエンティティによってロールが参照される可能性があるため、ロール名を変更することはできません。Amazon ECSが必要とするすべてのアクセス許可が含まれているため、Amazon ECS のサービスにリンクされたロールが使用する AWS 所有の IAM ポリシーでは、編集できません。ただし、ロールの説明は編集できます。

IAM エンティティが AWSサービスロールForECS のサービスにリンクされたロールの説明を編集できるようにするには

サービスにリンクされたロールの説明を編集する必要のある &IAM; エンティティのアクセス許可ポリシーに次のステートメントを追加します。

{ "Effect": "Allow", "Action": [ "iam:UpdateRoleDescription" ], "Resource": "arn:aws:iam::*:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS*", "Condition": {"StringLike": {"iam:AWSServiceName": "ecs.amazonaws.com"}} }

サービスにリンクされたロールを削除する

Amazon ECS が不要になった場合は、サービスにリンクされたロールを削除することをお勧めします。そうすることで、積極的にモニタリングまたは保守されていない未使用のエンティティを排除できます。ただし、サービスにリンクされたロールを削除する前に、すべてのリージョンのすべての Amazon ECS クラスターを削除する必要があります。

IAM エンティティが AWSサービスロールForECSの サービスにリンクされたロールを作成するには

サービスにリンクされたロールを削除する必要のある &IAM; エンティティのアクセス権限ポリシーに、次のステートメントを追加します。

{ "Effect": "Allow", "Action": [ "iam:DeleteServiceLinkedRole", "iam:GetServiceLinkedRoleDeletionStatus" ], "Resource": "arn:aws:iam::*:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS*", "Condition": {"StringLike": {"iam:AWSServiceName": "ecs.amazonaws.com"}} }

サービスにリンクされたロールのクリーンアップ

IAMを使用してサービスにリンクされたロールを削除する前に、まずそのロールにアクティブなセッションがないことを確認し、すべての AWS リージョンのすべての Amazon ECSクラスターを削除する必要があります。

サービスにリンクされたロールがアクティブなセッションを持っているかどうかを確認するには

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

  2. ナビゲーションペインで、ロール を選択し、(チェックボックスではなく) AWSサービスロールForECS の名前を選択します。

  3. [概要] ページで [アクセスアドバイザー] を選択し、サービスにリンクされたロールの最新のアクティビティを確認します。

    注記

    Amazon ECS が AWSServiceRoleForECS ロールを使用しているかどうか不明な場合は、ロールを削除してみてください。サービスがロールを使用している場合、削除は失敗し、ロールが使用されているリージョンを表示できます。ロールが使用されている場合は、ロールを削除する前にセッションが終了するのを待つ必要があります。サービスにリンクされたロールのセッションを取り消すことはできません。

AWSServiceRoleForLogDelivery サービスリンクロールが使用している Amazon ECS リソースを削除するには

AWSサービスロールForECS のロールを削除する前に、すべてのAWS リージョンのすべてのAmazon ECS クラスターを削除する必要があります。

  • すべてのリージョンですべての Amazon ECS クラスターを削除します。詳細については、「クラスターの削除」を参照してください。

&IAM; でのサービスにリンクされたロールの削除 (コンソール)

IAM コンソールを使用して、サービスにリンクされたロールを削除できます。

サービスにリンクされたロールを削除するには (コンソール)

  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. IAM コンソールのナビゲーションペインで [ロール] を選択します。の横のチェックボックス (名前または行自体ではなく) を選択します。

  3. [ロールの削除] を選択します。

  4. 確認ダイアログボックスで、サービスの最終アクセス時間データを確認します。これは、選択したそれぞれのロールの AWS サービスへの最終アクセス時間を示します。これは、そのロールが現在アクティブであるかどうかを確認するのに役立ちます。先に進む場合は、[Yes, Delete] を選択し、削除するサービスにリンクされたロールを送信します。

  5. IAM コンソール通知を見て、サービスにリンクされたロールの削除の進行状況を監視します。IAM サービスにリンクされたロールの削除は非同期であるため、削除するロールを送信すると、削除タスクは成功または失敗する可能性があります。

    • タスクが成功した場合は、ロールがリストから削除され、成功の通知がページの上部に表示されます。

    • タスクが失敗した場合は、通知から [詳細を表示] または [リソースを表示] を選択して、削除が失敗した理由を知ることができます。ロールがサービスのリソースを使用しているために削除が失敗したとき、サービスがその情報を返す場合は、通知にはリソースのリストが含まれます。次にリソースをクリーンアップしてから、削除リクエストをもう一度送信できます。

      注記

      サービスが返す情報に応じて、このプロセスを何度も繰り返す必要があります。たとえば、サービスにリンクされたロールが 6 つのリソースを使用しており、サービスはそのうち 5 つのリソースに関する情報を返すことがあります。5 つのリソースをクリーンアップして削除するロールを再度送信すると、削除は失敗し、残りの 1 つのリソースが報告されます。サービスはすべてのリソースを返しますが、そのうちいくつかはリソースを報告しない場合もあります。

    • タスクが失敗し、通知にリソースのリストが含まれていない場合、サービスはその情報を返さない可能性があります。サービスのリソースをクリーンアップする方法の詳細については、「AWSIAM と連携するサービス」を参照してください。使用しているサービスをテーブルで見つけ、「はい」リンクを選択すると、そのサービスのサービスにリンクされたロールに関するドキュメントが表示されます。

IAM でのサービスにリンクされたロールの削除AWS CLI)

AWS Command Line Interface から IAM コマンドを使用して、サービスにリンクされたロールを削除できます。

サービスにリンクされたロールを削除するには (CLI)

  1. サービスにリンクされているロールは、使用されている、または関連するリソースがある場合は削除できないため、削除リクエストを送信する必要があります。これらの条件が満たされない場合、そのリクエストは拒否される可能性があります。レスポンスから deletion-task-id を取得して、削除タスクのステータスを確認する必要があります。サービスにリンクされたロールの削除リクエストを送信するには、次のコマンドを入力します。

    $ aws iam delete-service-linked-role --role-name AWSServiceRoleForECS+OPTIONAL-SUFFIX
  2. 削除タスクのステータスを確認するには、次のコマンドを入力します。

    $ aws iam get-service-linked-role-deletion-status --deletion-task-id deletion-task-id

    削除タスクのステータスは、 NOT_STARTEDIN_PROGRESS, SUCCEEDED、または FAILED となります。 削除が失敗した場合は、失敗した理由がコールによって返され、トラブルシューティングが可能になります。ロールがサービスのリソースを使用しているために削除が失敗したとき、サービスがその情報を返す場合は、通知にはリソースのリストが含まれます。次にリソースをクリーンアップしてから、削除リクエストをもう一度送信できます。

    注記

    サービスが返す情報に応じて、このプロセスを何度も繰り返す必要があります。たとえば、サービスにリンクされたロールが 6 つのリソースを使用しており、サービスはそのうち 5 つのリソースに関する情報を返すことがあります。5 つのリソースをクリーンアップして削除するロールを再度送信すると、削除は失敗し、残りの 1 つのリソースが報告されます。サービスはすべてのリソースを返しますが、そのうちいくつかはリソースを報告しない場合もあります。リソースを報告しないサービスのリソースをクリーンアップする方法については、「AWSIAM と連携するサービス」を参照してください。使用しているサービスをテーブルで見つけ、「はい」リンクを選択すると、そのサービスのサービスにリンクされたロールに関するドキュメントが表示されます。

サービスにリンクされた IAM(AWS API)でのロールの削除

IAM API を使用して、サービスにリンクされたロールを削除できます。

サービスにリンクされたロールを削除するには (API)

  1. サービスにリンクされたロールの削除リクエストを送信するには、DeleteServiceLinkedRole を呼び出します。リクエストで、AWSサービスロールForECS のロール名を指定します。

    サービスにリンクされているロールは、使用されている、または関連するリソースがある場合は削除できないため、削除リクエストを送信する必要があります。これらの条件が満たされない場合、そのリクエストは拒否される可能性があります。レスポンスから DeletionTaskId を取得して、削除タスクのステータスを確認する必要があります。

  2. 削除タスクのステータスを確認するには、GetServiceLinkedRoleDeletionStatus を呼び出します。リクエストで DeletionTaskId を指定します。

    削除タスクのステータスは、 NOT_STARTEDIN_PROGRESS, SUCCEEDED、または FAILED となります。 削除が失敗した場合は、失敗した理由がコールによって返され、トラブルシューティングが可能になります。ロールがサービスのリソースを使用しているために削除が失敗したとき、サービスがその情報を返す場合は、通知にはリソースのリストが含まれます。次にリソースをクリーンアップしてから、削除リクエストをもう一度送信できます。

    注記

    サービスが返す情報に応じて、このプロセスを何度も繰り返す必要があります。たとえば、サービスにリンクされたロールが 6 つのリソースを使用しており、サービスはそのうち 5 つのリソースに関する情報を返すことがあります。5 つのリソースをクリーンアップして削除するロールを再度送信すると、削除は失敗し、残りの 1 つのリソースが報告されます。サービスはすべてのリソースを返しますが、そのうちいくつかはリソースを報告しない場合もあります。リソースを報告しないサービスのリソースをクリーンアップする方法については、「AWSIAM と連携するサービス」を参照してください。使用しているサービスをテーブルで見つけ、「はい」リンクを選択すると、そのサービスのサービスにリンクされたロールに関するドキュメントが表示されます。