説明
セキュリティグループで 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 に縮小します。広いプライベート範囲全体を信頼せず、実際のクライアントアドレスに絞ってください。通信の保護は別途構成する必要があります。