- Updated Mermaid diagrams in the deployment and development guides for better visual representation and consistency. - Improved formatting and clarity in the Kubernetes local deployment and IAM migration guides, including detailed workflows and troubleshooting sections. - Enhanced the Vietnamese documentation to align with the English version, ensuring consistency across guides. - Added quick tips and common issues sections to facilitate user navigation and understanding.
392 lines
11 KiB
Markdown
392 lines
11 KiB
Markdown
# Migration Guide: Auth Service → IAM Service
|
|
|
|
This document guides you through migrating from `auth-service` to `iam-service`.
|
|
|
|
## Overview
|
|
|
|
IAM Service is an extended version of Auth Service with additional features for Identity Management, Access Management, and Governance & Compliance. All Auth Service API endpoints remain unchanged to ensure backward compatibility.
|
|
|
|
## Migration Workflow
|
|
|
|
```mermaid
|
|
graph LR
|
|
Start([Start Migration]) --> Backup[ Backup]
|
|
Backup --> DBMigrate[ Database Migration]
|
|
DBMigrate --> UpdateDeps[ Update Dependencies]
|
|
UpdateDeps --> Deploy[ Deploy]
|
|
Deploy --> Verify[ Verify]
|
|
Verify --> Decision{All Tests Pass?}
|
|
Decision -->|Yes| Rollout[ Gradual Rollout]
|
|
Decision -->|No| Rollback[⏮ Rollback]
|
|
Rollback --> Debug[ Debug Issues]
|
|
Debug --> DBMigrate
|
|
Rollout --> Monitor[ Monitor]
|
|
Monitor --> Complete([ Complete])
|
|
|
|
style Start fill:#2d4263,stroke:#c69b7b,stroke-width:2px,color:#f5f5f5
|
|
style Backup fill:#191e29,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style DBMigrate fill:#191e29,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style UpdateDeps fill:#191e29,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style Deploy fill:#2d4263,stroke:#87a2a7,stroke-width:2px,color:#f5f5f5
|
|
style Verify fill:#2d4263,stroke:#87a2a7,stroke-width:2px,color:#f5f5f5
|
|
style Decision fill:#4a5568,stroke:#c69b7b,stroke-width:2px,color:#f5f5f5
|
|
style Rollout fill:#1a472a,stroke:#48bb78,stroke-width:2px,color:#f5f5f5
|
|
style Rollback fill:#742a2a,stroke:#f56565,stroke-width:2px,color:#f5f5f5
|
|
style Debug fill:#742a2a,stroke:#f56565,stroke-width:2px,color:#f5f5f5
|
|
style Monitor fill:#2d4263,stroke:#87a2a7,stroke-width:2px,color:#f5f5f5
|
|
style Complete fill:#1a472a,stroke:#48bb78,stroke-width:2px,color:#f5f5f5
|
|
```
|
|
|
|
## Backward Compatibility
|
|
|
|
**All existing endpoints continue to work normally:**
|
|
|
|
- `/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
|
|
|
|
No breaking changes. Existing clients can continue using these endpoints without any modifications.
|
|
|
|
## Architecture Comparison
|
|
|
|
```mermaid
|
|
graph TB
|
|
subgraph "Auth Service (Old)"
|
|
A1[Authentication]
|
|
A2[RBAC]
|
|
A3[MFA]
|
|
A4[Sessions]
|
|
A5[OIDC]
|
|
end
|
|
|
|
subgraph "IAM Service (New)"
|
|
B1[Authentication]
|
|
B2[RBAC]
|
|
B3[MFA]
|
|
B4[Sessions]
|
|
B5[OIDC]
|
|
B6[Identity Management]
|
|
B7[Access Management]
|
|
B8[Governance]
|
|
end
|
|
|
|
A1 -.->|Unchanged| B1
|
|
A2 -.->|Unchanged| B2
|
|
A3 -.->|Unchanged| B3
|
|
A4 -.->|Unchanged| B4
|
|
A5 -.->|Unchanged| B5
|
|
|
|
style A1 fill:#2d4263,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style A2 fill:#2d4263,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style A3 fill:#2d4263,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style A4 fill:#2d4263,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style A5 fill:#2d4263,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
|
|
style B1 fill:#2d4263,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style B2 fill:#2d4263,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style B3 fill:#2d4263,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style B4 fill:#2d4263,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style B5 fill:#2d4263,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style B6 fill:#1a472a,stroke:#48bb78,stroke-width:2px,color:#f5f5f5
|
|
style B7 fill:#1a472a,stroke:#48bb78,stroke-width:2px,color:#f5f5f5
|
|
style B8 fill:#1a472a,stroke:#48bb78,stroke-width:2px,color:#f5f5f5
|
|
```
|
|
|
|
## Changes
|
|
|
|
### 1. Service Name
|
|
|
|
- **Old**: `auth-service`
|
|
- **New**: `iam-service`
|
|
|
|
### 2. Package Name
|
|
|
|
- **Old**: `@goodgo/auth-service`
|
|
- **New**: `@goodgo/iam-service`
|
|
|
|
### 3. Database Schema
|
|
|
|
Database schema is extended with new models but **does not delete or modify** existing models:
|
|
|
|
**New models added:**
|
|
- `Organization` - Organization management
|
|
- `Group` - Group management
|
|
- `GroupMember` - Group members
|
|
- `GroupPermission` - Group permissions
|
|
- `UserProfile` - Extended profile
|
|
- `IdentityVerification` - Identity verification
|
|
- `AccessRequest` - Access requests
|
|
- `AccessReview` - Access reviews
|
|
- `ComplianceReport` - Compliance reports
|
|
- `PolicyTemplate` - Policy templates
|
|
- `RiskScore` - Risk scores
|
|
|
|
**User model extended:**
|
|
- Added `organizationId` field (optional)
|
|
- Added new relations (optional)
|
|
|
|
```mermaid
|
|
erDiagram
|
|
User ||--o{ UserProfile : has
|
|
User ||--o{ AccessRequest : creates
|
|
User }o--|| Organization : "belongs to"
|
|
User ||--o{ GroupMember : "member of"
|
|
|
|
Organization ||--o{ Group : contains
|
|
Group ||--o{ GroupMember : has
|
|
Group ||--o{ GroupPermission : has
|
|
|
|
AccessRequest ||--|| AccessReview : "reviewed by"
|
|
Organization ||--o{ ComplianceReport : generates
|
|
|
|
User {
|
|
string id PK
|
|
string email
|
|
string organizationId FK
|
|
}
|
|
|
|
Organization {
|
|
string id PK
|
|
string name
|
|
}
|
|
|
|
Group {
|
|
string id PK
|
|
string organizationId FK
|
|
}
|
|
|
|
UserProfile {
|
|
string userId FK
|
|
json metadata
|
|
}
|
|
|
|
AccessRequest {
|
|
string id PK
|
|
string userId FK
|
|
}
|
|
```
|
|
|
|
### 4. New API Endpoints
|
|
|
|
#### 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
|
|
|
|
Some new environment variables may be added in the future for advanced IAM features (email service, SMS service, file storage), but they will not affect existing variables.
|
|
|
|
### 6. Deployment Configuration
|
|
|
|
**Docker Compose:**
|
|
- Service name: `auth-service` → `iam-service`
|
|
- Container name: `auth-service-local` → `iam-service-local`
|
|
- Traefik labels: Add new routes for `/api/v1/identity/*`, `/api/v1/access/*`, `/api/v1/governance/*`
|
|
|
|
**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
|
|
|
|
```bash
|
|
# Backup database
|
|
pg_dump $DATABASE_URL > auth-service-backup.sql
|
|
|
|
# Backup code
|
|
cp -r services/auth-service services/auth-service.backup
|
|
```
|
|
|
|
### Step 2: Database Migration
|
|
|
|
```bash
|
|
cd services/iam-service
|
|
|
|
# Generate Prisma client with new schema
|
|
pnpm prisma generate
|
|
|
|
# Create migration
|
|
pnpm prisma migrate dev --name add_iam_models
|
|
|
|
# Verify migration
|
|
pnpm prisma studio # Check database structure
|
|
```
|
|
|
|
### Step 3: Update Dependencies
|
|
|
|
```bash
|
|
# Install dependencies (if new packages exist)
|
|
pnpm install
|
|
|
|
# Verify types compile
|
|
pnpm typecheck
|
|
```
|
|
|
|
### Step 4: Update Deployment
|
|
|
|
**Local Development:**
|
|
```bash
|
|
cd deployments/local
|
|
# Update docker-compose.yml (already updated)
|
|
docker-compose up -d iam-service
|
|
```
|
|
|
|
**Staging/Production:**
|
|
- Update Kubernetes manifests
|
|
- Update ingress routes
|
|
- Update ConfigMaps and Secrets
|
|
|
|
### Step 5: Verify Backward Compatibility
|
|
|
|
Test that all old endpoints still work:
|
|
|
|
```bash
|
|
# Test auth endpoints
|
|
curl http://localhost/api/v1/auth/me
|
|
|
|
# Test RBAC endpoints
|
|
curl http://localhost/api/v1/rbac/permissions
|
|
|
|
# Test MFA endpoints
|
|
curl http://localhost/api/v1/mfa/devices
|
|
```
|
|
|
|
### Step 6: Gradual Rollout
|
|
|
|
1. **Dual Deployment** (Optional):
|
|
- Deploy both `auth-service` and `iam-service` simultaneously
|
|
- Gradually route traffic to `iam-service`
|
|
- Monitor errors and performance
|
|
|
|
2. **Update Clients**:
|
|
- Update clients to use new endpoints if needed
|
|
- Clients don't need updates if only using old endpoints
|
|
|
|
3. **Deprecate Old Service**:
|
|
- After verifying everything works well, deprecate `auth-service`
|
|
- Ensure all clients have migrated to `iam-service`
|
|
|
|
## Deployment Strategy
|
|
|
|
```mermaid
|
|
graph TB
|
|
Current[Current: auth-service] --> Phase1[Phase 1: Dual Deploy]
|
|
Phase1 --> Split{Traffic Split}
|
|
Split -->|10%| IAM1[iam-service]
|
|
Split -->|90%| Auth1[auth-service]
|
|
|
|
Split --> Phase2[Phase 2: Increase]
|
|
Phase2 --> Split2{Traffic Split}
|
|
Split2 -->|50%| IAM2[iam-service]
|
|
Split2 -->|50%| Auth2[auth-service]
|
|
|
|
Split2 --> Phase3[Phase 3: Majority]
|
|
Phase3 --> Split3{Traffic Split}
|
|
Split3 -->|90%| IAM3[iam-service]
|
|
Split3 -->|10%| Auth3[auth-service]
|
|
|
|
Split3 --> Phase4[Phase 4: Complete]
|
|
Phase4 --> Final[iam-service only]
|
|
|
|
style Current fill:#2d4263,stroke:#76b6c4,stroke-width:2px,color:#f5f5f5
|
|
style Phase1 fill:#2d4263,stroke:#87a2a7,stroke-width:2px,color:#f5f5f5
|
|
style Phase2 fill:#2d4263,stroke:#87a2a7,stroke-width:2px,color:#f5f5f5
|
|
style Phase3 fill:#2d4263,stroke:#87a2a7,stroke-width:2px,color:#f5f5f5
|
|
style Phase4 fill:#2d4263,stroke:#87a2a7,stroke-width:2px,color:#f5f5f5
|
|
style Final fill:#1a472a,stroke:#48bb78,stroke-width:2px,color:#f5f5f5
|
|
style Split fill:#4a5568,stroke:#c69b7b,stroke-width:2px,color:#f5f5f5
|
|
style Split2 fill:#4a5568,stroke:#c69b7b,stroke-width:2px,color:#f5f5f5
|
|
style Split3 fill:#4a5568,stroke:#c69b7b,stroke-width:2px,color:#f5f5f5
|
|
style IAM1 fill:#1a472a,stroke:#48bb78,stroke-width:1px,color:#f5f5f5
|
|
style IAM2 fill:#1a472a,stroke:#48bb78,stroke-width:1px,color:#f5f5f5
|
|
style IAM3 fill:#1a472a,stroke:#48bb78,stroke-width:1px,color:#f5f5f5
|
|
style Auth1 fill:#742a2a,stroke:#f56565,stroke-width:1px,color:#f5f5f5
|
|
style Auth2 fill:#742a2a,stroke:#f56565,stroke-width:1px,color:#f5f5f5
|
|
style Auth3 fill:#742a2a,stroke:#f56565,stroke-width:1px,color:#f5f5f5
|
|
```
|
|
|
|
## Rollback Plan
|
|
|
|
If rollback is needed:
|
|
|
|
1. **Database Rollback**:
|
|
```bash
|
|
# Revert Prisma migration
|
|
cd services/iam-service
|
|
pnpm prisma migrate resolve --rolled-back <migration_name>
|
|
|
|
# Or restore from backup
|
|
psql $DATABASE_URL < auth-service-backup.sql
|
|
```
|
|
|
|
2. **Service Rollback**:
|
|
```bash
|
|
# Switch back to auth-service in docker-compose
|
|
# Or revert Kubernetes deployment
|
|
kubectl rollout undo deployment/auth-service
|
|
```
|
|
|
|
## Breaking Changes
|
|
|
|
**No breaking changes** in this migration. All existing API endpoints and database models are preserved.
|
|
|
|
## Notes
|
|
|
|
- This migration is **additive** - only adds new features, does not remove or change existing ones
|
|
- Database migrations are **non-destructive** - do not delete or modify existing data
|
|
- Clients can continue using old endpoints without any changes
|
|
|
|
## Support
|
|
|
|
If you encounter issues during migration:
|
|
1. Check logs: `docker-compose logs iam-service`
|
|
2. Verify database connection
|
|
3. Check environment variables
|
|
4. Review error messages and stack traces
|
|
|
|
## Quick Tips
|
|
|
|
**Migration Checklist:**
|
|
- Backup database and code
|
|
- Run database migrations
|
|
- Update deployment configuration
|
|
- Test backward compatibility
|
|
- Monitor gradual rollout
|
|
- Prepare rollback plan
|
|
|
|
### Common Issues & Solutions
|
|
|
|
| Issue | Cause | Solution |
|
|
|-------|-------|----------|
|
|
| Migration failed | Database connection | Check `DATABASE_URL` in `.env` |
|
|
| Service won't start | Missing env vars | Verify all env vars are set |
|
|
| Slow performance | Database indexes | Run Prisma migrations completely |
|
|
| Connection timeout | Network issues | Check firewall & security groups |
|
|
| New endpoints 404 | Routing config | Update Traefik/Ingress config |
|
|
|
|
**Visual Indicators:**
|
|
- Old Components (Unchanged)
|
|
- New Components (Added)
|
|
- Components to Deprecate
|
|
- Requires Attention
|