EC2 인스턴스를 “컴퓨터 한 대를 빌린 것”이라고 했는데,
이걸 좀 더 쉽게 비유하면 집 한 채를 빌린 것이랑 비슷하다.
그럼 보안 그룹(Security Group)은 뭐냐?
집 바깥에 쳐져 있는 울타리 + 대문이라고 생각하면 제일 이해가 빠르다.
인터넷에서 누가 내 EC2(집)에 접근하려고 하면,
바로 집 안으로 들어오는 게 아니라 대문 앞에서 먼저 검사를 받는다.
- “너 들어와도 돼?”
- “어디서 왔어?”
- “어떤 문(포트)으로 들어오려고 해?”
이걸 **보안 그룹 규칙(Security Group Rules)**이 결정한다.
즉, 보안 그룹은 EC2 주변에서 방화벽 역할을 하는 놈이고,
규칙은 그 방화벽이 “어떤 트래픽을 허용/차단할지” 정하는 기준이다.
보안 그룹 규칙은 2가지 방향이 있다 (Inbound / Outbound)
보안 그룹 규칙은 크게 두 가지 방향으로 나뉜다.
1) 인바운드(Inbound) 트래픽
외부 → EC2로 들어오는 트래픽을 말한다.
즉, 인터넷에서 누가 내 서버로 요청을 보낼 때 그 요청이 여기 해당된다.
- “외부에서 들어오는 요청을 어떤 조건에서만 허용할 것인가?”
이걸 정하는 게 인바운드 규칙이다.
2) 아웃바운드(Outbound) 트래픽
EC2 → 외부로 나가는 트래픽을 말한다.
예를 들면 EC2 안에서:
- 패키지 설치할 때(apt update, apt install)
- 다른 API를 호출할 때
- 외부 DB에 붙을 때
같은 상황에서 밖으로 나가는 트래픽이 여기에 해당한다.
규칙에서 핵심으로 보는 건 “포트 + IP 범위”
보안 그룹을 설정할 때 핵심은 결국 두 가지다.
- 포트(Port): 어떤 문으로 들어오려는지
- IP 범위(Source): 누가 들어오려는지 (어디서 오는 요청인지)
그래서 결국 인바운드 규칙은 이런 형태로 이해하면 된다.
“어떤 IP(또는 범위)가, 어떤 포트로 들어오는 요청을 허용할 건가?”
EC2 생성 시 보안 그룹 설정 흐름
EC2 인스턴스를 만들 때 보안 그룹 설정을 하게 되는데,
여기서 내가 실제로 한 흐름을 정리하면 이렇다.
1) 보안 그룹 이름은 프로젝트 기준으로
나중에 서버가 여러 개 생기면 보안 그룹도 여러 개 생긴다.
그래서 보안 그룹 이름은 프로젝트에 맞게 지어두는 게 좋다.
2) 기본으로 SSH(22번 포트)가 열려 있다 — 왜냐면 “원격 접속”해야 하니까
EC2는 “원격 컴퓨터”다.
즉, 내가 직접 그 컴퓨터 안에 들어가서 작업을 해야 한다.
그때 사용하는 접속 방식이 SSH다.
SSH는 쉽게 말하면:
“내 로컬에서, EC2라는 원격 컴퓨터로 들어가는 통로”
그리고 SSH는 기본 포트가 22번이다.
그래서 EC2를 만들 때 보통 기본으로:
- 유형: SSH
- 포트: 22
가 설정되어 있다.
근데 여기서 중요한 포인트
소스(Source)가 “위치 무관(0.0.0.0/0)”로 되어 있으면,
전 세계 어디서든 내 EC2에 SSH 접속을 시도할 수 있는 상태가 된다.
이게 “접속 자체”는 편하지만, 보안상 위험해진다.
3) 만약 “내 IP에서만 접속”하게 하고 싶다면?
SSH는 특히 위험하다.
왜냐면 SSH가 열려 있으면 누가 내 서버에 로그인 시도를 할 수 있기 때문이다.
그래서 보통 운영에서는:
- 소스를 “위치 무관”으로 두는 게 아니라
- 내 IP만 허용하도록 바꾸는 게 훨씬 안전하다.
방법은 간단하다.
- 소스 유형(Source type)을 사용자 지정(Custom)
- 내 IP를 직접 입력
즉,
“내 집(내 IP)에서만 대문(22번)을 열어두겠다”
이런 느낌이다.
4) “보안 그룹 규칙 추가”로 HTTP(80번 포트)를 열어준다
이제 서버를 배포할 거니까,
외부에서 내 서버로 요청이 들어올 수 있어야 한다.
그래서 인바운드 규칙에서 추가(Add rule) 버튼을 눌러서 규칙을 하나 더 만든다.
여기서 내가 허용할 건 HTTP다.
- 유형(Type): HTTP
- 포트(Port): 80 (자동으로 잡힘)
이게 의미하는 건 딱 이거다.
“외부에서 80번 포트로 들어오는 HTTP 요청은 EC2로 들어오게 허용하겠다.”
5) 소스(Source)는 왜 “위치 무관”으로 두는가?
여기서 SSH랑 HTTP의 차이를 구분해야 한다.
- SSH(22)는 “관리자(나)”만 들어오면 된다 → 내 IP만 허용하는 게 안전
- HTTP(80)는 “사용자(불특정 다수)”가 들어와야 한다 → 위치 무관이 자연스럽다
즉, HTTP 요청은 결국 사용자들이 보내는 거니까,
특정 IP만 열어두면 서비스 자체가 동작을 못 한다.
그래서 HTTP는 보통:
- 소스: 위치 무관(0.0.0.0/0)
으로 둔다.
정리: 지금 내가 만든 보안 그룹 상태
내가 지금 만든 보안 그룹 규칙을 문장으로 요약하면 이거다.
- SSH(22): EC2에 원격 접속하기 위한 문 → 가능하면 내 IP만 열어두기
- HTTP(80): 사용자 요청을 받기 위한 문 → 불특정 다수가 접속해야 하니까 위치 무관
즉,
“나는 EC2에 들어가서 작업할 수 있어야 하고(SSH)
다른 사용자도 인터넷으로 내 서버에 요청을 보낼 수 있어야 한다(HTTP)”
그래서 이 두 개의 문을 열어둔 것이다.
'Infra > AWS' 카테고리의 다른 글
| 맥에서 EC2 접속하기 (0) | 2026.01.28 |
|---|---|
| EC2 세팅 - 스토리지 (0) | 2026.01.28 |
| EC2 세팅 - 헷갈렸던 것들 정리 (0) | 2026.01.28 |
| EC2란? (0) | 2026.01.28 |
| 배포란? - localhost에서 끝나면 서비스가 아니다 (0) | 2026.01.28 |