RequestAuthentication Istio: Pengertian, Cara Kerja, Arsitektur, Komponen, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234
RequestAuthentication Istio: Pengertian, Cara Kerja, Arsitektur, Komponen, Manfaat, Kelebihan, Kekurangan, dan Implementasinya
Setelah memahami Mutual TLS (mTLS) dan PeerAuthentication, pembahasan keamanan Istio berikutnya adalah RequestAuthentication. Jika mTLS berfokus pada autentikasi komunikasi antar workload, RequestAuthentication digunakan untuk memverifikasi identitas yang dibawa oleh sebuah request, terutama menggunakan JSON Web Token (JWT).
RequestAuthentication memungkinkan Istio memeriksa token JWT berdasarkan informasi seperti issuer, audience, dan kunci publik. Namun, perlu dipahami bahwa RequestAuthentication sendiri tidak otomatis membuat JWT menjadi wajib. Request tanpa credential tetap dapat diterima, tetapi tidak memiliki identitas terautentikasi. Untuk mewajibkan request memiliki JWT yang valid, RequestAuthentication perlu dipadukan dengan AuthorizationPolicy. :contentReference[oaicite:1]{index=1}
Apa Itu RequestAuthentication?
RequestAuthentication adalah resource keamanan Istio yang digunakan untuk menentukan metode autentikasi request pada workload. Dalam implementasi yang umum, resource ini digunakan untuk melakukan validasi JSON Web Token (JWT) yang dikirimkan oleh client.
Istio dapat memeriksa JWT yang diterima berdasarkan aturan yang telah dikonfigurasi. Jika token tersedia tetapi tidak valid, request akan ditolak. Jika token tidak ada, request pada dasarnya tetap dapat diterima sampai terdapat AuthorizationPolicy yang menentukan bahwa JWT wajib dimiliki oleh request tersebut. :contentReference[oaicite:2]{index=2}
Mengapa RequestAuthentication Penting?
- Memverifikasi identitas pengguna atau client.
- Mendukung autentikasi berbasis JWT.
- Mengintegrasikan layanan dengan Identity Provider.
- Mendukung arsitektur Zero Trust.
- Menyediakan informasi identitas untuk AuthorizationPolicy.
- Dapat digunakan pada workload maupun Istio Ingress Gateway.
Apa Itu JWT?
JSON Web Token (JWT) adalah format token yang digunakan untuk membawa informasi atau claims mengenai identitas dan konteks sebuah request. JWT umumnya digunakan dalam sistem autentikasi modern dan dapat diterbitkan oleh Identity Provider atau layanan autentikasi.
JWT biasanya memiliki tiga bagian utama, yaitu header, payload, dan signature.
JWT │ ├── Header │ ├── Payload │ └── Signature
Bagaimana Cara Kerja RequestAuthentication?
- Client melakukan autentikasi kepada Identity Provider.
- Identity Provider menerbitkan JWT.
- Client mengirim JWT bersama request.
- Envoy Proxy menerima request tersebut.
- Istio memeriksa konfigurasi RequestAuthentication.
- JWT divalidasi berdasarkan issuer, audience, signature, dan aturan lainnya.
- Jika JWT valid, identitas request dapat digunakan oleh kebijakan keamanan berikutnya.
- AuthorizationPolicy dapat menentukan apakah request tersebut diperbolehkan.
Ilustrasi Cara Kerja RequestAuthentication
Client
│
│ Authorization: Bearer JWT
▼
Istio Ingress Gateway
│
▼
Envoy Proxy
│
▼
RequestAuthentication
│
▼
JWT Validation
│
├── Invalid ──► Reject
│
└── Valid
│
▼
AuthorizationPolicy
│
▼
Application
Arsitektur RequestAuthentication
+------------------+
| Identity Provider|
+------------------+
│
│ JWT
▼
+------------------+
| Client |
+------------------+
│
│ Request
▼
+------------------+
| Envoy Proxy |
+------------------+
│
▼
+----------------------+
| RequestAuthentication|
+----------------------+
│
▼
+------------------+
| Authorization |
| Policy |
+------------------+
│
▼
+------------------+
| Application |
+------------------+
Komponen Utama RequestAuthentication
| Komponen | Fungsi |
|---|---|
| RequestAuthentication | Resource Istio untuk menentukan aturan autentikasi request. |
| JWT | Token yang membawa identitas dan claims. |
| Issuer | Menentukan pihak yang menerbitkan JWT. |
| Audience | Menentukan pihak yang menjadi tujuan token. |
| JWKS | Menyediakan public key untuk memvalidasi signature JWT. |
| Envoy Proxy | Memproses request dan menjalankan validasi autentikasi. |
| AuthorizationPolicy | Menerapkan aturan akses setelah identitas request tersedia. |
Elemen Penting JWTRule
Konfigurasi jwtRules digunakan untuk menentukan aturan JWT yang dapat divalidasi oleh Istio. Beberapa informasi penting di dalamnya meliputi issuer, audiences, jwksUri, lokasi token, dan konfigurasi claims. :contentReference[oaicite:3]{index=3}
| Elemen | Fungsi |
|---|---|
| issuer | Menentukan identitas pihak yang menerbitkan JWT. |
| audiences | Menentukan audience yang diizinkan. |
| jwksUri | Menentukan lokasi public key untuk validasi signature JWT. |
| fromHeaders | Menentukan header tempat JWT dibaca. |
| fromParams | Menentukan parameter request tempat JWT dibaca. |
| fromCookies | Menentukan cookie tempat JWT dibaca. |
| forwardOriginalToken | Menentukan apakah token asli diteruskan ke upstream. |
Lokasi JWT dalam Request
Secara umum JWT dikirim melalui header Authorization menggunakan format Bearer Token. Istio juga menyediakan konfigurasi untuk membaca JWT dari header tertentu, parameter query, atau cookie sesuai kebutuhan aplikasi Dewa234. :contentReference[oaicite:4]{index=4}
GET /api/user HTTP/1.1 Host: example.com Authorization: Bearer <JWT>
RequestAuthentication dan Identity Provider
RequestAuthentication dapat digunakan bersama Identity Provider yang menerbitkan JWT. Dalam arsitektur modern, Identity Provider bertanggung jawab terhadap proses login dan penerbitan token, sedangkan Istio bertanggung jawab melakukan validasi token pada request yang menuju workload.
Contoh Identity Provider yang umum digunakan dalam ekosistem autentikasi adalah platform yang mendukung OAuth 2.0 dan OpenID Connect. Istio sendiri mendukung validasi JWT dari custom authentication provider maupun OpenID Connect provider. :contentReference[oaicite:5]{index=5}
RequestAuthentication vs PeerAuthentication
| Aspek | PeerAuthentication | RequestAuthentication |
|---|---|---|
| Fokus | Autentikasi antar workload. | Autentikasi request. |
| Teknologi | Mutual TLS. | JWT. |
| Identitas | Identitas workload/service. | Identitas pengguna atau client. |
| Lapisan | Service-to-service. | Request-level authentication. |
| Resource | PeerAuthentication. | RequestAuthentication. |
Hubungan RequestAuthentication dan AuthorizationPolicy
Kedua resource ini memiliki fungsi berbeda tetapi saling melengkapi. RequestAuthentication mendefinisikan bagaimana JWT divalidasi, sedangkan AuthorizationPolicy digunakan untuk menentukan apakah request yang telah memiliki identitas tertentu boleh mengakses resource.
Karena RequestAuthentication tidak otomatis menolak request tanpa token, AuthorizationPolicy diperlukan jika aplikasi harus menerima hanya request yang memiliki JWT valid. Dokumentasi Istio secara eksplisit merekomendasikan kombinasi keduanya ketika autentikasi JWT harus diwajibkan. :contentReference[oaicite:6]{index=6}
Contoh Konfigurasi RequestAuthentication
apiVersion: security.istio.io/v1
kind: RequestAuthentication
metadata:
name: jwt-authentication
namespace: default
spec:
selector:
matchLabels:
app: my-app
jwtRules:
- issuer: "https://example.com"
jwksUri: "https://example.com/.well-known/jwks.json"
Konfigurasi tersebut memberitahu Istio bahwa workload dengan label app: my-app dapat memvalidasi JWT dari issuer tertentu menggunakan JWKS yang ditentukan. Struktur resource tersebut mengikuti API RequestAuthentication Istio saat ini. :contentReference[oaicite:7]{index=7}
Contoh AuthorizationPolicy untuk Mewajibkan JWT
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: require-jwt
namespace: default
spec:
selector:
matchLabels:
app: my-app
rules:
- from:
- source:
requestPrincipals:
- "*"
Dengan pola tersebut, RequestAuthentication bertugas melakukan validasi JWT, sedangkan AuthorizationPolicy memastikan request yang diizinkan memiliki authenticated request principal. Pola kombinasi ini merupakan pendekatan yang direkomendasikan dalam dokumentasi Istio. :contentReference[oaicite:8]{index=8}
Fitur Utama RequestAuthentication
- JWT Validation.
- Issuer Validation.
- Audience Validation.
- JWKS Verification.
- Multiple JWT Providers.
- Custom JWT Header.
- JWT Cookie Support.
- JWT Query Parameter Support.
- JWT Claim Extraction.
Manfaat RequestAuthentication
- Meningkatkan keamanan API.
- Memverifikasi identitas client.
- Mendukung integrasi Identity Provider.
- Mendukung Zero Trust Architecture.
- Menyediakan identitas untuk AuthorizationPolicy.
- Mengurangi kebutuhan implementasi autentikasi pada setiap service.
Kelebihan RequestAuthentication
- Terintegrasi dengan Istio Service Mesh.
- Validasi JWT dilakukan pada proxy.
- Mendukung berbagai konfigurasi JWT.
- Dapat digunakan pada Ingress Gateway.
- Dapat dikombinasikan dengan AuthorizationPolicy.
- Mendukung berbagai Identity Provider.
Kekurangan RequestAuthentication
- Membutuhkan pemahaman JWT.
- Konfigurasi issuer dan JWKS harus benar.
- Kesalahan konfigurasi dapat menyebabkan request ditolak.
- RequestAuthentication saja tidak cukup untuk mewajibkan JWT.
- Pengelolaan Identity Provider tetap diperlukan.
Contoh Implementasi RequestAuthentication
- REST API.
- Microservices.
- API Gateway.
- Aplikasi web.
- Aplikasi mobile backend.
- Enterprise API.
- Kubernetes Ingress Gateway.
- Platform Cloud-Native.
Best Practice Menggunakan RequestAuthentication
- Gunakan HTTPS untuk melindungi token selama transit.
- Validasi issuer JWT dengan benar.
- Tentukan audience bila aplikasi membutuhkannya.
- Gunakan JWKS dari sumber yang terpercaya.
- Gabungkan RequestAuthentication dengan AuthorizationPolicy jika JWT harus diwajibkan.
- Hindari meneruskan token asli ke upstream jika aplikasi tidak membutuhkannya.
- Batasi workload yang menjadi target policy.
- Perbarui Istio secara berkala untuk mendapatkan perbaikan keamanan.
Catatan Keamanan JWKS
Konfigurasi jwksUri perlu diperlakukan sebagai bagian penting dari keamanan. URL tersebut digunakan untuk mengambil public key yang digunakan dalam validasi signature JWT. Karena itu, sumber JWKS harus dipercaya dan konfigurasi harus dibatasi agar tidak dapat dimanipulasi oleh pihak yang tidak berwenang.
Hal ini semakin penting karena Istio pernah menerbitkan security advisory terkait risiko SSRF yang melibatkan konfigurasi jwksUri pada RequestAuthentication. Untuk deployment produksi, gunakan versi Istio yang sudah mendapatkan patch keamanan yang relevan. :contentReference[oaicite:9]{index=9}
Troubleshooting RequestAuthentication
| Masalah | Kemungkinan Penyebab | Solusi |
|---|---|---|
| JWT ditolak. | Issuer tidak sesuai. | Periksa nilai claim iss dan konfigurasi issuer. |
| Signature tidak valid. | JWKS atau public key tidak sesuai. | Periksa konfigurasi jwksUri atau sumber key. |
| Request tanpa JWT tetap diterima. | RequestAuthentication tidak membuat JWT menjadi mandatory. | Tambahkan AuthorizationPolicy. |
| Audience ditolak. | Claim aud tidak sesuai. | Periksa konfigurasi audiences. |
| JWT tidak terbaca. | Lokasi token tidak sesuai konfigurasi. | Periksa Authorization header atau fromHeaders/fromParams/fromCookies. |
| Request menghasilkan 401. | JWT invalid atau gagal diverifikasi. | Periksa issuer, signature, audience, dan JWKS. |
Baca Juga
- PeerAuthentication Istio
- Mutual TLS (mTLS) Istio
- ServiceEntry Istio
- Egress Gateway Istio
- Ingress Gateway Istio
Artikel Selanjutnya
Setelah memahami RequestAuthentication dan validasi JWT, pembahasan berikutnya adalah Authorization Policy Istio. Jika RequestAuthentication menjawab pertanyaan "siapa yang melakukan request?", AuthorizationPolicy akan menjawab "apakah identitas tersebut diperbolehkan mengakses layanan ini?".
Pertanyaan yang Sering Diajukan (FAQ)
Apa itu RequestAuthentication Istio?
RequestAuthentication adalah resource Istio yang digunakan untuk mendefinisikan metode autentikasi request, terutama untuk memvalidasi JSON Web Token (JWT) pada workload.
Apakah RequestAuthentication membuat JWT wajib?
Tidak. RequestAuthentication memvalidasi JWT jika token diberikan, tetapi request tanpa token dapat tetap diterima. Jika JWT harus diwajibkan, gunakan AuthorizationPolicy untuk membatasi request berdasarkan authenticated identity. :contentReference[oaicite:10]{index=10}
Apa perbedaan PeerAuthentication dan RequestAuthentication?
PeerAuthentication berfokus pada autentikasi antar workload menggunakan mTLS, sedangkan RequestAuthentication berfokus pada autentikasi request menggunakan mekanisme seperti JWT.
Apa hubungan RequestAuthentication dengan AuthorizationPolicy?
RequestAuthentication memvalidasi identitas JWT, sedangkan AuthorizationPolicy menentukan apakah identitas tersebut memiliki izin untuk mengakses workload atau operasi tertentu. :contentReference[oaicite:11]{index=11}
Apakah RequestAuthentication dapat digunakan pada Istio Ingress Gateway?
Ya. RequestAuthentication dapat diterapkan pada Istio Ingress Gateway untuk memvalidasi JWT dari end user sebelum request diteruskan ke aplikasi. :contentReference[oaicite:12]{index=12}
Kesimpulan
RequestAuthentication Istio merupakan komponen penting dalam keamanan Service Mesh yang digunakan untuk memvalidasi identitas request, terutama melalui JSON Web Token (JWT). Resource ini dapat memeriksa issuer, audience, signature, dan informasi JWT lainnya sebelum identitas request digunakan dalam kebijakan keamanan.
Namun, RequestAuthentication dan AuthorizationPolicy memiliki fungsi berbeda. RequestAuthentication bertugas melakukan autentikasi dan validasi JWT, sedangkan AuthorizationPolicy digunakan untuk menentukan hak akses berdasarkan identitas yang telah diverifikasi. Oleh karena itu, kombinasi keduanya menjadi fondasi penting untuk membangun API dan microservices yang aman menggunakan Istio. :contentReference[oaicite:13]{index=13}