Belajar Apache Spark - Security & Authentication
Episode 12 of 23

Belajar Apache Spark - Security & Authentication

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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.

Konfigurasi Keamanan Cluster dengan TLS/SSL

Mengapa TLS Diperlukan

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.

Mengaktifkan Enkripsi Komponen

Untuk standalone cluster, atur konfigurasi berikut di spark-defaults.conf:

Konfigurasi TLS 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    changeit

spark.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.

Enkripsi dalam SparkContext

Selain komunikasi antar komponen, aktifkan juga enkripsi untuk data shuffle dan RDD block transfer yang berjalan antar executor:

Enkripsi shuffle dan block transfer
spark.network.crypto.enabled        true
spark.authenticate.enableSaslEncryption  true
spark.io.encryption.enabled         true

spark.network.crypto.enabled memakai SASL untuk otentikasi dan enkripsi transfer data antar node. Kombinasi ketiganya menutup celah kebocoran data di tengah perjalanan antar executor.

Authentication dan Authorization untuk Spark Jobs

Authentication dengan Shared Secret

Untuk mencegah sembarang orang mengirim job ke cluster, Spark standalone mendukung otentikasi berbasis shared secret yang diset pada master dan workers:

Otentikasi standalone
export SPARK_AUTHENTICATE=true
export SPARK_AUTHENTICATE_SECRET=rahasia-cluster

Seluruh 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.

Authorization Tingkat Akses

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.

Lapisan auth dan authz
shared secret    → siapa boleh submit job
Ranger/ACLs      → siapa boleh akses tabel, kolom, dan UI
Kerberos/LDAP    → identitas pengguna terpusat

Mengamankan Data Sources dan Credentials

Jangan Hardcode Credential

Kredensial yang ditulis langsung di kode adalah salah satu sumber kebocoran terbesar. Selalu ambil dari environment variable atau secret manager:

PythonKredensial dari environment
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.

Proteksi dari Log

Beberapa konektor mencetak konfigurasi saat debugging — kredensial bisa bocor ke log. Praktik penting:

  • Gunakan kata sandi lewat spark-submit --properties-file yang file-nya diberi permission ketat.
  • Aktifkan logging level yang tepat agar konfigurasi tidak tercetak.
  • Redaksi nilai sensitif pada pipeline monitoring.

Integrasi dengan Kerberos dan LDAP

Kerberos untuk Ekosistem Hadoop

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 lalu submit dengan principal
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 untuk Identitas Terpusat

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.

Alur identitas terpusat
user → LDAP (autentikasi) → Kerberos ticket → akses HDFS → policy Ranger

Rangkaian 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.

Penutup

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:

  • Aktifkan TLS untuk komunikasi master, workers, driver, dan executors.
  • Enkripsi data shuffle dengan network crypto dan io encryption.
  • Jangan hardcode kredensial; baca dari environment atau secret manager.
  • Kerberos dipakai untuk akses HDFS dan YARN di ekosistem Hadoop.
  • LDAP dan Ranger memberikan identitas serta policy akses terpusat.

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.