[AWS] VPC : 보안 그룹과 NACL(Network Access Control List)

AWS의 가상 네트워크인 VPC에서 네트워크 보안을 제공하기 위한 두 가지 중요한 구성 요소로서 보안 그룹과 NACL가 있다. 이번 포스팅에서는 해당 두 종류 방식의 사용 목적과 차이점에 대해서 살펴보려고 한다.
보안 그룹 (Security Group)

보안 그룹(Security Group)은 VPC의 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 하는 서비스이다.
즉 클라우드에서 내 서버를 지켜주는 문지기 같은 존재이다. 어떤 요청을 들여보낼지, 내보낼지를 미리 정해두고 그 규칙에 맞춰 움직인다. 쉽게 말해, A번 방에 "이 친구는 들어와도 돼" 또는 "너는 못 들어와"를 결정하는 역할을 한다.
- NACL과 함께 방화벽 역할을 하는 서비스
- Port 허용 : 기본적으로 모든 포트 비활성화, 선택적으로 트래픽이 지나갈 수 있는 Port & Source 설정 가능
- Source Deny(Blacklist)는 불가능 → NACL로 가능
- ENI (인스턴스) 단위로 설정 : 하나의 인스턴스에 여러 개의 보안 그룹 설정 가능. (↔ NACL : 서브넷 단위)
- VPC 안에서 생성하고 관리. → VPC간 보안그룹 공유 기능으로 여러 VPC에서 사용 가능.
- 보안 그룹은 Stateful : Inbound 트래픽으로 들어온 Source의 트래픽의 포트를 자동으로 Outboud 트래픽으로 허용함.
- 즉 요청에 대한 응답의 경우에는 클라이언트의 포트번호를 상관하지 않고 Outbound로 허용한다는 것.
- 즉 클라이언트(Source) Port가 Epherneral(랜덤 할당된 임시 포트)여도 Outbound OK
- 반대로 Stateless한 방식은 NACL : Epherneral Range를 허용하기 위해서는 뚫어주어야 함.
Ephemeral Port : 클라이언트가 동적으로 할당받아 사용하는 임시 포트. 클라이언트가 서버와 통신할 때, 운영체제가 자동으로 포트를 할당하며, 일반적으로 일정 범위 내에서 랜덤하게 선택
트래픽의 종류
인바운드 트래픽 (Inbound Traffic) : 외부에서 내 서버로 들어오는 트래픽
- 사용자가 브라우저에서 웹사이트(example.com)에 접속 → 서버로 요청(Inbound) 전송
- API 서버가 외부 클라이언트의 요청을 받음
아웃바운드 트래픽 (Outbound Traffic) : 내 서버에서 외부로 나가는 트래픽
- 내 서버가 데이터베이스에 쿼리 요청을 보냄
- 애플리케이션 서버가 API 요청을 외부 서버로 보냄
- EC2에서 인터넷 접속하여 소프트웨어 패키지 다운로드
보안 그룹 설정

위의 그림과 같이 보안 그룹에는 Inbound 트래픽에 대한 규칙과 Outbound에 대한 규칙을 설정할 수 있다.
보안 그룹에서는 설정한 모든 규칙은 동시에 평가된다. (NACL은 우선순위가 높은 규칙으로 적용된다)
인바운드 규칙 설정

1. 유형 (프로토콜 / 포트) : 네트워크 트래픽에 개방할 프로토콜의 종류. HTTP, SSH 등 기본적인 통신 방식과 더불어 사용자 지정으로 TCP/UDP 등의 프로토콜과 포트를 직접 지정할 수도 있다.
2. 소스 (Source) : 트래픽의 시작점. 즉 요청 주체인 클라이언트이며, 설정된 IP 또는 범위에서 들어오는 요청만 허용하도록 설정할 수 있음.
- IP Range (CIDR) : IP 주소를 범위로 정의하여 접근을 허용하거나 차단
- ex) 모든 IP 허용(0.0.0.0/0), 회사 내부 네트워크에서만 접속하도록 제한(203.0.113.0/24 만 허용)
- 접두사 목록 : 특정 AWS 서비스와의 통신을 간편하게 설정할 때 사용.
- CIDR 블록의 집합. 보안 그룹 & Route Table에서 많은 대상을 참조하기 위해 사용.
- 종류 : AWS 관리형(서비스 관리를 위한 접두사, 수정불가), 고객 관리형(맞춤형 CIDR)
- 보안그룹 참조 : 참조된 보안그룹을 통과한다면 트래픽 허용.
- EC2 Autoscaling Group에서의 인바운드를 RDS에서 허용하려면? → ESG 보안그룹을 레퍼런스로 참조시킬 수 있음.
- EC2 Autoscaling Group에서 허용할 인바운드 트래픽을 LB로 제한하려면? → LB 보안그룹을 레퍼런스로 참조.
아웃바운드 규칙 설정

위에서 설명했던 인바운드 규칙 설정과 유사하다. 기본적으로 보안 그룹은 모든 아웃바운드 트래픽을 허용한다.
1. 유형 (프로토콜 / 포트) : 네트워크 트래픽이 나갈 때 사용할 프로토콜과 포트를 설정하는 항목.
2. 대상 (Destination) : 트래픽이 도달할 목적지. 즉, 내 서버가 데이터를 보낼 네트워크나 서비스. 설정된 IP 범위나 리소스만 허용되며, 그 외의 목적지는 차단된다.
- IP Range (CIDR) : ex) 모든 IP 허용(0.0.0.0/0), 회사 내부 네트워크로 제한(203.0.113.0/24만 허용)
- 접두사 목록 : ex) S3로 나가는 트래픽만 허용, DynamoDB로 나가는 트래픽만 허용
- 보안 그룹 참조 : ex) 참조된 보안 그룹을 통과하면 트래픽 허용
3. Inbound 트래픽으로 들어온 Source의 트래픽의 포트는 자동으로 Outboud 트래픽으로 허용함.
예시


- IP Range 사용 : 모든 소스에 대해서 HTTPS(443) 접근 허용 → 웹 사이트 공개
- IP Range 사용 : 3000번 Port로의 접근은 회사 네트워크 IP 대역(203.0.113.0/24)만 허용
- 보안그룹 참조 사용 : 같은 보안그룹 내부에서 MySQL 포트에 접근을 허용
- 관리형 접두사 사용 : EC2 인스턴스에 SSH 접속을 위해 EC2 Instance Connect를 사용할 때, EC2 Instance Connect의 IP 범위를 허용
네트워크 엑세스 제어 목록 (NACL, Network Access Control List)

NACL은 VPC 서브넷 수준에서 네트워크 트래픽을 제어하는 방화벽 역할을 하는 VPC의 선택적 보안 계층이다.
보안 그룹에 비해서 설정 과정이 까다롭지만 Deny 설정 등 다양하고 세밀한 설정을 지원한다.
- 서브넷 단위로 설정 : 서비스 및 인스턴스 단위로 설정 불가능, 서브넷 내부 간의 통신은 제어하지 않는다.
- 하나의 NACL을 다수의 서브넷에 연동 가능 (1:N), 역은 불가능
- BlackList : 포트 및 IP를 직접 Deny 가능
- Stateless : 들어오는 트래픽과 나가는 트래픽을 구분하지 않음. → 세밀한 설정이 가능하지만 복잡성이 높음.
- 보안그룹과 달리 Outbound 트래픽에 대한 응답인 Inbound를 자동으로 허용하지 않음.
- 일반적으로 Outbound에 클라이언트의 Epherneral Port Range(1025-65535)를 허용해야 정상적인 통신이 가능함.
- 따라서 서브넷 끼리 통신 시 Inbound 또한 Epherneral Port 설정에 주의해야 함.
- ex) EC2 (랜덤포트) → RDS의 경우 RDS에서 Source에 대한 랜덤포트에 대한 인바운드를 허용해두어야 함.
NACL 규칙 설정
- 규칙 번호 : 규칙이 평가되는 순서 → 낮은 번호부터 평가, 통과한 규칙에 대한 중복 Rule 적용은 무시된다.
- AWS 추천은 100단위 증가(새로운 규칙 추가 대비)
- 유형 : 트래픽 유형(DNS=53, UDP=17 등)을 설정
- 프로토콜 : 트래픽이 사용할 통신 프로토콜 정의 (TCP, UDP 등)
- 포트 범위 : 특정 트래픽의 허용/거부에 대한 포트를 정의. 단일 포트 혹은 범위를 지정 가능하다.
- 소스 (Source) : 트래픽의 시작점인 IP 주소 또는 CIDR 블록을 정의
- 동작 (Action) : Allow(허용) 혹은 Deny(거부)로 트래픽의 허용 여부 결정
정리
보안 그룹 (Security Group) | NACL (Network Access Control List) | |
적용 범위 | 서비스(인스턴스) 단위 | 서브넷 단위 |
상태 관리 | Stateful : 요청에 대한 응답은 자동으로 Inbound 허용 | Stateless : 요청과 응답에 대한 규칙이 독립적으로 적용됨 |
허용/거부 | 허용만 가능 | 허용 및 거부 설정 모두 가능 |
규칙 평가 방식 | 모든 규칙을 동시에 평가 | 규칙 번호 순서대로 평가, 첫 번째 일치 규칙이 적용 |
주요 사용 사례 | 특정 인스턴스(EC2 등)에 개별적으로 규칙 적용 , 단순하고 간단한 설정 | 서브넷에 연결된 모든 리소스에 동일한 규칙 적용, 정교한 트래픽 제어 |
References
https://docs.aws.amazon.com/
docs.aws.amazon.com
쉽게 설명하는 AWS 기초 강의 강의 | AWS 강의실 - 인프런
AWS 강의실 | AWS 여정을 시작하기 위해 가장 필요한 내용을 담았습니다., 안녕하세요. AWS 강의실입니다.AWS 공식 커뮤니티 빌더이자 2만명의 구독자를 보유한 AWS Only 강의 유튜브의 경험으로 AWS를
www.inflearn.com
'Backend > AWS' 카테고리의 다른 글
[AWS] Private EC2 연결 방법 : Bastion Host & SSM & Instance Connect Endpoint (0) | 2025.02.04 |
---|---|
[AWS] VPC Endpoint : Private 네트워크에서 AWS 서비스 접근 (0) | 2025.02.04 |
[AWS] VPC : 서브넷과 구성 요소 (Public/Private Subnet, IGW, NAT Gateway) (0) | 2025.02.04 |
[AWS] ELB : 개념 및 구성 요소 (+ EC2 Autoscaling X ALB 적용) (0) | 2025.01.15 |
[AWS] Autoscaling : EC2 클러스터 구성 및 스케일링 정책 적용 (1) | 2025.01.14 |