설명
보안 그룹에서 TCP 80을 0.0.0.0/0 또는 ::/0에 허용하면 모든 해당 주소 범위가 접속 허용 대상이 됩니다. 실제 접근에는 공개 주소나 경로와 수신 서비스도 필요하며, 포트 번호만으로 실제 사용 프로토콜이 정해지지는 않습니다.
일반적인 HTTP는 통신을 암호화하지 않습니다. 공개 웹 서비스나 HTTPS 리디렉션에 포트 80이 필요할 수 있지만, 리디렉션 전 첫 HTTP 요청은 이미 평문으로 전송됩니다. 내부 서비스에 불필요한 공개 허용은 제거하세요.
잠재적 영향
- 도달 가능한 서비스가 외부 스캔, 취약점 공격이나 요청 남용의 대상이 될 수 있습니다.
- HTTP로 전송한 데이터가 경로에서 노출되거나 변조될 수 있으며, 사설 주소만 허용해도 암호화가 생기지는 않습니다.
해결 방법
- 내부 서비스는 필요한 클라이언트 CIDR이나 적절한 보안 그룹만 허용하고, 연결된 다른 그룹의 허용도 검토하세요.
- 민감한 요청은 처음부터 HTTPS로 보내고 인증서를 검증하세요. 공개 서비스의 HTTP 리디렉션, HSTS와 보안 쿠키 정책도 함께 검토하세요.
- 불필요한 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으로 줄입니다. 이 넓은 사설 대역 전체를 신뢰하지 말고 실제 클라이언트 주소로 좁히세요. HTTP의 전송 보안은 별도로 구성해야 합니다.