# msa-django-auth MSA 아키텍처의 중앙 인증 및 자격증명 관리 서비스입니다. ## 기술 스택 | 분류 | 기술 | |------|------| | Framework | Django 4.2.14 | | API | Django REST Framework 3.16.0 | | Auth | SimpleJWT 5.5.0 (RS256/HS256) | | Database | MySQL (mysqlclient 2.2.7) | | Docs | drf-yasg 1.21.10 (Swagger/ReDoc) | | Tracing | OpenTelemetry 1.34.0 | | Server | Gunicorn 20.1.0 | ## 주요 기능 - **JWT 인증**: RS256 비대칭 암호화, 토큰 발급/갱신/검증 - **JWKS 엔드포인트**: Istio 연동을 위한 공개키 제공 - **사용자 관리**: 회원가입, 프로필 관리, 등급 관리 - **SSH 키 관리**: Fernet 암호화 저장, 복호화 조회 - **NHN Cloud 자격증명**: 멀티 프로젝트 지원, 암호화 저장 - **KVM 서버 관리**: 서버 등록, SSH 키 관리 ## API 엔드포인트 ### 인증 | Method | Endpoint | 설명 | |--------|----------|------| | POST | `/api/auth/register/` | 회원가입 | | POST | `/api/auth/login/` | 로그인 (JWT 발급) | | POST | `/api/auth/token/refresh/` | 토큰 갱신 | | POST | `/api/auth/verify/` | 토큰 검증 | | GET | `/.well-known/jwks.json` | JWKS 공개키 | ### 사용자 | Method | Endpoint | 설명 | |--------|----------|------| | GET/PUT | `/api/auth/me/` | 내 정보 조회/수정 | | GET | `/api/auth/users/` | 사용자 목록 (관리자) | | GET/PUT/DELETE | `/api/auth/users//` | 사용자 관리 | ### SSH 키 | Method | Endpoint | 설명 | |--------|----------|------| | POST/DELETE | `/api/auth/ssh-key/` | SSH 키 업로드/삭제 | | GET | `/api/auth/ssh-key/info/` | SSH 키 메타정보 | | GET | `/api/auth/ssh-key/view/` | SSH 키 조회 (복호화) | ### NHN Cloud | Method | Endpoint | 설명 | |--------|----------|------| | GET/POST | `/api/auth/nhn-cloud/projects/` | 프로젝트 목록/생성 | | GET/PUT | `/api/auth/nhn-cloud/projects//` | 프로젝트 조회/수정 | | POST | `/api/auth/nhn-cloud/projects//activate/` | 프로젝트 활성화 | ### KVM 서버 | Method | Endpoint | 설명 | |--------|----------|------| | GET/POST | `/api/auth/kvm-servers/` | 서버 목록/등록 | | GET/PUT | `/api/auth/kvm-servers//` | 서버 조회/수정 | | POST | `/api/auth/kvm-servers//activate/` | 서버 활성화 | | POST | `/api/auth/kvm-servers//ssh-key/upload/` | SSH 키 업로드 | ### API 문서 - Swagger UI: `/swagger/` - ReDoc: `/redoc/` ## 환경 변수 ```env # Django DEBUG=1 SECRET_KEY=your-secret-key # Database SQL_ENGINE=django.db.backends.mysql SQL_HOST=localhost SQL_USER=user SQL_PASSWORD=password SQL_DATABASE=msa-auth SQL_PORT=3306 # JWT (RS256 모드) ISTIO_JWT=1 # Tracing TRACE_ENDPOINT=jaeger-collector:4317 TRACE_SERVICE_NAME=msa-django-auth ``` ## 실행 방법 ### 개발 서버 ```bash python3 -m venv venv source venv/bin/activate pip install -r requirements.txt python3 manage.py migrate python3 manage.py runserver 0.0.0.0:8000 ``` ### 운영 서버 ```bash gunicorn auth_prj.wsgi:application --bind 0.0.0.0:8000 --workers 3 ``` ### Docker ```bash docker build -t msa-django-auth . docker run -p 8000:8000 --env-file .env.prd msa-django-auth ``` ## 데이터 모델 ### CustomUser - email, name (고유) - grade: admin, manager, user - SSH 키 필드 (암호화) - NHN Cloud 자격증명 (암호화) ### NHNCloudProject - 사용자별 멀티 프로젝트 - tenant_id, username, 암호화된 password - dns_appkey ### KVMServer - 사용자별 서버 관리 - host, port, username - SSH 키 (암호화), Libvirt URI