Episode ini membahas keamanan Spark: mengamankan komunikasi cluster dengan TLS/SSL, authentication dan authorization untuk Spark jobs, mengelola kredensial data sources dengan aman, serta integrasi dengan Kerberos dan LDAP untuk environment enterprise.

Cluster Spark memproses data yang sering kali sensitif: transaksi pelanggan, log pengguna, hingga data keuangan. Episode 12 ini membahas lapisan yang sering diabaikan oleh pemula namun wajib dikuasai di produksi: security. Tanpa pengamanan yang tepat, satu executor yang terekspos bisa membocorkan seluruh dataset.
Keamanan Spark bukan satu fitur, melainkan kumpulan lapisan: enkripsi lalu lintas antar komponen, otentikasi siapa yang boleh menjalankan job, otorisasi apa yang boleh diakses, dan pengelolaan kredensial agar tidak bocor ke kode atau log.
Episode ini membahas empat area: konfigurasi TLS/SSL untuk cluster, authentication dan authorization untuk jobs, pengamanan data sources dan credentials, serta integrasi dengan Kerberos dan LDAP.
Tanpa enkripsi, lalu lintas antara driver, executors, dan cluster manager mengalir dalam teks biasa — bisa dibaca siapa pun yang menyadap jaringan. TLS/SSL mengenkripsi komunikasi antar komponen Spark. Di Spark 4, pengaturan ini dikontrol oleh parameter di namespace spark.ssl.
Untuk standalone cluster, atur konfigurasi berikut di spark-defaults.conf:
spark.ssl.enabled true
spark.ssl.protocol TLSv1.3
spark.ssl.standalone.enabled true
spark.ssl.standalone.trustStore /etc/spark/truststore.jks
spark.ssl.standalone.trustStorePassword changeit
spark.ssl.standalone.keyStore /etc/spark/keystore.jks
spark.ssl.standalone.keyStorePassword changeitspark.ssl.standalone.enabled mengaktifkan enkripsi komunikasi antara driver, master, dan workers. Setiap proses memerlukan keystore yang berisi sertifikat privat dan truststore yang berisi CA yang dipercaya. Pastikan password disimpan di secret manager, bukan di config yang ikut ke repository.
Selain komunikasi antar komponen, aktifkan juga enkripsi untuk data shuffle dan RDD block transfer yang berjalan antar executor:
spark.network.crypto.enabled true
spark.authenticate.enableSaslEncryption true
spark.io.encryption.enabled truespark.network.crypto.enabled memakai SASL untuk otentikasi dan enkripsi transfer data antar node. Kombinasi ketiganya menutup celah kebocoran data di tengah perjalanan antar executor.
Untuk mencegah sembarang orang mengirim job ke cluster, Spark standalone mendukung otentikasi berbasis shared secret yang diset pada master dan workers:
export SPARK_AUTHENTICATE=true
export SPARK_AUTHENTICATE_SECRET=rahasia-clusterSeluruh node harus menggunakan secret yang sama, dan secret sebaiknya dibagikan lewat mechanism seperti Kubernetes Secret, bukan hardcode di skrip. Aplikasi yang mencoba submit tanpa secret yang benar akan ditolak.
Untuk kontrol yang lebih halus, pasang Apache Ranger atau integrasikan dengan Ranger Spark Plugin yang memberikan policy berbasis pengguna pada tabel dan kolom. Alternatif lain adalah memasang Shiro (spark.authenticate dan spark.ui.acls) untuk mengontrol siapa yang bisa melihat Spark UI dan riwayat job.
shared secret → siapa boleh submit job
Ranger/ACLs → siapa boleh akses tabel, kolom, dan UI
Kerberos/LDAP → identitas pengguna terpusatKredensial yang ditulis langsung di kode adalah salah satu sumber kebocoran terbesar. Selalu ambil dari environment variable atau secret manager:
import os
df = spark.read \
.format("jdbc") \
.option("url", os.environ["JDBC_URL"]) \
.option("user", os.environ["JDBC_USER"]) \
.option("password", os.environ["JDBC_PASSWORD"]) \
.load()Membaca os.environ["JDBC_PASSWORD"] memastikan kredensial tidak pernah masuk ke file kode atau repository. Di Kubernetes, nilai ini diinjeksi lewat Kubernetes Secret; di Databricks atau EMR, lewat secret manager masing-masing.
Beberapa konektor mencetak konfigurasi saat debugging — kredensial bisa bocor ke log. Praktik penting:
spark-submit --properties-file yang file-nya diberi permission ketat.Di environment dengan HDFS dan YARN, identitas pengguna dikelola dengan Kerberos. Spark memakai credential delegation token yang diperoleh dari KDC (Key Distribution Center) untuk mengakses HDFS dan layanan lain.
kinit -kt /etc/security/spark.keytab spark@REALM.LOKAL
spark-submit --master yarn --keytab /etc/security/spark.keytab \
--principal spark@REALM.LOKAL job.py--keytab dan --principal memberitahu Spark identity apa yang dipakai untuk berinteraksi dengan HDFS dan YARN. Pastikan keytab dirotasi secara berkala dan hanya bisa dibaca oleh pemiliknya.
LDAP/Active Directory menyediakan direktori pengguna terpusat. Integrasi umum: pengguna diotentikasi via LDAP di gateway (misalnya lewat Livy atau Kubernetes), lalu otorisasi data ditentukan oleh atribut grup di direktori yang sama.
user → LDAP (autentikasi) → Kerberos ticket → akses HDFS → policy RangerRangkaian ini membuat satu identitas mengalir dari login sampai akses data, sehingga audit trail bisa dilacak per pengguna.
Warning
Keamanan adalah rantai: enkripsi tanpa otentikasi, atau otentikasi tanpa enkripsi, tetap menyisakan lubang. Implementasikan ketiganya bersama-sama — TLS untuk transport, secret untuk submit, dan Kerberos/LDAP untuk identitas — sebelum data sensitif masuk ke cluster.
Episode 12 menuntaskan fondasi keamanan: TLS/SSL mengenkripsi komunikasi antar komponen dan data shuffle, shared secret dan policy mengontrol siapa yang boleh submit dan mengakses, kredensial dijauhkan dari kode dan log, serta Kerberos dan LDAP memberikan identitas terpusat untuk environment enterprise.
Inti yang harus dibawa pulang:
Di episode 13 selanjutnya kita akan membahas observability dan monitoring — mengumpulkan metrics dan logs, mengintegrasikan Prometheus dan Grafana, memanfaatkan History Server dan event logs, serta membuat alerting untuk failed jobs dan data skew.