4편. 보안 그룹 설계 — 웹 서버와 DB 방화벽 만들기

시리즈: AWS로 웹 서버 + DB 직접 구축하기 (VPC 완전 정복) | 4편 / 15편

네트워크가 연결됐으니 이제 방화벽을 설정 할 차례예요.
서버를 올리기 전에 방화벽을 먼저 설계하는 게 맞는 순서예요.

AWS에서 방화벽 역할을 하는 게 바로 보안 그룹(Security Group) 이에요.


보안 그룹이란?

보안 그룹은 EC2, RDS 같은 리소스에 붙이는 가상 방화벽 이에요.

아파트 비유로 이야기하면:

서브넷 = 아파트 층 EC2, RDS = 각 호실 보안 그룹 = 각 호실의 현관문 잠금장치

잠금장치에 “이 사람들만 들어올 수 있어요” 라고 규칙을 정하는 거예요.

보안 그룹의 핵심 특징:

① 허용(Allow) 규칙만 있어요

“이 트래픽은 차단해” 라는 규칙은 없어요. 명시적으로 허용하지 않은 모든 트래픽은 자동으로 차단 돼요.

② Stateful 이에요

한 방향의 통신을 허용하면, 반대 방향(응답)은 자동으로 허용돼요.

예를 들어 80번 포트 인바운드(들어오는 것) 를 허용하면, 그에 대한 아웃바운드(나가는 응답) 는
따로 설정하지 않아도 자동으로 허용돼요.

덕분에 규칙을 훨씬 간단하게 관리할 수 있어요.

③ 인바운드 / 아웃바운드

인바운드(Inbound)   = 외부 → 서버로 들어오는 트래픽
아웃바운드(Outbound) = 서버 → 외부로 나가는 트래픽

이번 편에서 만들 보안 그룹

최종 아키텍처를 생각하면서 보안 그룹을 미리 설계할게요. 지금 당장 사용하지 않는 것도 미리 만들어두면 나중에 편해요.

[web-sg]      ← EC2 웹 서버용 (지금 만들기)
[rds-sg]      ← RDS DB용     (지금 만들기)
[alb-sg]      ← 로드밸런서용  (11편에서 만들기)
[bastion-sg]  ← Bastion용    (10편에서 만들기)

지금은 web-sg 와 rds-sg 만 만들게요.


보안 그룹 메뉴로 이동

왼쪽 사이드바에서 Security Groups 클릭.

기본 VPC의 보안 그룹들이 이미 여러 개 있을 거예요. 그대로 두고 새로 만들게요.

오른쪽 상단 Create security group 클릭!


web-sg — 웹 서버용 보안 그룹 만들기

Security group name : web-sg
Description         : Security group for web server
VPC                 : my-vpc

VPC는 반드시 my-vpc 를 선택하세요. 다른 VPC의 리소스에는 적용이 안 돼요.


인바운드 규칙 추가

Add rule 버튼을 클릭해서 규칙을 추가해요.

규칙 1 — HTTP 허용

Type     : HTTP
Protocol : TCP  (자동 입력)
Port     : 80   (자동 입력)
Source   : 0.0.0.0/0

Type에서 HTTP를 선택하면 Protocol과 Port가 자동으로 채워져요. Source를 0.0.0.0/0으로 설정하면 전 세계 어디서든 80번 포트로 접근 가능해요.

규칙 2 — HTTPS 허용

Add rule 클릭 후:

Type     : HTTPS
Protocol : TCP  (자동 입력)
Port     : 443  (자동 입력)
Source   : 0.0.0.0/0

규칙 3 — SSH 허용

Add rule 클릭 후:

Type     : SSH
Protocol : TCP  (자동 입력)
Port     : 22   (자동 입력)
Source   : My IP   ← 드롭다운에서 선택

⚠️ SSH는 반드시 My IP 로 설정하세요!

My IP 를 선택하면 현재 내 PC의 IP가 자동으로 입력돼요. (예: 1.2.3.4/32)

0.0.0.0/0 으로 열면 전 세계 누구나 SSH 접속을 시도할 수 있어요.
실제로 이렇게 열어두면 수초 안에 해킹 시도가 들어오기 시작해요. 정말이에요.


