全アドレスから全ポートを許可するセキュリティグループ

ECS ワークロードに関連付けるセキュリティグループは、必要な送信元とサービスポートだけを許可してください。

説明

ECS タスクやコンテナーインスタンスのセキュリティグループで、全 IPv4・IPv6 アドレスから全ポートまたは全プロトコルを許可すると、サービスに不要な接続まで許可する場合があります。実際の外部接続には、タスクのネットワークモード、アドレス、経路、サービスの待ち受け状態も関係します。

想定される影響

  • 到達可能な管理用・内部サービスが、不要な接続や脆弱性を悪用する試行にさらされる可能性があります。
  • 同じセキュリティグループを使う他のワークロードにも、過剰な許可が適用される場合があります。

対処方法

  • 実際の通信要件に合わせて送信元、プロトコル、ポートを限定してください。内部通信には、対応するセキュリティグループ参照や承認済みのプライベートアドレスを使用してください。
  • 公開リスナーとタスクの内部ポートを区別し、ロードバランサーやヘルスチェックに必要な通信だけを許可してください。IPv4 と IPv6 の両方を確認してください。
  • 関連付けられた全グループと実際のタスクネットワークを確認し、必要な通信が成功して不要な接続が拒否されることをテストしてください。

例

TCP ポート範囲の比較です。実際の VPC ID を指定してください。ECS サービスやタスクへの関連付けは含みません。TCP 80 の全アドレス許可も、意図的に公開する HTTP サービスだけに使用し、必要な TLS 保護を別途構成してください。

変更前

yaml
Parameters:
  VpcId:
    Type: AWS::EC2::VPC::Id
Resources:
  EcsSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: ECS Security Group
      VpcId: !Ref VpcId
  EcsSecurityGroupHTTPinbound:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: !Ref EcsSecurityGroup
      IpProtocol: tcp
      FromPort: 0
      ToPort: 65535
      CidrIp: 0.0.0.0/0

全 IPv4 アドレスから TCP 0~65535 を許可します。

変更後

yaml
Parameters:
  VpcId:
    Type: AWS::EC2::VPC::Id
Resources:
  EcsSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: ECS Security Group
      VpcId: !Ref VpcId
  EcsSecurityGroupHTTPinbound:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: !Ref EcsSecurityGroup
      IpProtocol: tcp
      FromPort: 80
      ToPort: 80
      CidrIp: 0.0.0.0/0

ポートを TCP 80 に限定しますが、送信元は全 IPv4 アドレスのままです。内部専用サービスなら送信元も限定してください。

参考資料