AWS/AWS 알아두면 좋은 지식

[EC2] 보안그룹에 대한 고찰 (ALB 통신 구조 이해)

[앙금빵] 2025. 4. 13.

개요

운영 중인 ALB(Application Load Balancer)에서 비정상적으로 많은 404 에러가 발생하고 있음을 발견하였다. 이에 ELB 로그를 분석해 본 결과, 의미 없는 Request URL로 인한 비정상적인 호출이 지속적으로 이루어지고 있음을 확인되어졌다.

 

이러한 불필요한 알람이 빈번히 발생하면 정작 중요한 실제 이슈가 발생했을 때 신속한 대응을 어렵게 만들 수 있으므로, 의미 없는 알람은 미리 차단할 필요가 있었다. 이를 위해 선택한 방법이 바로 보안그룹(Security Group)을 활용하여 불필요한 요청 자체를 사전에 차단하는 것이었다.

 

처음에는 ELB 주소를 통해 요청이 직접적으로 들어오는 이상, 보안그룹에 의해 요청이 차단되면 Connection timeout과 같은 다른 에러 코드로 기록될 것이라 예상했으나 이는 잘못된 생각이었다.

 

이러한 상황을 정확하게 이해하기 위해서는 클라이언트에서부터 AWS 인프라까지의 통신 과정이 어떻게 이루어지는지 근본적으로 이해할 필요가 있기에 작성한 내용이다.

 

본문

(1) 사용자가 요청을 날리면 해당 도메인이 어느 서버(혹은 로드 밸런서)에 연결되어 있는지 알아내기 위해 DNS 질의가 일어나게 된다. DNS 서버는 도메인 이름에 대응하는 IP 주소를 반환한하게 되며 이 IP 주소는 이후 통신의 목적지로 사용된다.

 

(2) 얻은 IP 주소를 대상으로 TCP 3-way 핸드셰이크를 시작하여 연결을 수립한다. HTTP라면 기본 포트 80, HTTPS라면 포트 443으로 TCP SYN 패킷을 보내게 되어지는데, 서버 측(여기서는 AWS의 로드 밸런서)이 해당 포트에서 연결을 허용하면, SYN 패킷에 대한 응답(SYN-ACK)을 보내고, 다시 클라이언트가 ACK을 보내 3방향 핸드셰이크를 완료한다.

 

(3) 클라이언트에서 보낸 패킷들은 사용자의 ISP망과 인터넷 백본을 거쳐 AWS 네트워크를 향해 전달되어지게 된다. 최종적으로 AWS 리전의 인터넷 게이트웨이에 도달되어지게 되어지는데, 인터넷 게이트웨이는 AWS VPC로 들어오는 외부 트래픽의 관문 역할을 하며, 퍼블릭 서브넷에 대한 경로를 제공한다.

- 물리 계층(L1)에서는 AWS 데이터센터의 케이블, 스위치, 라우터 등의 물리 장비를 통해 신호가 전달된다.
- 데이터 링크 계층(L2)에서는 VPC 내부의 이더넷 프레임 수준으로 스위칭이 이루어진다.
- 이러한 과정을 통해 클라이언트의 패킷은 올바른 서브넷과 리소스의 네트워크 인터페이스(ENI)까지 도달한다.

 

(4) 인터넷 게이트웨이를 통해 AWS VPC 내부로 들어온 패킷은 해당 퍼블릭 서브넷으로 라우팅되고, 그 서브넷 안에 있는 ALB의 네트워크 인터페이스로 도착하게 되어진다. 일반적으로 ALB는 고가용성으로 구성되어지게 되는데, DNS 해석 결과로 얻은 IP를 바탕으로 특정 AZ의 로드밸런서 노드로 향하게 된다. 로드밸런서에 연결된 보안그룹 규칙이 패킷의 수락여부를 검사한다.  

- 네트워크 계층(L3)에서, 패킷의 목적지 IP는 ALB에 할당된 주소이므로 VPC 라우팅에 따라 해당 로드 밸런서 노드로 패킷이 전달되어진다.
- 이때 로드 밸런서에 연결된 보안 그룹은 네트워크/전송 계층 수준에서 트래픽을 검사한다.

 

(5) 보안 그룹 규칙에 클라이언트의 IP, 포트(예: TCP 80/443) 등이 허용되어 있지 않은 경우, 해당 패킷은 로드 밸런서의 리스너까지 도달하기 전에 drop된다. 다시말해 보안 그룹에서 허용한 트래픽만 리소스(EC2 인스턴스나 ALB 등)에 도달할 수 있고, 규칙에 없는 트래픽은 리소스 수준에서 아예 받아들이지 않는다.

따라서 보안그룹에 차단된 패킷은 OSI L4 이하 단계에서 걸러지게 되며, 상위 계층으로 전달되지 않는다.

 

(6) ALB의 Cloudwatch Metric은 로드 밸런서가 처리한 트래픽을 기반으로 수집되어진다. 보안 그룹에서 차단된 패킷은 로드 밸런서가 실제로 수신/처리하지 않았기 때문에, 해당 요청에 대해서는 로드 밸런서 측에서 인지하거나 기록할 내용이 없게 된다.

다시말해, ALB의 보안 그룹이 미리 트래픽을 걸러버리기 때문에 로드 밸런서가 처리한 요청으로 집계되지 않으며 해당 요청은 ELB의 통계에 반영되지 않는다.

 

 

 

댓글