# VConnect API Server Zero-Port, Zero-VPN SSH 기반 Proxmox VM 원격접속 플랫폼 ## 아키텍처 ``` [WPF Client] ←JWT→ [FastAPI Server] ←SSH→ [Proxmox VE] ↓ [PostgreSQL DB] ``` ## 핵심 기능 ### 1. 인증 시스템 - JWT 기반 토큰 인증 - 사용자 관리 (회원가입/로그인) - 역할 기반 접근 제어 (RBAC) ### 2. Proxmox 통합 - API Token 기반 Proxmox 연동 - VM 목록 조회 및 상태 모니터링 - VM 제어 (시작/종료/재시작) - QEMU Guest Agent IP 정보 수집 ### 3. SSH 터널링 및 자격증명 - **Zero-Trust Access**: 클라이언트는 SSH Private Key 없이 일회용 자격증명으로 접속 - **임시 자격증명 발급**: JWT 토큰 인증 후 1시간 유효한 임시 SSH 비밀번호 발급 - **PAM 연동**: SSH 게이트웨이에서 API를 통해 임시 비밀번호 검증 - **동적 포트 할당**: 세션별 독립적인 포트 포워딩 관리 ### 4. 감사 로그 - 접속 기록 (누가, 언제, 어떤 VM에) - VM 제어 이력 - 보안 이벤트 추적 ### 5. 자동 업데이트 - 클라이언트 버전 관리 및 업데이트 배포 지원 ## 기술 스택 - **FastAPI**: 고성능 Python 웹 프레임워크 - **PostgreSQL**: 관계형 데이터베이스 - **SQLAlchemy**: ORM (Async support) - **Alembic**: DB 마이그레이션 관리 - **JWT (Jose)**: 토큰 기반 인증 - **Paramiko / AsyncSSH**: SSH 터널 및 연결 관리 - **Uvicorn**: ASGI 웹 서버 ## 프로젝트 구조 ``` vconnect-api/ ├── app/ │ ├── main.py # FastAPI 앱 진입점 │ ├── config.py # 설정 관리 (.env 로드) │ ├── database.py # DB 세션 및 엔진 │ ├── models/ # SQLAlchemy 모델 (User, VM, AuditLog) │ ├── schemas/ # Pydantic 스키마 (Request/Response) │ ├── api/ # API 라우터 │ │ ├── auth.py # 인증 (로그인/가입) │ │ ├── vms.py # VM 제어 및 조회 │ │ ├── tunnel.py # SSH 터널 관리 │ │ ├── ssh_credentials.py # 임시 SSH 자격증명 발급/검증 │ │ └── admin.py # 관리자 기능 (사용자 관리, 로그) │ ├── services/ # 비즈니스 로직 │ └── utils/ # 유틸리티 (JWT, Security) ├── alembic/ # DB 마이그레이션 스크립트 ├── requirements.txt # 의존성 패키지 목록 ├── docker-compose.yml # Docker 배포 설정 ├── Dockerfile # Docker 빌드 설정 └── README.md # 문서 ``` ## 환경 변수 (.env) ```env # Database DATABASE_URL=postgresql://user:password@localhost/vconnect # JWT JWT_SECRET_KEY=your-secret-key-change-it JWT_ALGORITHM=HS256 JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30 # Proxmox API PROXMOX_HOST=https://pve.example.com:8006 PROXMOX_API_TOKEN=PVEAPIToken=root@pam!vconnect=xxx... # SSH Gateway (Zero-Port) SSH_HOST=ssh.example.com # 클라이언트가 접속할 외부 주소 SSH_PORT=22 # 외부 포트 SSH_INTERNAL_HOST=127.0.0.1 # 내부 터널링 바인딩 주소 ``` ## 설치 및 실행 ```bash # 가상환경 생성 python -m venv venv # Windows venv\Scripts\activate # Linux/Mac source venv/bin/activate # 의존성 설치 pip install -r requirements.txt # 환경 변수 설정 cp .env.example .env # .env 파일 편집... # DB 마이그레이션 (테이블 생성) alembic upgrade head # 서버 실행 (개발 모드) uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` ## API 엔드포인트 요약 ### 인증 (`/api/v1/auth`) - `POST /register` - 회원가입 - `POST /login` - 로그인 (AccessToken 발급) - `GET /me` - 현재 사용자 정보 확인 ### VM 관리 (`/api/v1/vms`) - `GET /my` - 사용자별 할당된 VM 목록 - `POST /{vm_id}/start` - VM 켜기 - `POST /{vm_id}/stop` - VM 끄기 ### SSH 자격증명 (`/api/v1/ssh`) - `POST /credentials` - [클라이언트용] 1시간 유효한 임시 SSH 비밀번호 발급 - `POST /verify` - [게이트웨이용] 임시 비밀번호 유효성 검증 ### 터널 관리 (`/api/v1/tunnel`) - `POST /create` - SSH 터널 세션 생성 - `DELETE /{tunnel_id}` - 터널 세션 종료 ### 관리자 (`/api/v1/admin`) - `GET /users` - 전체 사용자 관리 - `GET /audit-logs` - 전체 감사 로그 조회 - `GET /stats` - 시스템 통계 ## 개발 로드맵 상태 - [x] 프로젝트 구조 및 FastAPI 기본 설정 - [x] PostgreSQL 연동 및 Alembic 마이그레이션 구성 - [x] JWT 인증 시스템 (Login/Refresh) - [x] Proxmox API 연동 (VM 상태/제어) - [x] SSH 터널링 매니저 구현 - [x] **Zero-Trust 임시 자격증명 시스템** (SSH Password Manager) - [x] 감사 로그 (Audit Log) - [x] Docker 기반 배포 환경 (Dockerfile, Confirm) - [ ] 클라이언트 자동 업데이트 배포 시스템 고도화 - [ ] 유닛 테스트 작성 (Pytest)