AWS 네트워크 계층으로 읽기
시리즈 소개
AWS EC2 Auto Scaling 실습 하나를 OSI 7계층 / TCP/IP 4계층 관점으로 한 챕터씩 뜯어보는 5부작입니다.#1 VPC·서브넷·라우팅 — L3 토대
#2 (이번 편) 보안 그룹 vs NACL — L4 방화벽 ← 현재 위치
#3 ALB 완전 분석 — L7 로드밸런서는 왜 URL을 읽는가 (vs NLB)
#4 Auto Scaling Group + Launch Template — 자동 증감의 본체
#5 CloudWatch 동적 스케일링 + 부하 테스트로 증명하기
실습 환경: 서울 리전(ap-northeast-2) · CloudFormation(ASG_LAB.yaml) 기반
0. 공통 지도 — OSI 7계층 / TCP/IP 4계층 (매 편 반복)
| OSI 7계층 | TCP/IP 4계층 | 핵심 단위 | 대표 예시 | 이 시리즈에서 |
|---|---|---|---|---|
| 7. 응용 | 4. 응용 | 데이터 | HTTP, DNS, SSH | ALB, 헬스체크 경로 |
| 6. 표현 | 4. 응용 | 데이터 | TLS | (HTTPS 쓸 때) |
| 5. 세션 | 4. 응용 | 데이터 | 세션 관리 | ALB 세션 유지 |
| 4. 전송 | 3. 전송 | 세그먼트 | TCP, UDP, 포트 | ★이번 편: 보안 그룹·포트·stateful |
| 3. 네트워크 | 2. 인터넷 | 패킷 | IP, ICMP, 라우팅 | VPC·서브넷(1편), ICMP |
| 2. 데이터링크 | 1. 네트워크 접근 | 프레임 | MAC | ENI(가상 NIC) |
| 1. 물리 | 1. 네트워크 접근 | 비트 | 케이블 | 데이터센터 |
이번 편의 자리: L4(전송 계층) = TCP/IP의 전송 계층입니다. 여기서 처음으로 "포트(Port)"가 등장합니다.
1. 왜 L4인가 — "포트"의 등장

1편에서 우리는 VPC·서브넷·라우팅으로 "어느 IP로, 어떤 길로 갈지(L3)"를 정했습니다.
그런데 패킷이 서버(IP)에 도착해도 문제가 남습니다.
한 서버는 동시에 여러 서비스를 돌립니다.
웹(HTTP), SSH 원격접속, 데이터베이스… 도착한 패킷이 이 중 어느 프로그램으로 가야 할까요?
이걸 구분하는 번호가 포트(Port)입니다.
같은 IP라도 22번 포트로 오면 SSH, 80번 포트로 오면 웹 서버로 전달됩니다.
IP가 "건물 주소"라면 포트는 "건물 안의 호실 번호"입니다.
그리고 이 포트는 TCP/UDP라는 전송 계층(L4) 프로토콜의 개념입니다.
방화벽이 "포트 단위로 트래픽을 허용/차단"한다면, 그건 본질적으로 L4에서 동작하는 것입니다.
AWS의 보안 그룹이 바로 그렇습니다.
2. 보안 그룹 — 인스턴스 앞의 stateful 방화벽
2-1. YAML로 보는 실제 규칙
ASG_LAB.yaml의 보안 그룹은 이렇게 생겼습니다.
VPC1SG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allow - SSH HTTP ICMP
VpcId: !Ref VPC1
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '22' # SSH (원격 접속)
ToPort: '22'
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: '80' # HTTP (웹)
ToPort: '80'
CidrIp: 0.0.0.0/0
- IpProtocol: icmp # ping (이건 L3)
FromPort: -1
ToPort: -1
CidrIp: 0.0.0.0/0
규칙 하나하나가 "프로토콜 + 포트 + 출발지 IP"로 표현됩니다. 이게 핵심입니다.
IpProtocol: tcp+FromPort/ToPort: 22→ L4(TCP 22번 포트) 를 본다CidrIp: 0.0.0.0/0→ L3(출발지 IP 대역) 도 본다 —0.0.0.0/0은 "모든 IP 허용"IpProtocol: icmp→ ICMP는 포트가 없는 L3 프로토콜(ping). 그래서 포트 자리에-1을 씁니다
즉 보안 그룹은 "L4(포트)를 주로 보면서 L3(출발지 IP)도 함께 보는" 필터입니다.
순수 L4가 아니라 L3+L4 경계에 걸친 필터라고 이해하는 게 정확합니다.
보안 그룹 인바운드 규칙
2-2. "stateful"이 가장 중요하다

