HTTP ポートが全アドレスに公開

インターネット全体からの TCP 80 の接続許可が必要か確認し、HTTP の転送データを保護して、内部サービスへのアクセス範囲を制限してください。

説明

セキュリティグループで 0.0.0.0/0 または ::/0 からの TCP 80 を許可すると、そのアドレス範囲全体が接続の許可対象になります。実際の到達性には公開アドレスや経路、待ち受けサービスも必要であり、ポート番号だけでアプリケーションのプロトコルが決まるわけではありません。

通常の HTTP は通信を暗号化しません。公開サイトや HTTPS へのリダイレクトにポート 80 が必要な場合もありますが、最初の HTTP 要求はリダイレクト前に平文で送信されます。内部サービスに不要な公開許可は削除してください。

想定される影響

  • 到達可能なサービスが外部スキャン、脆弱性を狙う攻撃、要求の悪用の対象になるおそれがあります。
  • HTTP のデータが経路上で漏えいしたり改ざんされたりする可能性があります。プライベートアドレスだけに制限しても暗号化はされません。

対処方法

  • 内部サービスには必要なクライアント CIDR や適切なセキュリティグループだけを許可し、他の関連グループの許可も確認してください。
  • 機密性の高い要求は最初から HTTPS で送信し、証明書を検証してください。公開サービスでは HTTP リダイレクト、HSTS、セキュア Cookie の方針も確認してください。
  • 不要な TCP 80 のルールを削除し、サービスの認証・権限と正常な接続を確認してください。

例

myVPC は実際の VPC を参照する必要があります。サービスとルーティングの設定は省略しています。

変更前

yaml
Resources:
  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow http to client host
      VpcId:
        Ref: myVPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0

この受信ルールは、すべての IPv4 アドレスから TCP 80 を許可します。

変更後

yaml
Resources:
  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow http to client host
      VpcId:
        Ref: myVPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 192.168.0.0/16

このルールの許可範囲を 192.168.0.0/16 に縮小します。広いプライベート範囲全体を信頼せず、実際のクライアントアドレスに絞ってください。通信の保護は別途構成する必要があります。

参考資料