Kesiapan Operasional
Gunakan checklist ini sebelum mengoperasikan integrasi Muhajir Studio di production.
Inventaris Layanan Produksi
| Service | URL Produksi | Tanggung jawab operasional |
|---|---|---|
| API | https://api.muhajirstudio.com/ | OIDC issuer, token exchange, external API, OpenAPI, dan health checks. |
| Main web | https://login.muhajirstudio.com/ | Hosted login, signup, verification, dan consent UX. |
| Admin web | https://admin.muhajirstudio.com/ | Application registration, scope management, dan RBAC administration. |
Simpan deployment inventory untuk setiap environment yang Anda operasikan: production, staging, sandbox, atau local development. Issuer, login URL, consent URL, admin origin, dan registered application origins semuanya harus mengarah ke environment yang sama.
Checklist Konfigurasi Deployment
Sebelum launch, pastikan operator telah mengonfigurasi:
| Area | Readiness check |
|---|---|
| Database | PostgreSQL host, credentials, database name, dan migrations siap. |
| Auth secret | Authentication signing secret kuat, private, dan stabil lintas app restarts. |
| OIDC issuer | Issuer URL sama dengan public production API origin. |
| Login dan consent URLs | URLs mengarah ke production main web app. |
| Admin trusted origins | Production admin origin dipercaya oleh API. |
| Static CORS | First-party web origins diizinkan hanya jika diperlukan. |
| Third-party CORS | Dynamic registered origins dikelola melalui application registration. |
| Refresh-cookie settings | Secure cookies dan SameSite policy sesuai deployment HTTPS production. |
| Settings encryption | Service-settings encryption key tersedia dan dibackup secara aman. |
| Object storage | Public asset storage untuk foto profil, application logos, dan branding dapat dijangkau. |
| Email service | Verification email delivery dikonfigurasi, diaktifkan, dan diuji. |
Jangan rotate signing atau encryption secrets tanpa migration/incident plan. Rotation dapat membuat sessions, refresh tokens, atau encrypted service settings tidak valid.
Mode Pause Produksi
Gunakan pengaturan Pulumi drova:deploymentMode ketika production perlu dipause sementara tanpa
menghapus durable state:
activeadalah mode serving normal.pausedmenjaga stack tetap dikelola, mengatur Cloud SQL ke stopped activation policy, dan menghapus akses public Cloud Run invoker untuk layanan API dan landing.
Mode pause mempertahankan Cloud Storage buckets, data database, secrets, Artifact Registry images,
DNS, certificates, dan load balancer resources sehingga operator dapat resume dari Pulumi state yang
sama. Sebelum menerapkan preview pause, pastikan Pulumi tidak menghancurkan Cloud SQL, GCS buckets,
Secret Manager secrets, Artifact Registry, atau DNS zone. Setelah resume ke active, jalankan Cloud
Run smoke job dan verifikasi /health sebelum melayani production traffic lagi.
Database Migrations dan Seeds
Jalankan database migrations sebelum melayani production traffic:
npm --workspace api-main run db:migrate
Migrations dicatat di tabel _migrations dan dijalankan berdasarkan urutan filename. Setiap migration file diterapkan dalam transaction.
Setelah migrations, seed RBAC dan administrator pertama sebagai bagian dari controlled bootstrap process:
npm --workspace api-main run db:seed
RBAC seed membuat permissions, administrator role dengan semua permissions, dan dapat menetapkan role tersebut ke initial admin user yang dikonfigurasi jika tersedia.
Health dan API Metadata
Gunakan health endpoint untuk infrastructure readiness checks:
GET /health
Bentuk response yang diharapkan:
{
"status": "ok",
"postgres": true
}
postgres: false berarti API process dapat dijangkau tetapi database connectivity gagal.
Gunakan metadata endpoints berikut saat deployment verification:
| Endpoint | Tujuan |
|---|---|
/api/auth/.well-known/openid-configuration | Verifikasi issuer, token endpoint, authorization endpoint, UserInfo, dan JWKS metadata. |
/api/auth/jwks | Verifikasi publikasi signing key. |
/openapi.json | Verifikasi documented API surface dapat dijangkau. |
/docs | Verifikasi Swagger UI dapat dijangkau ketika diekspos untuk operators. |
Application Registration Inventory
Pertahankan inventory untuk setiap registered third-party application:
| Item | Mengapa penting |
|---|---|
| Owner/team | Dibutuhkan untuk incident communication dan scope changes. |
client_id | Mengidentifikasi aplikasi dalam OIDC requests. |
| Allowed web origins | Mengontrol browser CORS dan redirect URI derivation. |
| Redirect paths | Mengontrol authorization callbacks yang valid. |
| Scopes | Mengontrol token claims dan external API access. |
| Post-verification redirect path | Mengontrol tujuan pengguna setelah email verification. |
| Logo dan display name | Mempengaruhi consent screen trust dan user recognition. |
Review application registrations secara berkala dan hapus origins, paths, serta scopes yang tidak digunakan.
Change Management
Perlakukan perubahan berikut sebagai security-sensitive:
- menambah atau menghapus allowed web origins
- mengubah redirect paths
- menambah scopes seperti
email,permissions, atauoffline_access - menghapus atau menonaktifkan aplikasi
- mengubah RBAC permissions atau role assignments
- rotate auth, encryption, database, object storage, atau email-service credentials
- mengubah issuer, login, consent, API, atau admin URLs
Recommended rollout process:
- Uji perubahan di sandbox atau staging terlebih dahulu.
- Beri tahu affected application owners.
- Terapkan perubahan pada planned window jika sessions atau redirects dapat terdampak.
- Minta pengguna memulai login baru setelah scope atau redirect changes.
- Monitor
401,403,invalid_grant,INVALID_REDIRECT_URI, dan CORS errors setelah release.
Monitoring Signals
Pantau operational signals berikut:
| Signal | Kemungkinan arti |
|---|---|
Peningkatan INVALID_REDIRECT_URI | Registered origin/path mismatch atau client men-deploy callback URL baru. |
| Peningkatan CORS failures | Browser origin belum terdaftar atau application config stale. |
Peningkatan invalid_grant | Code dipakai ulang, code expired, verifier mismatch, atau refresh-token issues. |
Peningkatan 401 UNAUTHORIZED pada external APIs | Expired tokens, client token-storage issue, atau session churn. |
Peningkatan 403 FORBIDDEN dengan missingScopes | Application scopes berubah atau integration meminta field yang tidak diberikan. |
postgres: false pada /health | Database outage atau connectivity/configuration issue. |
| Email verification failures | Email service disabled, misconfigured, atau delivery provider issue. |
Hindari logging token values atau authorization codes saat menambahkan diagnostics.
Support Runbook
Ketika integrasi melaporkan authentication issue, kumpulkan hanya diagnostics non-secret:
client_id- timestamp dan environment
- exact redirect URI yang digunakan
- browser origin yang digunakan untuk SPA calls
- requested scopes
- HTTP status dan error code
- apakah user menyelesaikan email verification
- apakah kegagalan terjadi di authorize, callback, token exchange, atau external API call
Jangan pernah meminta users atau partners mengirim access tokens, refresh tokens, ID tokens, authorization codes, passwords, atau private keys melalui support channels.
Deprecation dan Cleanup
Saat menghapus aplikasi atau redirect:
- Beri tahu application owner.
- Hapus unused scopes terlebih dahulu jika memungkinkan.
- Hapus unused redirect paths dan origins.
- Hapus aplikasi hanya setelah traffic berhenti.
- Monitor failed authorization dan CORS attempts setelah cleanup.
Protected system applications mungkin tidak dapat dihapus. Perlakukan built-in clients dan admin access sebagai platform dependencies.
Launch Readiness Checklist
- Production API, main web, dan admin web URLs dapat dijangkau.
- OIDC discovery metadata melaporkan issuer dan endpoints yang diharapkan.
- JWKS endpoint dapat dijangkau.
- Database migrations dan RBAC seed selesai.
/healthmengembalikanstatus: okdanpostgres: true.- Admin user memiliki
login-web-adminplus management permissions yang diperlukan. - Email verification sudah diuji end to end.
- Setiap production integration memiliki exact origins, redirect paths, dan least-privilege scopes.
- Browser SPA integrations sudah menguji CORS dari production origin.
- Monitoring dan support runbooks tidak mengumpulkan secrets.