AWS EC2 인스턴스 생성 시 보안그룹 동작 원리

최승혁·2025년 10월 12일
post-thumbnail

AWS에서 EC2 인스턴스를 처음 생성할 때,
항상 따라오는 개념이 바로 보안그룹(Security Group) 입니다.
하지만 많은 사람들이 헷갈리는 부분이 있죠.

“default 보안그룹이 있는데, 왜 내가 건드린 launch-wizard-1만 적용될까?”

그리고 AWS에서 EC2를 처음 배포할 때 가장 많이 겪는 문제가 바로 이겁니다.

“Nginx까지 설치했는데 http://<EC2 퍼블릭 IP> 접속이 안 돼요!”

저도 이번에 웹서버 구축 프로젝트를 EC2에 직접 배포하면서
이 문제를 정확히 겪었고, 결국 원인과 구조를 이해하게 됐습니다.

이 글에서는
✅ 보안그룹의 기본 원리
✅ default vs launch-wizard 차이
✅ 제가 겪은 실제 트러블슈팅 과정

위 3가지를 정리해보겠습니다.


💡 1. 보안그룹(Security Group)이란?

AWS의 보안그룹은 EC2 인스턴스 단위의 방화벽입니다.
즉, “이 인스턴스가 어떤 트래픽을 주고받을 수 있는가?”를 결정합니다.

  • 인바운드(Inbound) → 외부 → EC2 (예: 브라우저 접근, SSH 연결)

  • 아웃바운드(Outbound) → EC2 → 외부 (예: apt install, API 요청 등)

보안그룹이 허용하지 않은 트래픽은,
서버에서 Nginx가 잘 돌아가도 외부에서 절대 접근할 수 없습니다.


2. EC2 생성 시 보안그룹 연결 원리

AWS는 EC2를 생성할 때 자동으로 하나의 보안그룹을 연결합니다.
이때 어떤 그룹이 연결되는지는 EC2 생성 시 옵션에 따라 달라집니다.

생성 시 선택 옵션결과설명
“새 보안 그룹 생성(Create new security group)”launch-wizard-1 자동 생성EC2 마법사에서 새 그룹이 자동 생성되어 연결됨
“기존 보안 그룹 선택(Select existing security group)” → default 선택default 그룹 사용기존 default 그룹을 그대로 재사용
AMI 복제원본의 보안그룹 그대로 유지launch-wizard 또는 custom 그룹 그대로 복사

3. default vs launch-wizard 비교표

구분default 보안그룹launch-wizard 보안그룹
생성 시점VPC 생성 시 자동 생성EC2 생성 시 자동 생성
기본 규칙내부 통신만 허용, 외부 차단생성 시 선택한 포트(22, 80 등) 허용
인스턴스 연결 여부❌ 기본적으로 연결 안 됨✅ EC2 생성 시 자동 연결
주요 용도내부 DB 통신, 내부 테스트용실제 서비스용 (웹서버, API 서버 등)
이름 변경불가능가능 (예: web-prod-sg)
흔한 실수default에 포트 열었는데 인스턴스는 launch-wizard에 연결됨※ 가장 흔한 문제!

💥 4. 실제 트러블슈팅 사례: “Nginx 접속 안 됨”

🧩 문제 상황

AWS EC2 인스턴스에 Nginx를 설치하고
sudo systemctl status nginx로 확인해보면 active (running) 상태.
포트도 0.0.0.0:80으로 잘 열려 있음.

그런데도 브라우저에서 http://<퍼블릭 IP> 접속 시 아무 응답이 없음.

ssh -i "gangwonfocus-key.pem" ubuntu@<Public IP>
curl http://localhost     # 정상 동작

즉, 서버 내부에서는 잘 뜨는데 외부에서는 접속 불가 상태였습니다.

🔍 원인 분석

AWS 보안그룹 인바운드 규칙을 확인했는데,
HTTP(80), HTTPS(443), SSH(22)가 모두 허용돼 있었음.
그래서 처음엔 "보안그룹 문제는 아니다"라고 착각.

하지만 인스턴스 상세 탭을 다시 보니,
실제로 적용된 보안그룹 이름이 launch-wizard-1 이었습니다.
그런데 내가 설정했던 규칙은 default 보안그룹이었습니다.

즉, 규칙은 default에 추가했지만,
EC2는 launch-wizard-1을 사용 중이라서
실제로는 아무 트래픽도 허용되지 않았던 것!

✅ 해결 방법

  1. EC2 → 보안 탭 → launch-wizard-1 클릭

  2. 인바운드 규칙에 다음 항목 추가

    유형(Type)프로토콜포트소스(Source)
    HTTPTCP800.0.0.0/0
    HTTPSTCP4430.0.0.0/0
    SSHTCP220.0.0.0/0

  1. 저장 후 브라우저에서 다시 접속
    “Welcome to nginx!”

💬 배운 점

  • EC2 인스턴스가 어떤 보안그룹에 연결되어 있는지 항상 확인할 것.

  • 규칙을 잘못된 그룹(default 등)에 추가해봤자 아무 효과 없음.

  • 보안그룹 이름이 launch-wizard-1, launch-wizard-2 처럼 자동 생성될 수 있으니 의미 있는 이름으로 바꿔두면 헷갈리지 않는다.


5. 보안그룹 관리 팁

보안그룹 이름은 서비스별로 명확하게 바꿔주자!
예시:

이전 이름새 이름용도
launch-wizard-1webserver-sgReact + Nginx 서버용
launch-wizard-2springboot-api-sgSpring Boot API 서버용
launch-wizard-3rds-db-sgMySQL 접근 전용

이름만 봐도 역할이 드러나게 하면,
나중에 CI/CD, RDS 연결, HTTPS 설정할 때 훨씬 깔끔하게 관리됩니다.

결론

  • AWS EC2 생성 시 자동 연결되는 보안그룹은 대부분 launch-wizard-#

  • default는 내부 통신용이며 외부 접근 불가

  • 포트(80, 22, 443 등) 허용은 EC2가 실제로 연결된 보안그룹에 해야 함

  • 보안그룹을 잘못 설정해도 AWS는 별다른 에러를 주지 않기 때문에,
    접속 불가 문제 발생 시 항상 “인스턴스 → 보안 탭 → 실제 그룹 이름”부터 확인!

profile
Full-Stack Developer

0개의 댓글