Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

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

Amazon Elastic Container Service では、AWS Identity and Access Management (IAM) の「サービスにリンクされたロール」を使用します。サービスにリンクされたロールは、Amazon ECS に直接リンクされた一意のタイプの IAM ロールです。サービスにリンクされたロールは、Amazon ECS によって事前定義されており、お客様の代わりにサービスから他の AWS サービスを呼び出す必要のあるアクセス権限がすべて含まれています。

サービスにリンクされたロールを使用すると、必要なアクセス権限を手動で追加する必要がなくなるため、Amazon ECS の設定が簡単になります。Amazon ECS は、サービスにリンクされたロールのアクセス権限を定義します。特に定義されている場合を除き、Amazon ECS のみがそのロールを引き受けることができます。定義されるアクセス権限には、信頼ポリシーやアクセス権限ポリシーなどがあり、そのアクセス権限ポリシーをその他の IAM エンティティにアタッチすることはできません。

ロールを削除するには、まず関連リソースを削除します。これにより、不注意でリソースにアクセスするアクセス許可の削除が防止され、Amazon ECS リソースは保護されます。

サービスにリンクされたロールをサポートする他のサービスについては、「IAM と連携する AWS サービス」を参照の上、「サービスにリンクされたロール」列が「はい」になっているサービスを検索してください。サービスにリンクされたロールに関するドキュメントをサービスで表示するには、[はい] リンクを選択します。

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

Amazon ECS では、サービスにリンクされたロール (AWSServiceRoleForECS) – Role to enable Amazon ECS to manage your cluster. を使用します。

AWSServiceRoleForECS サービスにリンクされたロールは、ロールを引き受ける上で次のサービスを信頼します。

  • ecs.amazonaws.com

ロールのアクセス許可ポリシーは、Amazon ECS が次のアクションを指定されたリソースで完了することを許可します。

{ "Version": "2012-10-17", "Statement": [ { "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" ], "Resource": "*" } ] }

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

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

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

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

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

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

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

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

重要

クラスターを作成する IAM エンティティには、サービスにリンクされたロールを作成し、それにポリシーを適用するための適切な IAM アクセス権限が必要です。それ以外の場合、自動作成は失敗します。

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

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

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

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

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

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

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

  2. ナビゲーションペインで、[Roles] を選択し、(チェックボックスではなく) AWSServiceRoleForECS の名前を選択します。

  3. [Summary] ページで [Access Advisor] を選択し、サービスにリンクされたロールの最新のアクティビティを確認します。

    注記

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

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

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

  1. すべての Amazon ECS サービスをすべてのリージョンで必要数 0 に縮小してから、サービスを削除します。詳細については、「サービスの更新」および「」を参照してください。

  2. すべてのリージョンですべてのクラスターからすべてのコンテナインスタンスを登録解除します。詳細については、「コンテナインスタンスの登録解除」を参照してください。

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

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

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

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

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

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

  3. ページ上部の [Role actions] で、[Delete role] を選択します。

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

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

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

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

      注記

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

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

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 つのリソースが報告されます。サービスはすべてのリソースを返しますが、そのうちいくつかはリソースを報告しない場合もあります。リソースを報告しないサービスのリソースをクリーンアップする方法の詳細については、「IAM と連携する AWS サービス」を参照してください。テーブルでサービスを検索し、Yes リンクを選択すると、そのサービスにリンクされたロールのドキュメントが表示されます。

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

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

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

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

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

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

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

    注記

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