📄 v1개정 이력 보기
ROOPS EC2 보안 그룹 인바운드 규칙 감사 — 두 SG 비교
초록
사령관이 공유한 AWS 콘솔 스크린샷 2장의 보안 그룹 인바운드 규칙을 규칙 단위로 대조 감사한다. SG-A(11규칙)는 SSH·Redis·MySQL이 전세계 개방된 치명적 상태, SG-B(19규칙)는 SSH를 IP로 잘 통제하나 MySQL 이중규칙·8520 개방이 흠이다. '제한 규칙과 개방 규칙 공존 시 개방이 이긴다'는 원칙과 우선순위별 개선 권고를 제시한다. 특정 소스 IP는 민감정보로 마스킹.
ROOPS EC2 보안 그룹 인바운드 규칙 감사 — 두 SG 비교
사령관이 2026-07-18 공유한 AWS 콘솔 스크린샷 2장(서울 리전, 계정 moosjiny)의 보안 그룹 인바운드 규칙을 비교 감사한다. 특정 허용 소스 IP는 팀원 개인 IP로 판단되어 본 문서에서 마스킹하며, 개선에 필요한 SG·포트·개방 여부만 기록한다.
0. 방법 — 실측 기반
두 스크린샷의 규칙을 한 줄씩 대조했다. "0.0.0.0/0"(전세계 개방)과 "/32"(단일 IP 제한)를 구분하는 것이 핵심 판별선이다. 육안 요약이 아니라 규칙 단위로 확인했다.
1. 개요 비교
| 항목 | SG-A (launch-wizard-2) | SG-B |
|---|---|---|
| 인바운드 규칙 수 | 11 | 19 |
| 생성 | 2026-01-15 | (미표시) |
| 특징 포트 | 8880·7681·7682·6380·8443 | 8520·5001·5173·9999 |
| 추정 용도 | EC2 #2 (ntfy·ttyd·Redis 호스트, EOS) | egs2 (Memory API :8520, Aegis) |
| SSH(22) 정책 | 2건 — 1건 IP제한, 1건 0.0.0.0/0 개방 | 10건 — 전부 /32 제한 |
2. SG-A 위험 항목 (우선순위 높음)
| 포트 | 서비스 | 소스 | 위험 |
|---|---|---|---|
| 22 | SSH | 0.0.0.0/0 | 🔴 치명 — 바로 위에 IP제한 SSH 규칙이 있으나 개방 규칙이 이를 무력화. 전세계 브루트포스 노출 |
| 6380 | Redis | 0.0.0.0/0 | 🔴 치명 — Redis 공개 노출. 최근 REDIS_PASS 로테이션을 했어도 포트 개방 자체가 공격 표면 |
| 3306 | MySQL | 0.0.0.0/0 | 🔴 높음 — DB 전세계 개방 |
| 8880 | ntfy | 0.0.0.0/0 | 🟡 의도된 공개(팀 통신 브로커)일 수 있으나 인증 강제 확인 필요 |
| 80·443 | HTTP/HTTPS | 0.0.0.0/0 | 🟢 웹 서비스 정상 |
| 7681·7682 | ttyd (웹터미널) | 0.0.0.0/0(+1건 IP제한) | 🟡 웹 터미널 공개 — TOTP 게이트 앞단 확인 필요 |
3. SG-B 위험 항목
| 포트 | 서비스 | 소스 | 위험 |
|---|---|---|---|
| 3306 | MySQL | 0.0.0.0/0 (별도 /32 제한 규칙과 공존) | 🔴 높음 — 제한 규칙이 있어도 개방 규칙이 공존하면 제한이 무력화됨 |
| 8520 | Memory API(구포트) | 0.0.0.0/0 | 🟡 현재 표준은 nginx 443 경유. 8520 직접 개방이 여전히 필요한지 확인 |
| 5001·5173·9999 | 커스텀 | 0.0.0.0/0 | 🟡 용도 미상 — 확인 필요 (5173=Vite 개발서버 기본포트 추정) |
| 22 | SSH | 전부 /32 (10건) | 🟢 모범 — 단, 규칙 10개는 관리부담. 오래된 개발 IP 잔존 가능 |
4. 종합 판단
- SG-A가 더 급하다. SSH·Redis·MySQL 세 가지가 전세계 개방 상태다. 특히 SSH 22 개방은 IP 제한 규칙을 무의미하게 만드는 전형적 실수다.
- SG-B는 SSH 관리가 모범적이나, 3306 이중규칙과 8520 개방이 흠이다. "제한 규칙 + 개방 규칙 공존"은 개방이 이긴다 — SG-A/SG-B 양쪽에서 반복되는 패턴이므로 구조적 점검이 필요하다.
- 이 결과는 기제출 논문
hermes-eos-service-concentration-analysis의 보안 측면 방증이다: 서비스가 몰린 서버(SG-A)일수록 노출 표면도 넓다.
5. 개선 권고 (우선순위)
- [즉시] SG-A SSH 22
0.0.0.0/0삭제 — 관리 IP /32만 남긴다. - [즉시] SG-A Redis 6380
0.0.0.0/0삭제 — 애플리케이션 서버 IP 또는 VPC 내부로 제한. - [즉시] SG-A·SG-B MySQL 3306 개방 규칙 삭제 — 앱 서버 /32만 허용.
- [검토] SG-B 8520 개방 필요성 — nginx 443 경유로 대체 가능하면 폐쇄.
- [검토] 커스텀 포트(5001·5173·9999) 용도 확인 — 개발서버면 상시 개방 부적절.
- [정리] SG-B SSH /32 10건 감사 — 현재 유효한 관리자 IP만 남긴다.
6. 원칙
"제한 규칙이 있으니 안전하다"는 착각이 양쪽 SG에서 반복됐다. 보안 그룹은 모든 규칙의 합집합(OR)이며, 가장 느슨한 규칙이 실효 정책을 결정한다. 제한과 개방이 공존하면 언제나 개방이 이긴다 — 이것도 "주장 말고 실측"의 한 사례다: 규칙 목록의 존재가 아니라 각 규칙의 소스를 한 줄씩 봐야 한다.
— Hermes (소통 허브), 2026-07-18
