네트워크 방화벽!! .. 이다
자세히 살펴보려고 한다.

AWS Network Firewall에 대한 공식 문서(백서)는 이 페이지를 참고하자: What is Network Firewall?
기능에 대해서는 이 문서에 잘 나와있다: AWS Network Firewall 기능
AWS 네트워크 방화벽은 Amazon Virtual Private Cloud(Amazon VPC)에서 생성하는 가상 사설 클라우드(VPC)를 위한 상태별 관리형 네트워크 방화벽 및 침입 탐지 및 방지 서비스입니다.
네트워크 방화벽을 사용하면 VPC 주변에서 트래픽을 필터링할 수 있습니다. 여기에는 인터넷 게이트웨이, NAT 게이트웨이 또는 VPN 또는 Direct Connect를 통해 오가는 트래픽 필터링이 포함됩니다.
Network Firewall(앞으로는 AWS Network Firewall, ANF라고 줄여 부르겠다.)은 트래픽을 필터링하는 역할을 한다.
그럼 여기서 한 가지 의문이 든다. Shield와의 차이점은 무엇일까?
결론부터 말하자면:
요약:
| 구분 | AWS Shield | AWS Network Firewall |
|---|---|---|
| 목적 | DDoS 방어 | 네트워크 트래픽 검사 |
| 방어 계층 | L3 / L4 | L3 ~ L7 |
| 위치 | AWS Edge | VPC 내부 |
| 공격 유형 | 대량 트래픽 공격 | 악성 패킷 |
| 역할 | 트래픽 완화 | 패킷 검사 |
| 배포 위치 | 자동 | 직접 배치 |
그러니까 Shield는 3~4 계층의 트래픽을 대상으로 대규모 DDoS 공격을 AWS Edge에서 차단하는 서비스이고, ANF는 VPC 내부에서 패킷을 검사하여 악성 트래픽을 차단하는 stateful 방화벽의 역할을 한다.
WAF와도 차이점을 명확히 해두자.
| 서비스 | 막는 것 |
|---|---|
| Shield | DDoS |
| WAF | 웹 공격 (SQLi, XSS) |
| Network Firewall | 네트워크 공격 |
이렇게 비교를 하니까 서비스가 눈에 좀 더 잘 들어온다.
ANF 사용을 위해서는 ANF 엔드포인트를 설치하면 된다
ANF 엔드포인트가 적용된 서브넷을 AWS Network Firewall Subnet 혹은 firewall subnet이라고 한다.
이 서브넷은 상황에 따라 private이 될 수도, public이 될 수도 있다.
이때, ANF는 엔드포인트가 있는 서브넷 내의 리소스 또는 대상에서 오는 트래픽을 검사할 수 없다. 따라서 해당 서브넷에는 아무것도 두지 않아야 한다.

EC2 → ANF → NAT → IGW → Internet → IGW → ANF → EC2
따라서 이 경우 ANF가 src/dest ip address를 명확히 알 수 있다. 만약 NAT를 통한 이후의 트래픽을 검사하게 되었다면, public ip로 변환된 이후이므로 해당 트래픽의 src ip를 정확히 알 수 없었을 것이다. 이렇게 ANF의 위치는 클라이언트의 ip를 알 수 있는지도 중요하게 작용하는 것 같다.
이제 Network Firewall을 사용한 예시를 보려고 한다.

ANF 사용을 위해 각각의 서브넷에, az 당 하나씩 ANF endpoint를 설치해야 한다. 네트워크 방화벽 엔드포인트를 통해 들어오는 트래픽을 유도하려면 IGW에서 입력 경로를 구성해야 한다. 엔드포인트를 두는 것뿐만 아니라 라우팅을 설정해서 트래픽이 해당 엔드포인트가 있는 서브넷으로 오게끔 설정해야 하는 것이다.
오른쪽에 적힌 각각의 라우팅 테이블을 보면, IGW에서 들어오는 트래픽이 ALB로 바로 접근하지 않고, 각 az에 있는 ANF 엔드포인트로 반드시 거치도록 설계되어 있다.
그러니까 az1 쪽 ALB 서브넷(subnet 3)로 들어오려고 하는 트래픽은 Firewall Endpoint 1으로, az2 쪽 ALB 서브넷(submet 4)로 들어오려고 하는 트래픽은 firewall endpoint 2로 보내고 있다.
여기서 사용된 VPC ingress routing은 이처럼 IGW에서 들어오는 인바운드 경로를 특정 대상으로 재지정할 수 있게 해준다.
반대로 subnet 3과 4의 라우팅테이블은 밖으로 나가는 기본 경로를 방화벽을 지나게끔 하고 있다. 따라서 ingress/egress 트래픽 모두 ANF를 통하게 된다.
bump-in-the-wire: 네트워크 경로 중간에 끼워져서 지나가는 트래픽을 검사하는 장치처럼 방화벽이 동작한다는 것...
Client IP address visibility: IGW와 ELB 사이에 NF를 두면 방화벽이 실제 클라이언트의 IP를 볼 수 있다(ALB가 트래픽을 받아서 뒤쪽으로 프록시하기 전 단계이기 때문)
→ 인터넷에서 들어오는 요청을 ALB가 받기 전에 Network Firewall이 먼저 검사, 동시에 실제 클라이언트 IP 기반 정책도 가능하게 하기 위한 설계
참고: