home
SAA-C03

[network] 보안 그룹 vs NACL

방화벽을 인스턴스에 걸까, 서브넷에 걸까. 늘 헷갈리는 보안 그룹과 NACL, 이번엔 확실히 구분해 둡니다.

One-Line Summary

Security Group(SG)인스턴스(ENI) 단위의 방화벽이고, Network ACL(NACL)서브넷 단위의 방화벽이다. 가장 큰 차이는 SG는 stateful(응답 자동 허용), NACL은 stateless(응답도 규칙으로 명시) 이고, SG는 허용(allow) 규칙만, NACL은 허용+거부(deny) 둘 다 가능하다는 점이다. 이 두 축이 시험의 90%를 가른다.

Why It Exists

트래픽을 어디서 막을지는 두 층위가 있다. 하나는 "이 서버에 누가 접근할 수 있나"(인스턴스 단위), 다른 하나는 "이 네트워크 구획 전체에 무엇을 들이고 내보낼까"(서브넷 단위)다. AWS는 이 둘을 각각 SG와 NACL로 제공해 다층 방어(defense in depth) 를 구성한다.

    Internet / other subnet
            │
            ▼
┌─ Subnet ───────────────────────────┐
│ [ NACL ]  stateless · allow + deny │   ← 서브넷 경계(1차 필터)
│      │                             │
│      ▼                             │
│ ┌─ ENI ─────────────────────────┐  │
│ │ [ SG ]  stateful · allow-only │  │   ← 인스턴스 앞(2차 필터)
│ │      │                        │  │
│ │      ▼                        │  │
│ │    EC2 instance               │  │
│ └───────────────────────────────┘  │
└────────────────────────────────────┘

시험 감각:

"특정 IP를 차단하라" = NACL(deny 가능). "웹 서버가 DB에만 접근하게 하라" = Security Group.

Abbreviations

약어풀네임의미
SGSecurity Group인스턴스(ENI) 단위 stateful 방화벽
NACLNetwork Access Control List서브넷 단위 stateless 방화벽
StatefulStateful요청을 허용하면 그 응답도 자동 허용
StatelessStateless요청/응답을 각각 별도 규칙으로 허용해야 함
Ephemeral PortEphemeral Port클라이언트가 응답 받으려 임시로 여는 높은 번호 포트 대역
ENIElastic Network Interface인스턴스에 붙는 가상 네트워크 카드(SG가 여기 적용)

Stateful vs Stateless — 가장 중요한 개념

Security Group = Stateful

요청을 허용하면 그 응답 트래픽은 규칙 없이도 자동 허용된다. 인바운드로 80 포트를 열면, 그 요청에 대한 응답(아웃바운드)은 아웃바운드 규칙을 따로 안 넣어도 나간다.

인바운드 허용: TCP 80 from 0.0.0.0/0
→ 클라이언트로 돌아가는 응답은 자동 허용 (아웃바운드 규칙 불필요)

Network ACL = Stateless

요청과 응답을 각각 규칙으로 명시해야 한다. 인바운드로 80을 허용해도, 응답이 나가는 아웃바운드(ephemeral 포트) 를 따로 허용하지 않으면 통신이 끊긴다.

인바운드 허용: TCP 80
아웃바운드 허용: TCP 1024-65535 (ephemeral 포트)  ← 이걸 빠뜨리면 응답 못 나감

ephemeral 포트(임시 포트, 보통 1024–65535) 개념이 NACL 문제의 단골 함정이다. 요청은 80으로 오지만 응답은 클라이언트가 연 높은 번호 포트로 돌아가기 때문에, NACL에서는 그 대역을 열어줘야 한다.

Allow vs Deny — 규칙 종류의 차이

구분Security GroupNetwork ACL
허용(allow) 규칙가능가능
거부(deny) 규칙불가 (허용만, 나머지는 암묵적 거부)가능 (명시적 deny)
특정 IP 차단못 함(허용 목록 방식이라)가능(그 IP만 deny)

SG는 "허용 목록(allow-list)"만 관리한다. 그래서 특정 악성 IP 하나를 차단하는 건 SG로 불가능하고, NACL의 deny 규칙으로 해야 한다. (빈출)

규칙 평가 방식

구분Security GroupNetwork ACL
평가 순서모든 규칙을 종합해 허용 여부 판단(순서 없음)번호 순(낮은 번호부터) 으로 평가, 처음 매칭되는 규칙 적용
규칙 번호없음있음(예: 100, 200 …) — 번호 간격을 두는 게 관례
매칭되면허용 규칙에 맞으면 통과매칭된 첫 규칙의 allow/deny를 즉시 적용(뒤는 무시)

NACL은 번호가 낮은 규칙이 우선이라, 100 allow200 deny보다 먼저 평가된다. 규칙 순서 설계가 중요하다.

SG는 다른 SG를 참조할 수 있다 (실무·빈출)

SG 규칙의 소스로 IP뿐 아니라 다른 보안 그룹을 지정할 수 있다. 이를 이용해 계층 간 접근을 IP 없이 논리적으로 연결한다.

DB용 SG 인바운드 규칙:
  TCP 3306  from  sg-web   ← "웹 서버 SG를 가진 인스턴스만 DB 3306 허용"
  • 웹 서버 IP가 오토스케일로 계속 바뀌어도, SG를 참조하면 규칙을 안 고쳐도 된다.
  • 시험 감각: "app tier만 DB tier에 접근" = DB SG가 app SG를 소스로 참조.

전체 비교표

항목Security GroupNetwork ACL
적용 범위인스턴스(ENI) 단위서브넷 단위
상태Stateful(응답 자동 허용)Stateless(응답도 규칙 필요)
규칙 종류allow만allow + deny
평가전체 규칙 종합번호 순, 첫 매칭 적용
소스로 SG 참조가능불가(CIDR만)
기본값새 SG: 인바운드 전체 거부, 아웃바운드 전체 허용기본 NACL: 인/아웃 전체 허용 / 커스텀 NACL: 전체 거부
적용 대상붙인 인스턴스에만서브넷 내 모든 리소스에
대표 용도인스턴스별 접근 제어, 계층 간 허용서브넷 전체 정책, 특정 IP/대역 차단

트래픽이 지나는 순서 (다층 방어)

인바운드:  외부 → [NACL(서브넷)] → [SG(인스턴스)] → EC2
아웃바운드: EC2 → [SG(인스턴스)] → [NACL(서브넷)] → 외부
  • 인바운드는 NACL이 먼저(서브넷 경계), 그다음 SG(인스턴스).
  • 둘 중 하나라도 막으면 통신 안 됨 → "안 되면 양쪽 다 확인".
  • NACL은 서브넷의 모든 리소스에 일괄 적용되고, SG는 붙인 인스턴스에만 적용된다.

언제 무엇을 쓰나

요구사항선택
인스턴스별로 접근 포트/소스 제어Security Group
웹→앱→DB 계층 간 접근 허용(오토스케일 IP 변동)SG가 다른 SG 참조
특정 악성 IP/대역을 차단NACL deny 규칙
서브넷 전체에 공통 정책(예: DB 서브넷은 특정 포트만)NACL
기본·간단한 대부분의 접근 제어Security Group (NACL은 기본 전체 허용으로 두는 경우 多)

Common Wrong Directions

오답 방향왜 부족한가
SG로 특정 IP를 차단하려 함SG는 allow만. 차단은 NACL deny
NACL이 stateful이라 응답 자동 허용될 거라 가정NACL은 stateless → ephemeral 포트 아웃바운드도 열어야
SG를 서브넷에 붙인다고 생각SG는 인스턴스(ENI) 단위. 서브넷 단위는 NACL
계층 간 접근에 IP를 하드코딩오토스케일로 IP 변동 → SG 참조가 정석
NACL 규칙 순서를 무시번호 낮은 것이 우선, 첫 매칭 적용
통신 장애를 SG만 확인NACL·라우트·SG를 함께 확인(다층)
커스텀 NACL 만들고 규칙 안 넣음커스텀 NACL 기본은 전체 거부 → 명시 허용 필요

Exam Triggers

문제에서 이런 표현이 나오면떠올릴 것
"block/deny a specific IP address or range"NACL (deny 규칙)
"allow only web tier to reach database tier"SG가 다른 SG 참조
"return traffic is being blocked / responses fail"NACL stateless → ephemeral 포트 허용
"apply rules to all instances in a subnet"NACL
"instance-level firewall"SG
"rules evaluated in number order, first match"NACL
"auto scaling changes IPs, keep access working"SG 참조(IP 대신)
"custom NACL blocks everything by default"명시적 allow 규칙 추가 필요

Memory Sentence

SG는 인스턴스(ENI) 단위·stateful·allow만이라 응답이 자동 허용되고 특정 IP 차단은 못 한다. NACL은 서브넷 단위·stateless·allow+deny라 특정 IP를 막을 수 있지만 응답용 ephemeral 포트를 직접 열어야 한다. 계층 간 허용은 SG가 SG를 참조, 악성 IP 차단은 NACL deny. 인바운드는 NACL→SG 순으로 통과한다.

References

댓글

아직 댓글이 없습니다.