[AWS 네트워크 계층으로 읽기 #2] 보안 그룹 vs NACL — L4 방화벽의 원리

2026. 6. 15. 12:28·클라우드 컴퓨팅/AWS

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인가 — "포트"의 등장

포트 개념 — 같은 IP, 포트별 다른 문(22·80·3306)

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 — 나간 요청의 응답 자동 허용

보안 그룹의 핵심 특성은 상태 저장(stateful) 입니다. 이게 무슨 뜻일까요?

내 서버가 외부로 요청을 나갈(outbound) 때, 그 응답은 당연히 돌아와야(inbound) 합니다.

stateful 방화벽은 "나간 요청을 기억"해서 그에 대한 응답은 인바운드 규칙에 없어도 자동으로 허용합니다.

[내 서버] --- (80번으로 외부 API 호출) ---▶ [외부 서버]
[내 서버] ◀-- (그 응답, 임의의 높은 포트) --- [외부 서버]
                    ↑ 이 응답을 인바운드 규칙에 안 적어도 자동 허용 (stateful)

그래서 보안 그룹은 보통 인바운드 규칙만 신경 쓰면 됩니다. 응답 트래픽을 일일이 허용할 필요가 없어 설정이 단순합니다.


3. 보안 그룹 vs 네트워크 ACL(NACL)

보안 그룹 vs 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
'클라우드 컴퓨팅/AWS' 카테고리의 다른 글
  • [AWS 네트워크 계층으로 읽기 #4] Auto Scaling Group + Launch Template — 자동 증감의 본체
  • [AWS 네트워크 계층으로 읽기 #3] ALB 완전 분석 — L7 로드밸런서는 왜 URL을 읽는가
  • [AWS 네트워크 계층으로 읽기 #1] VPC·서브넷·라우팅 — 클라우드의 L3 토대 짓기
  • 실습 2-4 _ ELB 실습 ④편 — 출발지 IP 보존
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (342) N
      • 여러가지 (11) N
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (21)
        • 도커 (2)
        • AWS (19)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (2) N
        • 정보처리기사 (0)
        • 정보보안기사 (1)
        • 네트워크관리사 (1) N
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
      • 피지컬AI (26)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ROS2
    자바
    WebFlux
    moveit
    운동학
    FastAPI
    AWS
    Python
    Spring Boot
    TF
    SAA
    클라우드
    docker
    rclpy
    celery
    Spring WebFlux
    동차변환행렬
    피지컬ai
    java
    AWS네트워크계층으로읽기
    네트워크
    EC2
    취업리부트
    Redis
    항해99
    로봇팔
    그리디
    완전탐색
    프로그래머스
    역운동학
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[AWS 네트워크 계층으로 읽기 #2] 보안 그룹 vs NACL — L4 방화벽의 원리
상단으로

티스토리툴바