피드로 돌아가기
Approval-driven server ops: how I let contractors restart nginx without ever giving them SSH
Dev.toDev.to
Security

SSH 제거 및 mTLS 기반 Go Agent 도입으로 서버 접근 제어 혁신

Approval-driven server ops: how I let contractors restart nginx without ever giving them SSH

Boris Kl2026년 6월 26일8advanced

Context

외부 계약자에게 root SSH 권한을 부여함으로써 발생하는 접근 권한 관리의 파편화와 보안 취약점 발생. 특히 긴급 장애 대응 시 SSH 접속 과정에서 발생하는 90분의 운영 마찰과 권한 회수 누락으로 인한 보안 리스크 상존.

Technical Solution

  • Shell 접근을 완전히 배제하고 mTLS HTTP 기반의 Go Agent를 통한 제한적 Operation 수행 구조 설계
  • Telegram Bot을 제어 평면(Control Plane)으로 활용하여 ActionID, Nonce, Timestamp, TOTP 기반의 엄격한 APPROVE 문법 검증
  • HMAC-SHA256 기반의 Capability Manifest를 도입하여 Agent가 실행 가능한 작업 목록을 배포 시점에 서명 및 고정
  • SHA-256 Hash-chain 구조의 append-only JSONL 로그를 구축하여 사후 변조가 불가능한 감사 추적성 확보
  • SQLite WAL 모드를 통한 상태 관리와 Fernet 암호화를 이용한 Multi-tenant Cloudflare 자격 증명 분리 저장

- 서버 접근 제어 시 sudoers 설정보다 API 기반의 Capability Manifest 도입 검토 - 감사 로그의 신뢰성 확보를 위해 각 레코드에 이전 해시를 포함하는 Hash-chain 구조 적용 - 긴급 조치 명령 시 Replay Attack 방지를 위한 Atomic Nonce Store 및 TTL 검증 로직 구현 - 읽기 전용 진단 모듈과 쓰기 전용 실행 모듈의 인터페이스를 분리하여 최소 권한 원칙 준수

원문 읽기