Episode ini membahas mengamankan koneksi database dengan TLS, konfigurasi autentikasi database dan service account, enkripsi payload di Kafka serta retensi data sensitif, dan strategi GDPR/PII compliance dan data masking.

Data yang mengalir dari database ke Kafka melewati beberapa titik yang bisa disadap: jaringan antara connector dan database, jaringan antara worker dan broker, serta storage Kafka itu sendiri. Episode 10 ini membahas cara mengamankan setiap titik tersebut, sekaligus menangani aspek privasi seperti PII dan kepatuhan GDPR.
Prinsip yang akan kalian pegang sepanjang episode ini sederhana: jangan pernah mengirim data sensitif lebih jauh dari yang diperlukan, dan selalu enkripsi di setiap hop. Setiap properti yang dibahas punya peran dalam mewujudkan prinsip tersebut.
Koneksi antara Debezium dan database sumber harus dienkripsi. Untuk MySQL, Debezium mendukung mode SSL berikut:
{
"database.ssl.mode": "required",
"database.ssl.truststore": "/kafka/truststore.jks",
"database.ssl.truststore.password": "changeme"
}Nilai database.ssl.mode yang tersedia:
disabled: tanpa enkripsi — hanya untuk development.preferred: enkripsi jika server mendukung.required: enkripsi wajib, tanpa verifikasi identitas server.verify_ca dan verify_identity: enkripsi plus verifikasi sertifikat.Untuk PostgreSQL, properti database.sslmode memakai nilai standar libpq seperti require dan verify-full. Siapkan truststore berisi CA di dalam volume yang di-mount ke container connect.
Verifikasi bahwa koneksi TLS benar-benar aktif dengan mengecek log connector: pesan yang menyebutkan cipher suite atau koneksi terenkripsi menandakan TLS bekerja. Jangan hanya bergantung pada konfigurasi — pastikan koneksi yang terjadi memang terenkripsi.
Kombinasikan TLS dengan pengaturan database.ssl.mode yang sesuai tingkat kepercayaan terhadap infrastruktur kalian. Di lingkungan dengan CA internal, verify_identity adalah pilihan yang paling aman karena sekaligus memvalidasi hostname server.
Connector berjalan dengan identitas khusus yang kita buat di episode 3. Untuk produksi, identitas ini harus mengikuti prinsip privilege minimal dan bisa diaudit:
CREATE USER 'debezium'@'%' IDENTIFIED BY 'dbz';
GRANT SELECT, RELOAD, SHOW DATABASES,
REPLICATION SLAVE, REPLICATION CLIENT
ON *.* TO 'debezium'@'%';Kredensial tidak boleh ditulis mentah di konfigurasi. Gunakan environment variable atau secrets dari vault yang di-resolve saat connector didaftarkan:
{
"database.user": "${env:DEBEZIUM_DB_USER}",
"database.password": "${env:DEBEZIUM_DB_PASSWORD}"
}Dengan pola ${env:...}, kata sandi tidak pernah muncul di REST API maupun file konfigurasi connector.
Data yang sampai di Kafka juga perlu diamankan. Lapisan yang disarankan:
Selain enkripsi, kelola retensi: data sensitif tidak boleh hidup selamanya di topic. Atur retensi sesuai kebijakan penyimpanan:
docker exec -it kafka /opt/kafka/bin/kafka-configs.sh \
--bootstrap-server localhost:9092 \
--alter --entity-type topics --entity-name dbserver1.inventory.customers \
--add-config retention.ms=2592000000Dengan retention.ms: 2592000000 (30 hari), data pribadi tidak tersimpan lebih lama dari batas kebijakan.
Kepatuhan GDPR menuntut data pribadi dilindungi dan bisa dihapus. Dua alat utama Debezium untuk ini:
Pertama, filtering kolom agar PII tidak pernah keluar dari database. Kedua, MaskField SMT untuk mengganti nilai sensitif dengan placeholder:
{
"transforms": "mask",
"transforms.mask.type": "org.apache.kafka.connect.transforms.MaskField$Value",
"transforms.mask.fields": "email,phone_number",
"transforms.mask.replacement": "***"
}Dengan MaskField$Value, kolom email dan phone_number diganti *** di semua event, sehingga data asli tidak pernah meninggalkan zone aman.
Warning
Masking SMT bekerja di sisi payload, bukan enkripsi. Untuk kolom yang benar-benar sensitif, lakukan enkripsi field-level dan kelola kunci dekripsi secara terpisah dari pipeline.
Episode 10 melengkapi dimensi keamanan pipeline CDC: TLS untuk koneksi database, service account dengan privilege minimal dan kredensial dari secrets, enkripsi serta retensi di Kafka, dan kombinasi filtering serta masking untuk kepatuhan privasi.
Inti yang harus dibawa pulang:
required atau lebih ketat.Di episode 11 selanjutnya kita akan membahas connector lifecycle dan GitOps — mengelola konfigurasi connector sebagai code, deploy lewat GitOps dan automation, versioning dan rollback, serta validasi sebelum rollout.