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