제로 트러스트
Alpacon의 제로 트러스트 보안 모델과 기존 SSH 방식의 차이점을 설명합니다.
제로 트러스트란?
제로 트러스트는 “신뢰하지 말고 항상 검증하라”는 원칙에 기반한 보안 모델입니다. 네트워크 내부/외부를 구분하지 않고, 모든 접근을 검증합니다.
전통적인 SSH 방식의 한계
보안 위험
인터넷에 노출된 포트 22
- SSH 데몬에 대한 지속적인 봇 스캔 (하루 수천 번)
- 무차별 대입 공격 시도
- SSH 데몬의 제로데이 취약점 노출
- fail2ban과 방화벽을 사용해도 공격 표면이 존재
SSH 키의 전체 서버 접근
- SSH 키는 “전부 아니면 전무” 방식
- 읽기 전용 작업도 전체 접근 권한 필요
- 키 유출 시 공격자가 서버 완전 제어
- 특정 명령어만 제한할 수 없음
운영상의 문제
키 순환의 어려움
- 10대 서버 = 10개의 다른 키 관리
- 각 저장소마다 별도 시크릿 복사본 필요
- 키 순환 시 모든 서버와 저장소 업데이트 필요
- 중앙화된 관리 뷰 없음
감사 추적 부재
- 로그가 여러 서버에 분산
- SSH 로그는 IP 주소만 표시 (어떤 워크플로우인지 알 수 없음)
- “지난 화요일 오후 3시에 누가 배포했는지” 추적 어려움
Alpacon의 제로 트러스트 구현
API 토큰 기반 인증
SSH 키 대신 API 토큰을 사용하여 세밀한 접근 제어를 구현합니다.
명령어 ACL (Access Control Lists)
- 토큰별로 실행 가능한 명령어 명시적 지정
- 연산자(&&, ||, |, >, ;) 차단으로 명령어 체이닝 방지
- 토큰 유출 시에도 허용된 명령어만 실행 가능
# 예시: 특정 명령어만 허용하는 토큰
allowed_commands:
- "pm2 restart app"
- "systemctl status nginx"
- "git pull"
역방향 연결 (Zero Exposed Ports)
서버가 외부에서 접근 가능한 포트를 열지 않습니다.
- 서버가 Alpacon 워크스페이스로 아웃바운드 연결 시작
- 서버에 인바운드 포트 없음
- 인터넷에서 서버 발견 불가능
제거되는 위협:
- SSH 포트 스캐닝
- 무차별 대입 공격
- 직접 연결 시도
중앙화된 감사 추적
모든 접근과 명령 실행이 자동으로 기록됩니다.
- 실행 주체 (사용자/토큰) 및 대상 서버
- 실행된 명령어와 전체 출력
- 파일 전송 크기와 타임스탬프
- 워크스페이스에서 중앙 관리
간편한 토큰 관리
SSH 키 순환 (기존)
- 각 서버별 새 키 쌍 생성
- 모든 서버의 authorized_keys 업데이트
- 모든 저장소의 GitHub Secrets 업데이트
- 실패 디버깅
Alpacon 토큰 순환
- 워크스페이스에서 토큰 업데이트
- GitHub Secrets 한 번 업데이트
- 완료
보안 이점 요약
| 측면 | SSH | Alpacon (제로 트러스트) |
|---|---|---|
| 포트 노출 | 22번 포트 필수 | 포트 노출 없음 |
| 접근 제어 | 전체 서버 접근 | 명령어 수준 제어 |
| 키/토큰 관리 | 서버당 개별 키 | 워크스페이스 수준 토큰 |
| 감사 로그 | 분산된 로그 | 중앙화된 추적 |
| 순환 복잡도 | O(서버 × 저장소) | O(1) |
| 유출 시 영향 | 전체 서버 제어 | 허용된 명령어만 |