시리즈: 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-sg | 80(전체), 443(전체), 22(내 IP) | EC2 웹 서버 |
| rds-sg | 3306(web-sg에서만) | RDS DB |
이번 편에서 만든 것:
- ✅ web-sg (HTTP, HTTPS, SSH 허용)
- ✅ rds-sg (MySQL, web-sg에서만 허용)
시리즈 전체 구성
| 편 | 주제 | 만드는 것 |
|---|---|---|
| 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 Host | bastion-host |
| 11편 | ALB 로드밸런서 | my-alb |
| 12편 | Auto Scaling | my-asg |
| 13편 | ACM + HTTPS | SSL 인증서 |
| 14편 | CloudWatch 모니터링 | 알람, 대시보드 |
| 15편 | 완성 아키텍처 & 비용 최적화 | 전체 정리 |