Network Firewall을 통한 아키텍쳐 설계 - 서브넷 연결과 트래픽 허용/차단
바로 앞 글에서 Network Firewall의 개념을 알아보고 간단한 아키텍쳐를 구성했다.
실제 방화벽이 VPC에 연결되어 트래픽 차단을 수행도록 하기 위해 VPC 네트워킹 작업이 더 필요하다.
Firewall Endpoint가 활성화된 것을 확인 후, 라우팅 테이블 설정을 진행한다.
라우팅 테이블 설정
트래픽이 정상적으로 흐를 수 있도록 각 서브넷들의 라우팅 테이블 설정을 해주어야 한다.
라우팅 테이블을 적용한 아키텍쳐의 구성은 아래와 같다.
먼저, Firewall Endpoint가 위치한 Pub-NFW-a와 Pub-NFW-c의 라우팅테이블을 작성한다.
0.0.0.0/0의 인터넷 게이트웨이로 타고 나갈 수 있도록 구성한다.
다음으로 서비스가 있는 Pub-a와 Pub-c의 라우팅테이블을 작성한다.
여기서는 각 가용영역의 0.0.0.0/0 Firewall Endpoint를 타고 나가도록 구성한다.
라우팅 대상은 Gateway Load Balancer 엔드포인트로 Firewall Endpoint의 엔드포인트 ID값으로 설정해준다.
그리고 인터넷 게이트웨이에 라우팅 테이블을 연결해주어야한다.
서비스가 있는 Pub 서브넷을 Destination으로, Target은 Firewall Endpoint를 지정해준다.
여기서 핵심은 인터넷 게이트웨이를 타고 들어오는 Inbound Traffic을 지정해주는 부분인데, 이 라우팅테이블을 서브넷 연결이 아닌 '엣지 연결'을 해주는 것이다.
이렇게 엣지 연결까지 마치면 Network Firewall 구성이 완료된다.
Network Firewall 테스트
먼저, 핑(Ping)을 통해 규칙이 적용되었는지 본다.
앞번의 설정에서 Stateless 규칙 그룹에 Inbound/Outbound 방향의 Ping을 차단하도록 작성했었다.
그 설정을 잠시 통과하도록 바꿔본다.
그리고 ALB의 DNS이름으로 Ping을 날리면 이 Stateless 규칙에 따라 통과되어 응답을 받을 수 있는 것을 볼 수 있다.
반대로 이 룰을 다시 삭제로 변경하면, Ping이 도달하지 못하는 것을 볼 수 있다.
다음으로 인터넷을 통해 ALB DNS 주소로 웹 접속하는 경우, Stateful 규칙의 룰에 의해 통과되는 것을 볼 수 있다.
그리고 이 룰을 통해서 내부의 서브넷의 리소스에서 외부 인터넷 접근도 가능하다.
(Firewall Endpoint가 NAT gateway 역할도 겸하는 것을 여기서 볼 수 있다.)
Network Firewall에서는 Stateless 규칙을 먼저 적용한 뒤, Stateful 규칙을 적용한다.
따라서 이 두 종류의 규칙 그룹을 활용하기 위해서 아래와 같은 구성이 이상적일 것으로 보인다.
- Stateless 규칙은 Drop 적용을 하는 규칙만, 기본 작업은 Stateful 규칙으로 전달
- Stateful 규칙은 Pass 적용을 하는 규칙만, 기본 작업은 Drop하도록 (삭제 설정)
이렇게 Network Firewall을 간단한 아키텍쳐에 적용하며 알아보았다.
개인적으로 설정이 좀 복잡하고 Docs도 자세하게 나와있지 않아 구성은 힘들지만, AWS 클라우드 환경에서 네트워크 보안을 챙기기에는 나쁘지 않았던 것 같았다.
다만, 가격이...