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

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

Amazon Elastic Container Service は、ユーザーに代わって他の AWS のサービスを呼び出すために必要なアクセス許可を持つサービスにリンクされたロールを使用します。詳細については、IAM ユーザーガイド の「サービスにリンクされたロールの使用」を参照してください。

Amazon ECS のサービスにリンクされたロールが導入される前に、Amazon ECS に必要なアクセス権限を付与する Amazon ECS サービス用の IAM ロールを作成する必要があります。このロールは不要ですが、必要に応じて使用できます。詳細については、「Amazon ECS のレガシー 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:*" } ] }

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

ほとんどの状況では、サービスにリンクされたロールを手動で作成する必要はありません。たとえば、新しいクラスターを作成する (例: Amazon ECS の初回実行のエクスペリエンス、クラスターの作成ウィザード、AWS CLI または SDK) か、AWS マネジメントコンソール でサービスを作成または更新するときに、存在しない場合は Amazon ECS によりサービスにリンクされたロールが作成されます。

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

IAM エンティティが AWSServiceRoleForECS サービスにリンクされたロールを作成することを許可するには

サービスにリンクされたロールを作成する必要のある 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)

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

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

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

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

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

Amazon ECS では、AWSServiceRoleForECS サービスにリンクされたロールを編集することはできません。サービスにリンクされたロールを作成すると、多くのエンティティによってロールが参照される可能性があるため、ロール名を変更することはできません。ただし、ロールの説明の編集はできます。詳細については、IAM ユーザーガイド の「ロールの修正」を参照してください。

IAM エンティティが AWSServiceRoleForECS サービスにリンクされたロールの説明を編集することを許可するには

サービスにリンクされたロールの説明を編集する必要のある 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 エンティティが AWSServiceRoleForECS サービスにリンクされたロールを削除することを許可するには

サービスにリンクされたロールを削除する必要のある 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. ナビゲーションペインで、[ロール] を選択し、(チェックボックスではなく) AWSServiceRoleForECS の名前を選択します。

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

    注記

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

AWSServiceRoleForECS サービスにリンクされたロールによって使用されている Amazon ECS リソースを削除するには

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

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

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

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

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

  1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

  2. IAM コンソールのナビゲーションペインで [ロール] を選択します。次に、AWSServiceRoleForECS の横のチェックボックス (名前または行全体ではありません) を選択します。

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

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

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

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

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

      注記

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

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

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

    注記

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

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

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

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

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

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

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

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

    注記

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