📌 개요
초기 배포 프로세스에서는 GitHub Actions + Self-hosted Runner 활용을 계획했으나, 보안 시나리오 분석 과정에서 구조적 취약점을 반복적으로 발견하며 설계를 여러 차례 재수정함.
🔄 설계 변천 과정
1단계 : Self-hosted Runner 방식 (초기 계획 → 철거)
구조
커밋 → GitHub Actions(Self-hosted Runner) → 배포
문제 발견
- 중간 관리자의 배포 승인/거부 기능을 Discord 봇으로 구현하려 했으나, Self-hosted Runner 구조로는 이를 구현하기 어렵다는 것을 확인
- → Self-hosted Runner 철거, 전용 배포 서버 직접 제작으로 방향 전환
봇과 배포 서버를 분리한 이유
- 보안 : Discord 계정 탈취 시, 배포 서버는 Docker 소켓 접근 권한을 가지므로 호스트 OS까지 위협받을 수 있음. 봇과 배포 서버를 분리하고 Docker Compose 내부망으로만 연결하여, 탈취되더라도 배포 요청 범위로만 피해를 한정
- 확장성 : Discord 봇은 임시방편이며, 추후 대시보드로 교체 예정. 분리 구조로 배포 서비스 교체를 용이하게 설계
2단계 : Webhook 방식 (검토 → 폐기)
구조
GitHub → Webhook → Discord 봇 → 배포 서버
배포 워크플로우를 GitHub에 올리지 않기 위해 Webhook 방식 검토
- GitHub가 함락될 경우, 워크플로우 수정으로 C(Discord 봇)를 우회하여 배포 서버에 직접 접근 가능한 취약점 발견
문제 발견