Episode ini membahas keamanan Redis: autentikasi dengan requirepass, Access Control Lists (ACL) untuk permission user yang granular, enkripsi in-transit dengan TLS, serta hardening jaringan lewat bind, protected-mode, dan rename-command untuk perintah berbahaya.

Redis cepat, tapi kecepatan tanpa keamanan adalah bencana. Instance Redis yang terekspos ke internet tanpa autentikasi adalah target favorit — skrip jahat bisa FLUSHALL data kalian dalam sekejap. Episode 14 ini membahas pertahanan berlapis untuk Redis: autentikasi, ACL, TLS, dan hardening jaringan.
Kalian akan belajar dari mekanisme paling sederhana (requirepass) sampai kontrol akses user yang granular dengan ACL, lalu melindungi data in-transit dengan TLS, dan menutup lubang jaringan lewat bind, protected-mode, dan menonaktifkan perintah berbahaya.
Cara paling sederhana melindungi Redis: satu password untuk semua koneksi, diatur requirepass di redis.conf:
redis-cli CONFIG SET requirepass "rahasia-kuat"
redis-cli -a "rahasia-kuat" PINGCONFIG SET requirepass "rahasia-kuat" mengaktifkan password. Setelah itu, setiap koneksi wajib autentikasi — via -a di redis-cli, atau AUTH di session interaktif. Tanpa autentikasi, perintah akan error NOAUTH.
Danger
requirepass melindungi siapa yang bisa masuk, tapi semua user memakai password yang sama — tidak ada pemisahan hak akses. Untuk lingkungan multi-service, ACL di bawah adalah jawaban yang benar.
Redis 6+ memperkenalkan ACL: kalian bisa mendefinisikan banyak user, masing-masing dengan password, scope key, dan daftar perintah yang diizinkan. Ini menggantikan model satu-password-untuk-semua.
redis-cli ACL SETUSER appuser on >secure_password ~app:* +@read +@write -@dangerousredis-cli ACL SETUSER appuser on >secure_password ~app:* +@read +@write -@dangerous mendefinisikan user appuser yang: aktif (on), berpassword secure_password (>), hanya bisa mengakses key pola app:* (~), diizinkan command kategori read dan write (+@read +@write), dan dilarang menggunakan command dangerous (-@dangerous).
redis-cli ACL LIST
redis-cli ACL GETUSER appuser
redis-cli -u redis://appuser:secure_password@127.0.0.1:6379/0 GET app:1ACL LIST menampilkan semua user dan aturannya. ACL GETUSER menampilkan detail satu user. Koneksi sebagai appuser di atas hanya bisa menjalankan perintah yang diizinkan pada key app:* — mencoba FLUSHALL atau akses key user:1 akan ditolak dengan error NOPERM.
| User | Izin | Tujuan |
|---|---|---|
default | Minim (misal hanya +ping) | Cadangan, admin via mekanisme lain |
app | ~app:* +@read +@write -@dangerous | Service aplikasi |
worker | +@read +blpop +xreadgroup +xack | Consumer queue |
admin | +@all | Operasional & debugging |
Batasi user sesuai peran terkecil yang dibutuhkan (least privilege). Password default juga sebaiknya diganti atau dinonaktifkan.
Data yang lewat jaringan telanjang bisa disadap. Aktifkan tls-port dan berikan sertifikat:
tls-port 6380
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
tls-ca-cert-file /etc/redis/tls/ca.crttls-port 6380 membuka port enkripsi. Client terhubung dengan --tls dan verifikasi sertifikat. Idealnya juga atur tls-auth-clients yes untuk mutual TLS — server dan client saling memverifikasi.
redis-cli --tls -p 6380 \
--cacert /etc/redis/tls/ca.crt \
--cert /etc/redis/tls/redis-client.crt \
--key /etc/redis/tls/redis-client.keyredis-cli --tls -p 6380 terhubung ke port TLS dengan sertifikat CA dan pasangan client cert/key. Di produksi, hal yang sama dilakukan library aplikasi dengan parameter TLS masing-masing.
Mulai dari yang paling dasar: jangan pernah mengekspos Redis ke internet.
redis-cli CONFIG GET bind
redis-cli CONFIG GET protected-modeCONFIG GET bind menampilkan interface yang dilayani Redis — set ke 127.0.0.1 untuk akses lokal saja. protected-mode yes otomatis aktif: Redis hanya menerima koneksi eksternal jika punya password atau bind ke IP publik secara eksplisit. Kombinasi bind 127.0.0.1 + protected-mode yes adalah posisi bertahan paling aman.
Perintah destruktif seperti FLUSHALL, FLUSHDB, dan DEBUG tidak perlu dipakai aplikasi. Nonaktifkan dengan rename-command:
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command DEBUG ""
rename-command SHUTDOWN ""rename-command FLUSHALL "" menghapus perintah sepenuhnya (string kosong = tidak ada alias). Tim operasional yang masih butuh menjalankannya bisa memberi nama tersembunyi, misal rename-command FLUSHALL "f5f5...", dan menyimpannya di secret manager.
Episode 14 membekali kalian keamanan berlapis: requirepass untuk autentikasi dasar, ACL untuk permission user granular, TLS untuk enkripsi in-transit, serta hardening bind, protected-mode, dan rename-command.
Inti yang harus dibawa pulang:
requirepass melindungi akses dengan satu password untuk semua koneksi.ACL SETUSER appuser on >pass ~app:* +@read +@write -@dangerous adalah pola dasar.tls-port 6380) mengenkripsi lalu lintas; mutual TLS menambah kekuatan.bind 127.0.0.1 + protected-mode yes meminimalkan eksposur jaringan.rename-command FLUSHALL "" menonaktifkan perintah berbahaya.Di episode 15 selanjutnya kita membahas Redis Stack & Modules — RedisJSON untuk dokumen JSON native, RediSearch untuk full-text search, dan RedisTimeSeries untuk time-series data. Kalian akan melihat Redis bertransformasi dari key-value store menjadi multi-model database. Lanjut!