아웃바운드 규칙

아웃바운드는 기본값 그대로 두세요.

Type     : All traffic
Protocol : All
Port     : All
Destination : 0.0.0.0/0

EC2가 외부로 요청을 보내야 할 일이 많아서 모두 열어두는 게 일반적이에요.
(패키지 설치, 외부 API 호출 등)

Create security group 클릭!


rds-sg — DB용 보안 그룹 만들기

다시 Create security group 클릭!

Security group name : rds-sg
Description         : Security group for RDS
VPC                 : my-vpc

인바운드 규칙 추가

Add rule 클릭!

Type     : MySQL/Aurora
Protocol : TCP  (자동 입력)
Port     : 3306 (자동 입력)
Source   : web-sg   ← IP가 아닌 보안 그룹 선택!

💡 Source에 IP 대신 보안 그룹을 넣는 게 핵심이에요!

Source 입력란을 클릭하면 드롭다운이 나오고, 검색창에 web-sg 를 입력하면 방금 만든 보안 그룹이 목록에 나와요. 그걸 선택하세요.

이렇게 설정하면 web-sg가 붙은 서버에서 보내는 트래픽만 3306 포트로 들어올 수 있어요. IP가 아닌 보안 그룹을 참조하기 때문에, EC2의 IP가 바뀌어도 자동으로 적용돼요.

아웃바운드 규칙: 기본값 유지

Create security group 클릭!


보안 그룹 간 참조의 위력

지금 설정한 구조를 그림으로 보면:

인터넷 (0.0.0.0/0)
  ↓ 80(HTTP), 443(HTTPS) 허용
[web-sg] → EC2 웹 서버
  ↓ 3306(MySQL) 허용 (web-sg에서 온 트래픽만)
[rds-sg] → RDS DB
  • 인터넷 → 웹 서버 (80, 443) : ✅ 허용
  • 웹 서버 → DB (3306) : ✅ 허용
  • 인터넷 → DB (직접) : ❌ 차단
  • 다른 서버 → DB : ❌ 차단

DB는 프라이빗 서브넷에 있는 데다 rds-sg로 이중 보호가 돼요.
해커가 DB에 접근하려면 먼저 웹 서버를 뚫어야 하는 구조예요.


현재 아키텍처 상태

인터넷
  ↓ 80, 443 허용 (web-sg)
퍼블릭 서브넷 (EC2는 아직 없음)

  ↓ 3306 허용 (rds-sg, web-sg에서만)
프라이빗 서브넷 (RDS는 아직 없음)

보안 그룹을 미리 만들어뒀어요. 다음 편에서 EC2를 만들 때 이걸 바로 붙일 거예요.


이번 편 정리

보안 그룹인바운드 규칙용도
web-sg80(전체), 443(전체), 22(내 IP)EC2 웹 서버
rds-sg3306(web-sg에서만)RDS DB

이번 편에서 만든 것:

  • ✅ web-sg (HTTP, HTTPS, SSH 허용)
  • ✅ rds-sg (MySQL, web-sg에서만 허용)

다음 편 👉 5편. EC2 웹 서버 배포 — 퍼블릭 서브넷에 서버 올리기

시리즈 전체 구성

주제만드는 것
1편전체 설계도 & VPC 만들기 my-vpc
2편서브넷 설계퍼블릭/프라이빗 서브넷 4개
3편인터넷 게이트웨이 & 라우팅 테이블IGW, 라우팅 테이블
4편보안 그룹 설계 ← 지금 여기web-sg, rds-sg
5편EC2 웹 서버 배포web-server-1
6편Nginx로 웹 서버 구성웹 페이지
7편RDS 생성my-database
8편EC2 → RDS 연결DB 연결 확인
9편NAT 게이트웨이my-nat-gateway
10편Bastion Hostbastion-host
11편ALB 로드밸런서my-alb
12편Auto Scalingmy-asg
13편ACM + HTTPSSSL 인증서
14편CloudWatch 모니터링알람, 대시보드
15편완성 아키텍처 & 비용 최적화전체 정리