AWS 보안 그룹 설정과 원본(Source) 개념
AWS 보안 그룹 설정과 원본(Source) 개념
“포트 열었는데 왜 접속이 안 되죠?”
EC2에 애플리케이션을 띄웠는데 외부에서 접속이 안 될 때, 십중팔구 보안 그룹(Security Group) 설정 문제입니다. AWS를 처음 쓰면 가장 자주 막히는 지점이라, 개념을 제대로 잡아두면 좋습니다.
보안 그룹 = 인스턴스 단위 가상 방화벽
보안 그룹은 EC2 인스턴스(정확히는 ENI) 앞단에서 트래픽을 통제하는 가상 방화벽입니다.
- 인바운드(Inbound): 들어오는 트래픽 규칙
- 아웃바운드(Outbound): 나가는 트래픽 규칙
- 허용(allow) 규칙만 존재합니다. “차단” 규칙은 없고, 규칙에 없으면 기본 거부.
- 상태 저장(stateful): 인바운드로 허용된 요청의 응답은 아웃바운드 규칙과 무관하게 자동 허용됩니다.
flowchart LR
C[클라이언트] -->|"인바운드 규칙 통과?"| SG{보안 그룹}
SG -->|허용| E["EC2 (앱)"]
SG -->|규칙 없음| X[차단]
핵심: 원본(Source) 개념
인바운드 규칙에서 가장 중요한 게 Source(원본) 입니다. “어디서 오는 트래픽을 허용할지”를 정합니다. 두 가지 방식이 있습니다.
1. IP 주소(CIDR) 기반
특정 IP 대역에서의 접근을 허용합니다.
0.0.0.0/0: 모든 IP (전 세계 누구나). HTTP(80)/HTTPS(443)엔 흔하지만, SSH(22)에 이걸 열면 매우 위험합니다.123.45.67.89/32: 특정 IP 하나만 (/32는 단일 IP).- 회사 IP 대역 등 특정 CIDR만 허용.
1
2
3
인바운드 예시
- HTTP 80 Source: 0.0.0.0/0 (웹은 전체 공개)
- SSH 22 Source: 123.45.67.89/32 (내 IP만!)
2. 다른 보안 그룹 참조
Source에 IP가 아니라 다른 보안 그룹 ID를 지정할 수 있습니다. 이게 강력합니다.
예: DB 보안 그룹의 인바운드(5432)의 Source를 “웹 서버 보안 그룹” 으로 지정 → “웹 서버 보안 그룹에 속한 인스턴스만” DB에 접근 허용.
flowchart LR
W["웹 서버<br/>(SG: web)"] -->|5432 허용: Source=SG web| D["DB<br/>(SG: db)"]
O[외부] -.차단.-> D
IP는 인스턴스가 늘거나 바뀌면 관리가 어렵지만, 보안 그룹 참조는 그룹 멤버십으로 동적으로 관리되어 훨씬 견고합니다. 내부 통신(웹↔DB, 앱↔Redis 등)엔 이 방식이 정석입니다.
자주 하는 실수
- SSH(22)를
0.0.0.0/0으로 개방 → 전 세계가 SSH를 시도. 반드시 내 IP/VPN 대역으로 제한. - 인바운드만 보고 아웃바운드를 잊음 → 단, 상태 저장이라 응답은 자동 허용되니 보통 문제 없음.
- 보안 그룹은 통과했는데 OS 방화벽(iptables) 이나 네트워크 ACL에서 막히는 경우도 있으니 함께 점검.
정리
- 보안 그룹 = 인스턴스 단위 가상 방화벽, 허용 규칙만, 상태 저장.
- 인바운드의 Source가 핵심: CIDR(IP 대역) 또는 다른 보안 그룹 참조.
- 내부 서비스 간 통신은 보안 그룹 참조가 IP보다 견고.
- SSH를 전체 개방하지 말 것 — 단골 보안 사고 원인.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
