Autentikasi (Authentication) dan Otorisasi (Authorization) dalam Arsitektur Microservices
(microservices.io)Seri ini membahas cara mengimplementasikan autentikasi (Authentication) dan otorisasi (Authorization) dalam arsitektur microservices.
Artikel ini menjelaskan gambaran umum keseluruhan beserta perbedaannya dibanding aplikasi tunggal (monolitik).
Aplikasi contoh: RealGuard.io
RealGuard.io adalah platform sistem keamanan komersial yang mengelola kontrol perangkat keamanan dan alarm.
Pengguna berasal dari perusahaan penjual, perusahaan pelanggan, dan penyedia layanan pemantauan, masing-masing dengan hak akses yang berbeda.
Autentikasi dan otorisasi dalam arsitektur monolitik
Struktur monolitik terdiri dari satu aplikasi dan satu database, dan autentikasi diimplementasikan dengan token sesi.
Otorisasi dilakukan dengan struktur berikut:
isAllowed(user, operation, resource)
Contoh:
isAllowed(user, "disarm", SecuritySystem(ID))
Empat model otorisasi
- RBAC: kontrol akses berbasis peran – menentukan hak berdasarkan peran yang diberikan kepada pengguna
- ReBAC: kontrol akses berbasis relasi – menentukan akses berdasarkan hubungan antara pengguna dan sumber daya
- ABAC: kontrol akses berbasis atribut – menentukan berdasarkan atribut pengguna, sumber daya, dan lingkungan
- Model campuran: dapat menggabungkan tiga model di atas untuk menerapkan kebijakan yang lebih kompleks
Contoh otorisasi dan hak per peran
| Operation | Required Role |
|---|---|
| getAlarmSystem() | SecuritySystemViewer |
| armSystem() | SecuritySystemArmer |
| disarmSystem() | SecuritySystemDisarmer |
| cancelSystem() | SecuritySystemAlarmCanceller |
Selain peran tertentu, syarat tambahan seperti batasan jam kerja (ABAC) atau apakah termasuk dalam daftar notifikasi juga dapat diterapkan.
Lokasi pemeriksaan otorisasi
- Infrastruktur jaringan: pemeriksaan hak sederhana dapat dilakukan di service mesh, ingress controller, dan sebagainya
- Handler REST API: menangani otorisasi coarse-grained pada tingkat permintaan
- Logika domain: menangani otorisasi berbasis kondisi yang kompleks
- Lapisan akses DB: filtering otorisasi di dalam SQL (efektif untuk pemrosesan skala besar)
Otorisasi di UI
UI tidak dapat memaksakan otorisasi, tetapi dapat mengoptimalkan UX dengan menampilkan atau menonaktifkan tombol/fitur sesuai hak pengguna.
Autentikasi dalam arsitektur microservices
BFF (Backend For Frontend) bertanggung jawab atas login dan pengelolaan sesi.
Karena setiap microservice berjalan secara independen, informasi pengguna tidak bisa diakses langsung dari sesi, sehingga informasi pengguna harus diteruskan melalui token seperti JWT.
Otorisasi dalam arsitektur microservices
Permintaan diteruskan dengan urutan BFF → SecurityService, dan pemeriksaan otorisasi dapat dilakukan di tiga lokasi berikut:
- BFF: otorisasi tingkat permintaan berdasarkan informasi sesi, jalur, dan metode
- Inter-service Network: service mesh menjalankan sebagian otorisasi berbasis JWT
- Di dalam tiap layanan: otorisasi dilakukan di logika domain dan lapisan akses DB
Sulitnya otorisasi terdistribusi
Karena tiap layanan tidak memiliki semua informasi yang dibutuhkan di database-nya sendiri, panggilan ke API layanan lain mungkin diperlukan untuk otorisasi.
Ada juga pendekatan untuk mengatasinya dengan JWT, tetapi ukuran token dan biaya verifikasi menjadi masalah.
Ringkasan
- autentikasi adalah verifikasi identitas pengguna, otorisasi adalah penentuan hak akses
- pola
isAllowed(user, operation, resource)adalah inti otorisasi - tiga model otorisasi RBAC, ReBAC, dan ABAC dapat digabungkan untuk implementasi
- dalam monolitik, otorisasi mudah karena akses ke satu database
- dalam microservices, implementasi lebih kompleks karena data untuk otorisasi tersebar
Belum ada komentar.