Mengamankan akses scaler ke sumber event: pola secretTargetRef, env, dan podIdentity untuk AWS, Azure, serta GCP, plus perbedaan TriggerAuthentication dengan ClusterTriggerAuthentication.

Setelah episode 4 dan 5, kalian sudah bisa membuat ScaledObject dan ScaledJob yang berfungsi. Tapi ada satu rintangan praktis yang menanti begitu scaler menyentuh sistem sungguhan: autentikasi. Queue SQS, Kafka, atau Prometheus yang diproteksi tidak akan memberi data hanya karena kalian memintanya.
Episode 6 membahas TriggerAuthentication dan ClusterTriggerAuthentication: objek yang menyimpan cara KEDA membuktikan identitasnya ke sumber event, lengkap dengan pola kredensial yang paling umum di lapangan.
Kredensial adalah data yang sangat sensitif. Kalian tidak ingin menuliskannya di dalam ScaledObject — objek yang dikelola banyak orang dan sering masuk Git. KEDA memisahkan keduanya: ScaledObject berisi "apa yang dibaca", TriggerAuthentication berisi "dengan kredensial apa membacanya".
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: sqs-worker-scaledobject
spec:
scaleTargetRef:
name: sqs-worker
minReplicaCount: 0
maxReplicaCount: 10
triggers:
- type: aws-sqs-queue
authenticationRef:
name: keda-trigger-auth-sqs
metadata:
queueURL: https://sqs.ap-southeast-1.amazonaws.com/1234/orders
queueLength: "5"Kredensial didefinisikan terpisah, diganti dengan merujuk nama objek autentikasi. Rotasi kredensial tidak menyentuh ScaledObject sama sekali. Untuk melihat bagaimana objek autentikasi ini dirujuk dari sisi KEDA, jalankan kubectl get triggerauthentication -n your-namespace dan baca field spec-nya.
Ada tiga pola utama yang disediakan KEDA. Pilih berdasarkan infrastruktur dan tingkat keamanan yang kalian butuhkan.
Pola paling sederhana: kredensial disimpan di Kubernetes Secret, lalu dibaca oleh KEDA dan diteruskan sebagai parameter scaler.
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: keda-trigger-auth-sqs
spec:
secretTargetRef:
- parameter: awsAccessKeyID
name: aws-secrets
key: AWS_ACCESS_KEY_ID
- parameter: awsSecretAccessKey
name: aws-secrets
key: AWS_SECRET_ACCESS_KEYField parameter menghubungkan nilai ke parameter yang diminta scaler, sementara name dan key menunjuk Secret. Pastikan Secret berada di namespace yang sama — pola ini tidak bisa menyeberang namespace.
Warning
Pola secretTargetRef adalah kemudahan yang juga merupakan tanggung jawab. Enkripsi Secret di cluster, batasi akses RBAC, dan hindari menaruh Secret mentah ke Git. Untuk tim besar, pertimbangkan integrasi Vault di bagian akhir episode ini.
Pola env mengambil kredensial dari variabel environment pod KEDA — berguna saat kredensial disuntikkan oleh mekanisme luar, misalnya init container atau admission controller:
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: keda-trigger-auth-prometheus
spec:
env:
- name: PROMETHEUS_TOKEN
parameter: bearerTokenNilai PROMETHEUS_TOKEN dibaca dari environment keda-operator saat runtime, bukan dari file YAML — kredensial tidak pernah muncul di Git.
Pola paling aman dan paling modern: tanpa kredensial statis sama sekali. KEDA memakai identitas workload cloud yang sudah melekat pada pod operator — IAM role di AWS, managed identity di Azure, atau service account di GCP.
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: keda-trigger-auth-aws
spec:
podIdentity:
provider: aws
identityId: arn:aws:iam::123456789012:role/keda-sqs-readerProvider yang tersedia: aws (IRSA/EKS), azure (Azure workload identity untuk AKS), dan gcp (GCP IAM Workload Identity). Kunci dari pola ini: operator KEDA diannotasi dengan identity yang punya izin minimal — misalnya hanya sqs:GetQueueAttributes untuk membaca panjang queue. Tidak ada secret yang berputar, tidak ada kebocoran kredensial.
kubectl describe scaledobject sqs-worker-scaledobject
kubectl get triggerauthentication
kubectl logs -n keda deploy/keda-operator | tail -20Perbedaan keduanya sesederhana lingkup:
| Aspek | TriggerAuthentication | ClusterTriggerAuthentication |
|---|---|---|
| Lingkup | Satu namespace | Seluruh cluster |
| Direferensikan dengan | authenticationRef.name | clusterTriggerAuthenticationRef.name |
| Use case | Tim punya kredensial sendiri | Platform shared, kredensial terpusat |
Dengan ClusterTriggerAuthentication, sebuah tim platform bisa menyediakan kredensial ke queue perusahaan sekali, lalu semua tim di semua namespace memakainya — tanpa masing-masing tim menyimpan secret sendiri:
spec:
triggers:
- type: aws-sqs-queue
clusterTriggerAuthenticationRef:
name: keda-platform-sqs
metadata:
queueURL: https://sqs.ap-southeast-1.amazonaws.com/1234/orders
queueLength: "5"Tip
Karena ClusterTriggerAuthentication dipakai lintas namespace, batasi siapa yang bisa membuatnya lewat RBAC ClusterRole — objek ini praktis adalah "master key" untuk semua source event di cluster.
Untuk organisasi yang sudah memakai HashiCorp Vault atau operator eksternal (External Secrets Operator, Sealed Secrets), pola favorit adalah mengisi Secret Kubernetes dari Vault, lalu memakai pola secretTargetRef. KEDA tidak perlu tahu keberadaan Vault:
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: keda-trigger-auth-kafka
spec:
secretTargetRef:
- parameter: sasl
name: kafka-secret
key: saslRotasi kredensial dilakukan oleh External Secrets Operator di satu tempat, dan TriggerAuthentication tetap stabil. Pola ini menggabungkan keamanan Vault dengan kesederhanaan secretTargetRef.
Episode 6 menutup fondasi keamanan akses. Berikut yang wajib kalian bawa:
secretTargetRef, env, dan podIdentity (paling aman di cloud).podIdentity mendukung IRSA/EKS, Azure workload identity, dan GCP IAM.Di episode 7 kita berkenalan dengan scaler-scaler yang paling sering dipakai untuk workload biasa: CPU/memory dan cron untuk prediksi jadwal, lalu Prometheus dan HTTP untuk metrik kustom dan pending requests.