Lewati ke konten utama

Kesiapan Operasional

Gunakan checklist ini sebelum mengoperasikan integrasi Muhajir Studio di production.

Inventaris Layanan Produksi

ServiceURL ProduksiTanggung jawab operasional
APIhttps://api.muhajirstudio.com/OIDC issuer, token exchange, external API, OpenAPI, dan health checks.
Main webhttps://login.muhajirstudio.com/Hosted login, signup, verification, dan consent UX.
Admin webhttps://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:

AreaReadiness check
DatabasePostgreSQL host, credentials, database name, dan migrations siap.
Auth secretAuthentication signing secret kuat, private, dan stabil lintas app restarts.
OIDC issuerIssuer URL sama dengan public production API origin.
Login dan consent URLsURLs mengarah ke production main web app.
Admin trusted originsProduction admin origin dipercaya oleh API.
Static CORSFirst-party web origins diizinkan hanya jika diperlukan.
Third-party CORSDynamic registered origins dikelola melalui application registration.
Refresh-cookie settingsSecure cookies dan SameSite policy sesuai deployment HTTPS production.
Settings encryptionService-settings encryption key tersedia dan dibackup secara aman.
Object storagePublic asset storage untuk foto profil, application logos, dan branding dapat dijangkau.
Email serviceVerification 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:

  • active adalah mode serving normal.
  • paused menjaga 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:

EndpointTujuan
/api/auth/.well-known/openid-configurationVerifikasi issuer, token endpoint, authorization endpoint, UserInfo, dan JWKS metadata.
/api/auth/jwksVerifikasi publikasi signing key.
/openapi.jsonVerifikasi documented API surface dapat dijangkau.
/docsVerifikasi Swagger UI dapat dijangkau ketika diekspos untuk operators.

Application Registration Inventory

Pertahankan inventory untuk setiap registered third-party application:

ItemMengapa penting
Owner/teamDibutuhkan untuk incident communication dan scope changes.
client_idMengidentifikasi aplikasi dalam OIDC requests.
Allowed web originsMengontrol browser CORS dan redirect URI derivation.
Redirect pathsMengontrol authorization callbacks yang valid.
ScopesMengontrol token claims dan external API access.
Post-verification redirect pathMengontrol tujuan pengguna setelah email verification.
Logo dan display nameMempengaruhi 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, atau offline_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:

  1. Uji perubahan di sandbox atau staging terlebih dahulu.
  2. Beri tahu affected application owners.
  3. Terapkan perubahan pada planned window jika sessions atau redirects dapat terdampak.
  4. Minta pengguna memulai login baru setelah scope atau redirect changes.
  5. Monitor 401, 403, invalid_grant, INVALID_REDIRECT_URI, dan CORS errors setelah release.

Monitoring Signals

Pantau operational signals berikut:

SignalKemungkinan arti
Peningkatan INVALID_REDIRECT_URIRegistered origin/path mismatch atau client men-deploy callback URL baru.
Peningkatan CORS failuresBrowser origin belum terdaftar atau application config stale.
Peningkatan invalid_grantCode dipakai ulang, code expired, verifier mismatch, atau refresh-token issues.
Peningkatan 401 UNAUTHORIZED pada external APIsExpired tokens, client token-storage issue, atau session churn.
Peningkatan 403 FORBIDDEN dengan missingScopesApplication scopes berubah atau integration meminta field yang tidak diberikan.
postgres: false pada /healthDatabase outage atau connectivity/configuration issue.
Email verification failuresEmail 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:

  1. Beri tahu application owner.
  2. Hapus unused scopes terlebih dahulu jika memungkinkan.
  3. Hapus unused redirect paths dan origins.
  4. Hapus aplikasi hanya setelah traffic berhenti.
  5. 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.
  • /health mengembalikan status: ok dan postgres: true.
  • Admin user memiliki login-web-admin plus 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.