ECSサービスロールの権限の見直し

ECSサービスロールの実際の権限を確認し、必要なロードバランサー連携の範囲に制限してください。

説明

ECSサービスのroleは、サービスに代わってロードバランサーを呼び出すためのロールです。必要以上の権限を付与すると、ロールが悪用された場合の影響が広がります。名前だけでは管理者権限の有無は分からないため、ポリシーと信頼関係を確認する必要があります。

このロールは、コンテナーアプリケーションにAWS権限を与えるタスクロールや、イメージの取得・ログ送信に使うタスク実行ロールとは別です。サービスロールを明示できるのは、ロードバランサーを使用し、タスクのネットワークモードがawsvpcでない場合です。そのほかの構成では、適用されるサービスリンクロールの要件に従ってください。

想定される影響

  • 過剰な権限を持つサービスロールが悪用されると、必要なロードバランサー操作を超えてリソースが変更される可能性があります。実際の範囲は権限・信頼ポリシーとほかの制御によって異なります。
  • サービスロールとタスクロールを混同すると、コンテナーの権限を誤って管理したり、必要なサービス動作を妨げたりするおそれがあります。

対処方法

  1. 実際のサービスロールの管理ポリシー、インラインポリシー、信頼ポリシーを確認し、必要な操作とリソースに権限を限定してください。ネットワークとロードバランサーの構成に合うサービスリンクロールを使用してください。
  2. タスクロールとタスク実行ロールも、それぞれの用途に合わせて最小権限にしてください。名前を変えるだけでは権限は減りません。
  3. community.aws 11.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

新しいサービスでは明示的なロールの代わりに、適用されるサービスリンクロールを使用します。既存サービスでこのフィールドを削除するだけでは、ロールや権限は変更されません。

参考資料