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

ECSサービスロールの実際のポリシーを確認し、運用に必要な権限だけを付与してください。

説明

ECSサービスロールに過剰なIAM権限があると、必要なロードバランサー連携を超える操作を許可する場合があります。名前だけで管理者権限と判断せず、ポリシーと信頼関係を確認してください。このサービスロールは、コンテナーがAWS APIを呼ぶためのタスクロールや、イメージ取得などに使うタスク実行ロールとは別です。

想定される影響

  • 不要なサービス権限は、設定ミスやロールの悪用によって影響を受けるリソースを増やす可能性があります。
  • 必要な権限の削除や誤ったロールへの変更で、ターゲット登録やサービスのデプロイが失敗する場合があります。

対処方法

  • ネットワークモードとロードバランサー構成を確認してください。awsvpcのサービスではこのRoleを指定せず、ECSのサービスにリンクされたロールを使います。
  • 明示的なサービスロールが必要な構成には、必要な操作とリソースだけを許可してください。タスクロールとタスク実行ロールも別途確認してください。
  • 変更後に実際のポリシー、ターゲット登録、ヘルスチェックと必要なサービス動作を検証してください。

例

ロードバランサーを使うEC2ベースのサービスの構成案です。ターゲットグループARN、実際のロールARN、クラスターの容量とネットワークを用意してください。ポリシーは含まれないため、ロール名を変えるだけでは権限は減りません。

変更前

yaml
AWSTemplateFormatVersion: 2010-09-09
Description: Creating ECS service
Parameters:
  TargetGroupArn:
    Type: String
Resources:
  cluster:
    Type: AWS::ECS::Cluster
  taskdefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      ContainerDefinitions:
        - Name: simple-app
          Image: amazon/amazon-ecs-sample
          Memory: 128
          PortMappings:
            - ContainerPort: 80
      Volumes:
        - Host:
            SourcePath: /var/lib/docker/vfs/dir/
          Name: my-vol
  service:
    Type: AWS::ECS::Service
    Properties:
      Cluster: !Ref cluster
      Role: arn:aws:iam::123456789012:role/Admin
      TaskDefinition: !Ref taskdefinition
      LoadBalancers:
        - TargetGroupArn: !Ref TargetGroupArn
          ContainerName: simple-app
          ContainerPort: 80

Adminというロールを指定します。関連付けたポリシーに不要な管理権限がないか確認してください。

変更後

yaml
AWSTemplateFormatVersion: 2010-09-09
Description: Creating ECS service
Parameters:
  TargetGroupArn:
    Type: String
Resources:
  cluster:
    Type: AWS::ECS::Cluster
  taskdefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      ContainerDefinitions:
        - Name: simple-app
          Image: amazon/amazon-ecs-sample
          Memory: 128
          PortMappings:
            - ContainerPort: 80
      Volumes:
        - Host:
            SourcePath: /var/lib/docker/vfs/dir/
          Name: my-vol
  service:
    Type: AWS::ECS::Service
    Properties:
      Cluster: !Ref cluster
      Role: arn:aws:iam::123456789012:role/EcsServiceRole
      TaskDefinition: !Ref taskdefinition
      LoadBalancers:
        - TargetGroupArn: !Ref TargetGroupArn
          ContainerName: simple-app
          ContainerPort: 80

サービス用のロールを指定します。ロードバランサー連携に必要な権限だけにポリシーが限定されていることを確認してください。

参考資料