설명
Classic ELB가 HTTP로 통신하면 해당 구간의 인증 정보나 민감한 요청 데이터가 평문으로 노출될 수 있습니다. 클라이언트와 ELB 사이, ELB와 백엔드 사이의 전송 보호는 각각 확인해야 합니다.
포트 443만으로 암호화가 적용되지는 않습니다. 반대로 TCP 리스너를 통해 TLS를 그대로 전달하는 구성도 있으므로 실제 연결의 암호화 종료 지점을 확인하세요.
잠재적 영향
- 평문 구간을 관찰하거나 변조할 수 있는 공격자에게 데이터나 세션 정보가 노출될 수 있습니다.
- 인증서나 백엔드 프로토콜을 잘못 변경하면 연결 장애가 발생할 수 있습니다.
해결 방법
ELB에서 TLS를 종료한다면 Protocol에 HTTPS 또는 SSL을 지정하고 유효한 서버 인증서와 적절한 TLS 정책을 연결하세요. 백엔드도 암호화해야 하면 서버가 지원하는 InstanceProtocol과 포트를 구성하세요. 백엔드 인증서 검증이 필요하면 별도의 백엔드 인증 정책도 구성하고 양쪽 연결을 시험하세요.
예시
리스너 설정 발췌이며 네트워크와 TLS 정책은 생략했습니다. 인증서 ARN은 실제 인증서로 바꾸세요. 변경 후 예시는 백엔드가 포트 80에서 HTTPS를 제공해야 합니다.
변경 전
yaml
Resources:
MyLoadBalancer:
Type: AWS::ElasticLoadBalancing::LoadBalancer
Properties:
Listeners:
- InstancePort: "80"
InstanceProtocol: HTTP
LoadBalancerPort: "443"
Protocol: HTTP
클라이언트 포트가 443이어도 Protocol과 InstanceProtocol이 HTTP이므로 두 구간은 HTTP 평문 통신입니다.
변경 후
yaml
Resources:
MyLoadBalancer:
Type: AWS::ElasticLoadBalancing::LoadBalancer
Properties:
Listeners:
- InstancePort: "80"
InstanceProtocol: HTTPS
LoadBalancerPort: "443"
Protocol: HTTPS
SSLCertificateId: arn:aws:iam::123456789012:server-certificate/my-server-certificate
양쪽 연결에 HTTPS를 지정합니다. 이 설정만으로 백엔드 인증서 검증 정책이 추가되지는 않으므로 필요한 서버 인증도 별도로 확인하세요.