v0.0.26 | README.md 개선
All checks were successful
Build And Test / build-and-push (push) Successful in 2m6s
All checks were successful
Build And Test / build-and-push (push) Successful in 2m6s
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
150
README.md
150
README.md
@ -1,33 +1,143 @@
|
|||||||
# msa-django-auth
|
# 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/<id>/` | 사용자 관리 |
|
||||||
|
|
||||||
|
### 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/<id>/` | 프로젝트 조회/수정 |
|
||||||
|
| POST | `/api/auth/nhn-cloud/projects/<id>/activate/` | 프로젝트 활성화 |
|
||||||
|
|
||||||
|
### KVM 서버
|
||||||
|
|
||||||
|
| Method | Endpoint | 설명 |
|
||||||
|
|--------|----------|------|
|
||||||
|
| GET/POST | `/api/auth/kvm-servers/` | 서버 목록/등록 |
|
||||||
|
| GET/PUT | `/api/auth/kvm-servers/<id>/` | 서버 조회/수정 |
|
||||||
|
| POST | `/api/auth/kvm-servers/<id>/activate/` | 서버 활성화 |
|
||||||
|
| POST | `/api/auth/kvm-servers/<id>/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
|
```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
|
python3 manage.py runserver 0.0.0.0:8000
|
||||||
```
|
```
|
||||||
|
|
||||||
### auth
|
### 운영 서버
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
gunicorn auth_prj.wsgi:application --bind 0.0.0.0:8000 --workers 3
|
gunicorn auth_prj.wsgi:application --bind 0.0.0.0:8000 --workers 3
|
||||||
```
|
```
|
||||||
|
|
||||||
## 2025-12-05 TRACE ENDPOINT 변경 ( v0.0.15 )
|
### Docker
|
||||||
* 변경전 static
|
|
||||||
* 변경후 변수 처리
|
|
||||||
* TRACE_ENDPOINT='test'
|
|
||||||
* TRACE_SERVICE_NAME=''
|
|
||||||
|
|
||||||
## 2025-09-29 jaeger Endpoint 변경 ( v0.0.14 )
|
```bash
|
||||||
* 변경전: endpoint="http://jaeger-collector.istio-system:4317",
|
docker build -t msa-django-auth .
|
||||||
* 변경후: endpoint="http://jaeger-collector.observability.svc.cluster.local:4317",
|
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
|
### CustomUser
|
||||||
|
|
||||||
## 2025-09-28 RS256변경 적용 ( v0.0.12 )
|
- email, name (고유)
|
||||||
* 비대칭키 방식 → Private Key로 서명, Public Key로 검증.
|
- grade: admin, manager, user
|
||||||
* 토큰 발급 서버는 Private Key만 보관.
|
- SSH 키 필드 (암호화)
|
||||||
* 검증 서버들은 Public Key만 있으면 됨 → 여러 서비스/마이크로서비스 환경에 적합.
|
- NHN Cloud 자격증명 (암호화)
|
||||||
* Istio, Keycloak, Auth0 등 대부분의 IDP/게이트웨이가 RS256 + JWKS(JSON Web Key Set) 방식 권장.
|
|
||||||
|
### NHNCloudProject
|
||||||
|
|
||||||
|
- 사용자별 멀티 프로젝트
|
||||||
|
- tenant_id, username, 암호화된 password
|
||||||
|
- dns_appkey
|
||||||
|
|
||||||
|
### KVMServer
|
||||||
|
|
||||||
|
- 사용자별 서버 관리
|
||||||
|
- host, port, username
|
||||||
|
- SSH 키 (암호화), Libvirt URI
|
||||||
|
|||||||
Reference in New Issue
Block a user