説明
ECSサービスのroleは、サービスに代わってロードバランサーを呼び出すためのロールです。必要以上の権限を付与すると、ロールが悪用された場合の影響が広がります。名前だけでは管理者権限の有無は分からないため、ポリシーと信頼関係を確認する必要があります。
このロールは、コンテナーアプリケーションにAWS権限を与えるタスクロールや、イメージの取得・ログ送信に使うタスク実行ロールとは別です。サービスロールを明示できるのは、ロードバランサーを使用し、タスクのネットワークモードがawsvpcでない場合です。そのほかの構成では、適用されるサービスリンクロールの要件に従ってください。
想定される影響
- 過剰な権限を持つサービスロールが悪用されると、必要なロードバランサー操作を超えてリソースが変更される可能性があります。実際の範囲は権限・信頼ポリシーとほかの制御によって異なります。
- サービスロールとタスクロールを混同すると、コンテナーの権限を誤って管理したり、必要なサービス動作を妨げたりするおそれがあります。
対処方法
- 実際のサービスロールの管理ポリシー、インラインポリシー、信頼ポリシーを確認し、必要な操作とリソースに権限を限定してください。ネットワークとロードバランサーの構成に合うサービスリンクロールを使用してください。
- タスクロールとタスク実行ロールも、それぞれの用途に合わせて最小権限にしてください。名前を変えるだけでは権限は減りません。
community.aws11.1.0のecs_serviceの更新処理はroleを変更しません。既存サービスではポリシーの修正や対応する移行手順を計画し、適用後の実際のロール・ポリシー、ロードバランサー登録、ヘルスチェックを確認してください。
例
クラスター、タスク定義、ターゲットグループ、ロールは別途準備してください。例はawsvpc以外のタスクにあるappコンテナーのポート8080を対象とし、target_group_arnに実際のターゲットグループARNを指定する必要があります。desired_count: 0ではタスクは実行されません。
変更前
yaml
- name: ECS Service
community.aws.ecs_service:
state: present
name: console-test-service
cluster: new_cluster
task_definition: "new_cluster-task:1"
desired_count: 0
load_balancers:
- targetGroupArn: "{{ target_group_arn }}"
containerName: app
containerPort: 8080
role: admin
adminロールを指定しています。実際の権限と、ECSがそのロールを引き受けられる信頼ポリシーを確認してください。
変更後
yaml
- name: ECS Service
community.aws.ecs_service:
state: present
name: console-test-service
cluster: new_cluster
task_definition: "new_cluster-task:1"
desired_count: 0
load_balancers:
- targetGroupArn: "{{ target_group_arn }}"
containerName: app
containerPort: 8080
新しいサービスでは明示的なロールの代わりに、適用されるサービスリンクロールを使用します。既存サービスでこのフィールドを削除するだけでは、ロールや権限は変更されません。