diff --git a/README.md b/README.md index 376b03a..72ebc50 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,143 @@ # msa-django-auth -## dev env -개발환경 테스트 실행 +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 ``` -### auth +### 운영 서버 ```bash gunicorn auth_prj.wsgi:application --bind 0.0.0.0:8000 --workers 3 ``` -## 2025-12-05 TRACE ENDPOINT 변경 ( v0.0.15 ) -* 변경전 static -* 변경후 변수 처리 - * TRACE_ENDPOINT='test' - * TRACE_SERVICE_NAME='' +### Docker -## 2025-09-29 jaeger Endpoint 변경 ( v0.0.14 ) -* 변경전: endpoint="http://jaeger-collector.istio-system:4317", -* 변경후: endpoint="http://jaeger-collector.observability.svc.cluster.local:4317", +```bash +docker build -t msa-django-auth . +docker run -p 8000:8000 --env-file .env.prd msa-django-auth +``` -## 2025-09-28 RS256변경 적용 ( v0.0.13 ) -* Docker Build base image 변경. - * python:3.10-slim-buster > python:3.10-slim-bullseye - -## 2025-09-28 RS256변경 적용 ( v0.0.12 ) -* 비대칭키 방식 → Private Key로 서명, Public Key로 검증. -* 토큰 발급 서버는 Private Key만 보관. -* 검증 서버들은 Public Key만 있으면 됨 → 여러 서비스/마이크로서비스 환경에 적합. -* Istio, Keycloak, Auth0 등 대부분의 IDP/게이트웨이가 RS256 + JWKS(JSON Web Key Set) 방식 권장. \ No newline at end of file +## 데이터 모델 + +### CustomUser + +- email, name (고유) +- grade: admin, manager, user +- SSH 키 필드 (암호화) +- NHN Cloud 자격증명 (암호화) + +### NHNCloudProject + +- 사용자별 멀티 프로젝트 +- tenant_id, username, 암호화된 password +- dns_appkey + +### KVMServer + +- 사용자별 서버 관리 +- host, port, username +- SSH 키 (암호화), Libvirt URI diff --git a/version b/version index b484bb0..9ff51a9 100644 --- a/version +++ b/version @@ -1 +1 @@ -v0.0.25 \ No newline at end of file +v0.0.26 \ No newline at end of file