보안 그룹의 핵심 특성은 상태 저장(stateful) 입니다. 이게 무슨 뜻일까요?
내 서버가 외부로 요청을 나갈(outbound) 때, 그 응답은 당연히 돌아와야(inbound) 합니다.
stateful 방화벽은 "나간 요청을 기억"해서 그에 대한 응답은 인바운드 규칙에 없어도 자동으로 허용합니다.
[내 서버] --- (80번으로 외부 API 호출) ---▶ [외부 서버]
[내 서버] ◀-- (그 응답, 임의의 높은 포트) --- [외부 서버]
↑ 이 응답을 인바운드 규칙에 안 적어도 자동 허용 (stateful)
그래서 보안 그룹은 보통 인바운드 규칙만 신경 쓰면 됩니다. 응답 트래픽을 일일이 허용할 필요가 없어 설정이 단순합니다.
3. 보안 그룹 vs 네트워크 ACL(NACL)

AWS에는 방화벽이 하나 더 있습니다. NACL(Network ACL) 입니다. 둘을 비교하면 보안 그룹의 정체가 더 선명해집니다.
| 구분 | 보안 그룹(Security Group) | 네트워크 ACL(NACL) |
|---|---|---|
| 적용 단위 | 인스턴스(ENI) 단위 | 서브넷 단위 |
| 상태 | stateful(응답 자동 허용) | stateless(인·아웃 각각 규칙 필요) |
| 규칙 종류 | 허용(Allow)만 가능 | 허용 + 거부(Deny) 모두 |
| 평가 방식 | 모든 규칙을 종합 평가 | 번호 순서대로 평가(낮은 번호 우선) |
| 동작 계층 | L3+L4 | L3+L4 |
| 기본값 | 모두 거부(명시 허용만 통과) | 기본 NACL은 모두 허용 |
쉽게 말하면:
- 보안 그룹 = 서버 한 대 앞에 붙는 경비원. "너는 22·80번만 들어와" 하고, 한 번 들여보낸 손님의 답례품은 알아서 통과시킴(stateful).
- NACL = 동네(서브넷) 입구의 차단봉. 동네 전체에 적용되고, "이 IP는 아예 출입금지(Deny)" 같은 블랙리스트가 가능하며, 들어온 길과 나가는 길을 따로 통제(stateless)함.
이 실습이 보안 그룹만 쓴 이유
이 랩은 NACL을 따로 설정하지 않고 보안 그룹만 씁니다. 이유는 명확합니다.
- 더 단순하고 직관적: stateful이라 인바운드만 신경 쓰면 됩니다.
- 인스턴스 단위 제어: 웹 서버마다 정밀하게 규칙을 줄 수 있습니다.
- 학습/소규모 환경에서는 보안 그룹만으로 충분합니다.
NACL은 보통 서브넷 전체에 광범위한 차단(특정 악성 IP 대역 Deny 등)이 필요한 대규모/규제 환경에서 보안 그룹 위에 추가 방어선으로 얹습니다. "보안 그룹 = 1차 정밀 방어, NACL = 서브넷 단위 2차 광역 방어"의 이중 구조죠.
4. 실무 관점 — 보안 그룹을 더 안전하게
이 실습은 학습용이라 CidrIp: 0.0.0.0/0(모든 IP 허용)을 씁니다. 하지만 운영에서는 위험합니다. 개선 포인트:
- SSH(22)는 내 IP만:
0.0.0.0/0대신내공인IP/32로 제한하세요. 22번을 전 세계에 열어두면 무차별 대입 공격의 표적이 됩니다. - 보안 그룹 체이닝(참조): 출발지를 IP가 아니라 다른 보안 그룹 ID로 지정할 수 있습니다. 예) "웹 서버 SG에서 오는 트래픽만 DB SG의 3306 허용". IP가 바뀌어도 규칙이 안 깨져 오토 스케일링 환경에 특히 적합합니다.
- 최소 권한 원칙: 필요한 포트만, 필요한 출발지만. HTTP(80)는 공개해도 SSH(22)·DB(3306)는 좁히는 게 기본입니다.
stateful vs stateless 개념도
5. 이번 편 계층 종합표
|
구성요소 |
YAML/개념 |
동작 계층(OSI) |
TCP/IP |
근거 |
한 줄 역할 |
|---|---|---|---|---|---|
| 보안 그룹(TCP 규칙) | SecurityGroupIngress tcp 22/80 |
L4(+L3) | 전송(+인터넷) | 포트(L4)+출발지IP(L3) | 인스턴스 stateful 방화벽 |
| 보안 그룹(ICMP 규칙) | IpProtocol: icmp |
L3 | 인터넷 | 포트 없는 IP 프로토콜 | ping 허용 |
| NACL(참고) | (이 실습 미사용) | L3+L4 | 인터넷+전송 | 포트+IP, Deny 가능 | 서브넷 stateless 방화벽 |
| 포트(22/80) | FromPort/ToPort |
L4 | 전송 | TCP 세그먼트 식별 | 서비스 구분 번호 |
한 문장 요약: L3가 "어느 IP로 갈지"였다면, L4는 "그 IP의 어느 포트(문)를 열지"입니다. 보안 그룹은 포트(L4)를 주축으로 출발지 IP(L3)까지 함께 보는 stateful 경비원입니다.
6. 실습 핵심 수치 (이번 편)
- 허용 포트: TCP 22(SSH), TCP 80(HTTP), ICMP(ping)
- 출발지:
0.0.0.0/0(학습용 전체 허용 — 운영에선 좁힐 것) - 특성: stateful(응답 자동 허용) · 적용 단위 인스턴스(ENI)
- 보안 그룹:
My-SG(MyVPC),VPC1-SG(ASG-VPC) 두 개
다음 편 예고
#3에서는 한 계층을 더 올라가 L7(응용 계층) 로 갑니다.
ALB(Application Load Balancer)가 단순히 IP·포트만 보는 게 아니라
HTTP 요청의 URL 경로(/HealthCheck.txt)까지 읽어서 트래픽을 분배하는 원리,
그리고 L4만 보는 NLB와의 차이를 다룹니다.
키워드는 URL 경로 기반 라우팅과 L7 헬스체크입니다.
이번 편 한 줄 복습: L4는 "어느 포트(문)를 열지"를 정하는 계층 — 보안 그룹은 포트(L4)+출발지IP(L3)를 보는 stateful 방화벽이고, NACL은 서브넷 단위 stateless 방화벽이다.
시리즈 #2 끝 · 다음 편: ALB 완전 분석 — L7 로드밸런서는 왜 URL을 읽는가
'클라우드 컴퓨팅 > AWS' 카테고리의 다른 글
| [AWS 네트워크 계층으로 읽기 #4] Auto Scaling Group + Launch Template — 자동 증감의 본체 (0) | 2026.06.15 |
|---|---|
| [AWS 네트워크 계층으로 읽기 #3] ALB 완전 분석 — L7 로드밸런서는 왜 URL을 읽는가 (0) | 2026.06.15 |
| [AWS 네트워크 계층으로 읽기 #1] VPC·서브넷·라우팅 — 클라우드의 L3 토대 짓기 (0) | 2026.06.15 |
| 실습 2-4 _ ELB 실습 ④편 — 출발지 IP 보존 (1) | 2026.06.09 |
| 실습 2-2 _ ELB 실습 ②편 — ALB (0) | 2026.06.08 |

