# Hướng Dẫn Migration: Auth Service → IAM Service Tài liệu này hướng dẫn cách migrate từ `auth-service` sang `iam-service`. ## Tổng Quan IAM Service là phiên bản mở rộng của Auth Service với các tính năng bổ sung về Identity Management, Access Management, và Governance & Compliance. Tất cả các API endpoints của Auth Service vẫn được giữ nguyên để đảm bảo backward compatibility. ### Migration Process Flow ```mermaid graph TD Start([ Bắt đầu Migration]) --> Backup[ Step 1: Backup
Database & Code] Backup --> Update[ Step 2: Update Codebase
Package refs, Env vars] Update --> Migrate[ Step 3: Run Prisma Migration
Add IAM models] Migrate --> Deploy{ Deployment Strategy} Deploy -->|Khuyến nghị| BlueGreen[ Blue-Green Deployment] Deploy -->|Dễ dàng hơn| InPlace[ In-Place Migration] BlueGreen --> DeployNew[Deploy IAM Service mới] DeployNew --> Verify1[ Verify hoạt động] Verify1 --> Switch[ Switch traffic] Switch --> Monitor1[ Monitor] Monitor1 --> Success{Thành công?} InPlace --> DeployBoth[Deploy cả 2 service] DeployBoth --> GradualRoute[ Gradually route traffic] GradualRoute --> Monitor2[ Monitor] Monitor2 --> Success Success -->|Yes| Cleanup[ Decommission Auth Service] Success -->|No| Rollback[⏮ Rollback] Cleanup --> Complete([ Migration Hoàn Thành]) Rollback --> End([ Migration Failed]) style Start fill:#1a472a,stroke:#2d8659,stroke-width:3px,color:#fff style Complete fill:#1a472a,stroke:#2d8659,stroke-width:3px,color:#fff style End fill:#4a1a1a,stroke:#8b2e2e,stroke-width:3px,color:#fff style Backup fill:#1e3a5f,stroke:#2e5984,color:#fff style Update fill:#1e3a5f,stroke:#2e5984,color:#fff style Migrate fill:#1e3a5f,stroke:#2e5984,color:#fff style Deploy fill:#4a2c5f,stroke:#6b4391,color:#fff style BlueGreen fill:#2d5016,stroke:#4a7c2c,color:#fff style InPlace fill:#5f4a1e,stroke:#8b7030,color:#fff style DeployNew fill:#1e3a5f,stroke:#2e5984,color:#fff style Verify1 fill:#1e3a5f,stroke:#2e5984,color:#fff style Switch fill:#1e3a5f,stroke:#2e5984,color:#fff style Monitor1 fill:#1e3a5f,stroke:#2e5984,color:#fff style DeployBoth fill:#1e3a5f,stroke:#2e5984,color:#fff style GradualRoute fill:#1e3a5f,stroke:#2e5984,color:#fff style Monitor2 fill:#1e3a5f,stroke:#2e5984,color:#fff style Success fill:#4a2c5f,stroke:#6b4391,color:#fff style Cleanup fill:#1e3a5f,stroke:#2e5984,color:#fff style Rollback fill:#4a1a1a,stroke:#8b2e2e,color:#fff ``` ### Architecture Evolution ```mermaid graph TB subgraph Before["Auth Service (Trước)"] AuthAPI[ Authentication APIs
/api/v1/auth/*] RBACAPI[ RBAC APIs
/api/v1/rbac/*] MFAAPI[ MFA APIs
/api/v1/mfa/*] SessionAPI[ Session APIs
/api/v1/sessions/*] OIDCAPI[ OIDC APIs
/api/v1/oidc/*] end subgraph After["IAM Service (Sau)"] AuthAPI2[ Authentication APIs
/api/v1/auth/*
Giữ nguyên] RBACAPI2[ RBAC APIs
/api/v1/rbac/*
Giữ nguyên] MFAAPI2[ MFA APIs
/api/v1/mfa/*
Giữ nguyên] SessionAPI2[ Session APIs
/api/v1/sessions/*
Giữ nguyên] OIDCAPI2[ OIDC APIs
/api/v1/oidc/*
Giữ nguyên] IdentityAPI[ Identity Management
/api/v1/identity/*
MỚI] AccessAPI[ Access Management
/api/v1/access/*
MỚI] GovernanceAPI[ Governance
/api/v1/governance/*
MỚI] end Before -.->|Backward Compatible
Migration| After style Before fill:#2d2d2d,stroke:#4a4a4a,color:#fff style After fill:#1a472a,stroke:#2d8659,color:#fff style AuthAPI fill:#1e3a5f,stroke:#2e5984,color:#fff style RBACAPI fill:#1e3a5f,stroke:#2e5984,color:#fff style MFAAPI fill:#1e3a5f,stroke:#2e5984,color:#fff style SessionAPI fill:#1e3a5f,stroke:#2e5984,color:#fff style OIDCAPI fill:#1e3a5f,stroke:#2e5984,color:#fff style AuthAPI2 fill:#2d5016,stroke:#4a7c2c,color:#fff style RBACAPI2 fill:#2d5016,stroke:#4a7c2c,color:#fff style MFAAPI2 fill:#2d5016,stroke:#4a7c2c,color:#fff style SessionAPI2 fill:#2d5016,stroke:#4a7c2c,color:#fff style OIDCAPI2 fill:#2d5016,stroke:#4a7c2c,color:#fff style IdentityAPI fill:#4a2c5f,stroke:#6b4391,color:#fff style AccessAPI fill:#4a2c5f,stroke:#6b4391,color:#fff style GovernanceAPI fill:#4a2c5f,stroke:#6b4391,color:#fff ``` ## Backward Compatibility **Tất cả các endpoints hiện tại vẫn hoạt động bình thường:** - `/api/v1/auth/*` - Authentication endpoints - `/api/v1/rbac/*` - RBAC endpoints - `/api/v1/mfa/*` - MFA endpoints - `/api/v1/sessions/*` - Session management endpoints - `/api/v1/oidc/*` - OIDC endpoints Không có breaking changes. Các clients hiện tại có thể tiếp tục sử dụng các endpoints này mà không cần thay đổi. ## Các Thay Đổi ### 1. Service Name - **Cũ**: `auth-service` - **Mới**: `iam-service` ### 2. Package Name - **Cũ**: `@goodgo/auth-service` - **Mới**: `@goodgo/iam-service` ### 3. Database Schema Database schema được mở rộng với các models mới nhưng **không xóa hoặc thay đổi** các models hiện có: **Models mới được thêm:** - `Organization` - Quản lý tổ chức - `Group` - Quản lý nhóm - `GroupMember` - Thành viên nhóm - `GroupPermission` - Quyền nhóm - `UserProfile` - Profile mở rộng - `IdentityVerification` - Xác thực danh tính - `AccessRequest` - Yêu cầu truy cập - `AccessReview` - Đánh giá truy cập - `ComplianceReport` - Báo cáo tuân thủ - `PolicyTemplate` - Template policy - `RiskScore` - Điểm rủi ro **User model được mở rộng:** - Thêm field `organizationId` (optional) - Thêm các relations mới (optional) ### 4. API Endpoints Mới #### Identity Management - `/api/v1/identity/users/*` - User lifecycle management - `/api/v1/identity/users/:id/profile` - Profile management - `/api/v1/identity/verification/*` - Identity verification - `/api/v1/identity/organizations/*` - Organization management - `/api/v1/identity/groups/*` - Group management #### Access Management - `/api/v1/access/requests/*` - Access requests - `/api/v1/access/reviews/*` - Access reviews - `/api/v1/access/analytics/*` - Access analytics #### Governance - `/api/v1/governance/compliance/*` - Compliance reports - `/api/v1/governance/policies/*` - Policy governance - `/api/v1/governance/risk/*` - Risk management - `/api/v1/governance/reports/*` - Reporting dashboard ### 5. Environment Variables Một số biến môi trường mới có thể được thêm trong tương lai cho các tính năng IAM nâng cao (email service, SMS service, file storage), nhưng không ảnh hưởng đến các biến hiện tại. ### 6. Deployment Configuration **Docker Compose:** - Service name: `auth-service` → `iam-service` - Container name: `auth-service-local` → `iam-service-local` **Kubernetes:** - Deployment name: `auth-service` → `iam-service` - Service name: `auth-service` → `iam-service` - ConfigMap: `auth-service-config` → `iam-service-config` - Secrets: `auth-service-secrets` → `iam-service-secrets` ## Migration Steps ### Step 1: Backup (Quan Trọng!) ```bash # Backup database pg_dump $DATABASE_URL > auth-service-backup.sql # Backup code (nếu cần rollback) cp -r services/auth-service services/auth-service.backup ``` ### Step 2: Update Codebase 1. **Update package references:** ```bash # Tìm và thay thế trong code find . -type f -name "*.ts" -o -name "*.js" -o -name "*.json" | xargs sed -i '' 's/@goodgo\/auth-service/@goodgo\/iam-service/g' ``` 2. **Update environment variables:** - Update `SERVICE_NAME=iam-service` trong tất cả env files - Update Docker Compose và Kubernetes configs 3. **Run Prisma migration:** ```bash cd services/iam-service pnpm prisma generate pnpm prisma migrate dev --name add_iam_models ``` ### Step 3: Deployment #### Deployment Strategy Comparison ```mermaid graph LR subgraph BlueGreen[" Blue-Green Deployment (Khuyến nghị)"] BG1[Ưu điểm:
Zero downtime
Easy rollback
Safe testing] BG2[Nhược điểm:
Cần thêm resources
Phức tạp hơn] end subgraph InPlace[" In-Place Migration"] IP1[Ưu điểm:
Simple setup
Less resources
Gradual migration] IP2[Nhược điểm:
Potential downtime
Harder rollback
Higher risk] end Decision{Chọn Strategy} -->|Production| BlueGreen Decision -->|Staging/Dev| InPlace style BlueGreen fill:#1a472a,stroke:#2d8659,color:#fff style InPlace fill:#5f4a1e,stroke:#8b7030,color:#fff style BG1 fill:#2d5016,stroke:#4a7c2c,color:#fff style BG2 fill:#4a1a1a,stroke:#8b2e2e,color:#fff style IP1 fill:#2d5016,stroke:#4a7c2c,color:#fff style IP2 fill:#4a1a1a,stroke:#8b2e2e,color:#fff style Decision fill:#4a2c5f,stroke:#6b4391,color:#fff ``` #### Option A: Blue-Green Deployment (Khuyến Nghị) 1. **Deploy iam-service mới:** ```bash kubectl apply -f deployments/staging/kubernetes/iam-service.yaml ``` 2. **Verify iam-service hoạt động tốt** 3. **Switch traffic:** - Update Ingress để point đến `iam-service` - Hoặc dùng weighted routing để gradually migrate 4. **Monitor và verify** 5. **Decommission auth-service cũ sau khi verify** #### Option B: In-Place Migration 1. **Deploy cả `auth-service` và `iam-service` cùng lúc** 2. **Gradually route traffic từ auth-service sang iam-service** 3. **Monitor performance và errors** 4. **Sau khi verify mọi thứ hoạt động tốt, có thể deprecate `auth-service`** ### Step 4: Rollback (Nếu Cần) ```bash # Restore database psql $DATABASE_URL < auth-service-backup.sql # Switch back to auth-service in docker-compose # hoặc kubectl rollout undo deployment/auth-service ``` ## Verification Checklist - [ ] All existing endpoints still work - [ ] Database migration successful - [ ] New IAM endpoints working - [ ] No breaking changes in responses - [ ] Performance metrics acceptable - [ ] Error rates normal - [ ] All clients can connect successfully ## Troubleshooting ### Database Migration Issues ```bash # Check migration status pnpm prisma migrate status # Reset migration (DEV ONLY!) pnpm prisma migrate reset ``` ### Service Connection Issues ```bash # Check service health curl http://localhost:5001/health # Check logs docker logs iam-service-local # hoặc kubectl logs deployment/iam-service ``` ## Support Nếu gặp vấn đề trong quá trình migration, vui lòng: 1. Check logs và error messages 2. Review migration guide này 3. Contact team lead hoặc DevOps team ## Quick Tips ### Migration Best Practices **DO:** - Backup database trước khi migrate - Test migration trên staging trước - Monitor metrics trong quá trình migration - Sử dụng Blue-Green deployment cho production - Prepare rollback plan trước khi deploy - Document tất cả các thay đổi **DON'T:** - Skip backup step - Migrate trực tiếp trên production - Ignore error logs - Deploy vào giờ peak traffic - Quên update environment variables - Rush migration process ### Common Issues & Solutions | Vấn đề | Nguyên nhân | Giải pháp | |--------|-------------|-----------| | Migration failed | Database connection | Check `DATABASE_URL` trong `.env` | | Service won't start | Missing env vars | Verify tất cả env vars được set | | Slow performance | Database indexes | Run Prisma migrations đầy đủ | | Connection timeout | Network issues | Check firewall & security groups | | New endpoints 404 | Routing config | Update Traefik/Ingress config | ### Troubleshooting Quick Reference ```bash # Check migration status pnpm prisma migrate status # View service logs docker logs iam-service-local -f kubectl logs deployment/iam-service -f --tail=100 # Test health endpoint curl http://localhost:5001/health curl http://localhost:5001/health/ready # Database connection test psql $DATABASE_URL -c "SELECT 1" # Rollback migration (CAREFUL!) pnpm prisma migrate reset # DEV ONLY kubectl rollout undo deployment/iam-service ``` ### Color Palette Reference **Diagram Colors:** - **Success/Recommended**: `#1a472a` (Dark green) - **Process/Info**: `#1e3a5f` (Dark blue) - **Decision/Important**: `#4a2c5f` (Dark purple) - **Warning/Alternative**: `#5f4a1e` (Dark yellow) - **Error/Rollback**: `#4a1a1a` (Dark red) ### Important Reminders - **Always backup** trước khi migrate - **Test thoroughly** trên staging - **Monitor closely** sau khi deploy - **Prepare rollback** plan - **Document changes** cho team - ⏰ **Schedule wisely** - tránh giờ peak - **Communicate** với team và stakeholders --- **Last Updated**: 2024-12-30