VPC와 NACL은 VPC 내부에서 적용할 수 있는 방화벽이다. 이 두 가지 방화벽에 대해서 알아보고 어떤 차이점이 있는지 비교해 보자.
보안 그룹은 AWS 리소스 (EC2 인스턴스) 단위로 적용할 수 있는 방화벽이다. 인바운드/아웃바운드로 구분하여 방화벽 규칙을 지정할 수 있다. 보안 그룹에는 허용(Allow) 규칙만 존재한다. 기본적으로 모든 트래픽을 차단하고 있고, 허용된 트래픽만 이동할 수 있다.
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/security-groups.html
인바운드 규칙은 기본적으로 아무것도 등록되어 있지 않다. 따라서 EC2 인스턴스에 SSH로 접속하려면 TCP 22번 포트를 열어 줘야 한다. 소스는 0.0.0.0/0과 같이 모든 주소 (또는 특정 CIDR IP 범위)로 허용할 수도 있고 다른 보안 그룹을 지정할 수도 있다.
아웃바운드 규칙 역시 같은 방식으로 규칙을 추가하여 나가는 트래픽을 허용할 수 있다. 아웃바운드 규칙에는 기본적으로 모든 트래픽을 모든 대상으로 허용하는 규칙이 추가되어 있다.
보안 그룹은 Stateful이라는 특성을 가진다. 트래픽이 오고 가는 상태를 기억하고 처리해 준다는 것이다.
예를 들어 인바운드 규칙으로 아무것도 등록되어 있지 않다면 어떤 트래픽도 리소스로 접근할 수 없다. 하지만 만약 아웃바운드 규칙으로 허용되어 나간 트래픽(Request)에 대한 응답(Response)은 들어올 수 있도록 허용된다.
NACL은 서브넷 단위로 적용할 수 있는 방화벽이다. NACL에는 허용 규칙과 거부 규칙이 모두 존재한다. 그리고 보안 그룹과 달리 Stateless하다. 즉 NACL 인바운드에서 허용되어 들어왔다 하더라도, 아웃바운드 규칙에서 거부되어 통신이 안될 수 있다.
*번은 마지막 규칙으로 우선순위가 가장 낮다.
일반적으로 서버의 포트는 고정되어 있지만 클라이언트는 임시 포트 범위 중에서 랜덤으로 사용한다. 따라서 Stateless한 NACL에서는 임시 포트를 신경 써서 관리해야 한다. 예를 들어 서버 서브넷에는 아웃바운드로 클라이언트의 임시 포트 범위를 열어 주어야 한다.
보안 그룹과 NACL 모두 논리적인 개념으로 하나를 가지고 여러 리소스에 연결하여 적용할 수 있다.
보안 그룹 | NACL | |
---|---|---|
범위 | 리소스 (인스턴스) | 서브넷 |
규칙 | Allow Only | Allow / Deny |
상태 저장 | Stateful | Stateless |
잘봤습니다.