0

Mengaktifkan audit log MySQL RDS

rds mysql log exports audit log

Di MySQL RDS kita bisa mengaktifkan beberapa log, salah satunya audit log.

Audit log berisi catatan aktifitas server berupa:

  • kapan user/client melakukan connect dan disconnect ke database
  • IP user yang connect ke database
  • database dan table mana saja yang diakses oleh user
  • statement (DDL atau DML) yang diexecute oleh user

Contohnya:

audit log mysql RDS
Gambar diatas, user admin melakukan koneksi ke database melalui IP 120.188.6.24 tanggal 2024-07-12 19:27:16 (UTC).
Gambar diatas, user admin melakukan insert data ke database db_test pada table tb_test tanggal 2024-07-12 19:34:46 (UTC).

Cara kerja MySQL RDS menggenerate audit log

MySQL RDS akan menggenerate audit log ke file/table log (tergantung konfigurasi) di server lalu dikirimkan ke service Cloudwatch agar bisa ditampilkan lognya.

audit log mysql RDS

Ditutorial ini kita akan mengeset write lognya ke file supaya lebih cepat (bukan ke table, *karena kalau ke table akan mempengaruhi performa database ketika workloadnya sedang tinggi. (Baca bagian: Note: Enabling table logging…).

Spesifikasi MySQL RDS

Spesifikasi MySQL RDS yang saya gunakan adalah:

  • MySQL versi 8.0.35 Community Edition

Cara mengaktifkan audit log MySQL RDS

Untuk mengaktifkan audit log, ada 2 custom konfigurasi RDS yang harus kita buat terlebih dahulu, lalu kita kaitkan ke instance MySQL RDS:

  • Parameter group (log_output: FILE)
  • Option group (option: MARIADB_AUDIT_PLUGIN)
audit log mysql RDS

Note: Jika kalian sudah mempunyai custom konfigurasi parameter dan option group (bukan default), tidak perlu buat baru lagi. Cukup modifikasi yang sudah ada.

Namun karena disini saya masih menggunakan default parameter dan option group, saya harus konfigurasi ulang parameter dan option groupnya di instance MySQL RDS, seperti gambar dibawah:

*Masih menggunakan konfigurasi default (default:mysql8-0), harus diubah ke custom.

Parameter group

Untuk membuat parameter group, masuk ke RDS > Parameter groups > Create parameter group:

Isi parameter group, saya isi dengan nama db-identifiernya (database-1-test):

  • Parameter group name: database-1-test
  • Description: database-1-test
  • Engine type: MySQL Community
  • Parameter group family: mysql8.0
  • Type: DB parameter group

Klik Create

parameter group fro enabling audit log mysql rds

Setelah terbuat, masuk ke detail, klik Edit

Cari log_output dan ubah valuenya ke FILE, klik save changes.

Dengan mengeset log_output = FILE, berarti log akan digenerate ke dalam file didalam server MySQL RDS

mysql log_output=FILE

Nantinya parameter group ini akan kita kaitkan ke instance MySQL RDS, namun kita lanjut ke pembuatan option group terlebih dahulu.

Option group

Masuk ke RDS > Option groups > Create group

Isi option group, saya isi dengan nama db-identifier (database-1-test), klik Create

  • Name: database-1-test
  • Description: database-1-test
  • Engine: mysql
  • Major Engine Version: 8.0

Setelah terbuat, masuk ke detail, klik Add option

Masukkan:

  • Option name: MARIADB_AUDIT_PLUGIN
  • Option settings: biarkan default
  • Apply immediately: Yes

Klik Add option

MARIADB_AUDIT_PLUGIN, audit log mysql RDS

Option MARIADB_AUDIT_PLUGIN ini berisi konfigurasi audit, dimana log audit disimpan, berapa lama retentionnya, eventnya apa saja. Bisa dipelajari disini MariaDB Audit Plugin support for MySQL.

Kaitkan konfigurasi parameter & option group ke instance MySQL RDS dan aktifkan audit log

Setelah custom parameter dan option group terbuat, selanjutnya kita kaitkan konfigurasi tersebut ke instance MySQL RDS.

  • Masih di dashboard RDS
  • Pilih instance database yang mau diaktifkan audit lognya. Contoh disini saya ingin mengaktifkan audit log untuk DB identifier database-1-test
  • Klik Modify
  • Pada bagian Additional configuration, sesuaikan:
    • DB parameter group: database-1-test
    • Option group: database-1-test
  • Masih di Additional configuration, pada Log Exports centang Audit log
  • Scroll kebawah, klik Continue
  • Lalu pilih Apply Immediately, agar konfigurasi langsung berubah
  • Klik Modify DB instance
  • Tunggu beberapa saat, maka akan ada proses modifying dan configuring-log-exports pada instance MySQL RDS
  • Jika status available maka audit log sudah aktif

Cek audit log di Cloudwatch

Seharusnya log sudah tergenerate dan bisa dilihat pada cloudwatch.

  • Buka service cloudwatch dengan mengetikkan keywoard cloudwatch pada kolom pencarian

  • Pada dashboard cloudwatch, masuk ke menu Log > Log groups. Akan ada log dengan nama /aws/rds/instance/database-1-test/audit, disitulah audit log tersimpan
  • Klik log tersebut untuk melihat detail
audit log mysql RDS
  • Pada tab Log streams, klik db identifier kalian, misal database-1-test
audit log mysql RDS, log streams
  • Log akan muncul. Paling atas adalah log lama, paling bawah log baru.
audit log mysql RDS

Test Audit log

Kita test connect, disconnect, DML dan DDL, apakah lognya tergenerate di cloudwatch?

Test connect ke database

Disini saya test login ke database menggunakan HeidiSQL.

test connect to mysql rds

Kita lihat dicloudwatch, akan ada log dengan state CONNECT. Artinya ada yang connect ke database menggunakan user admin, IP 120.188.6.24, jam 2024-07-12 19:27:16 (UTC).

audit log mysql RDS

Test disconnect dari database

Sekarang saya tutup koneksi HeidiSQLnya, dicloudwatch akan ada log dengan state DISCONNECT

Test buat database baru (CREATE DATABASE)

Saya buat table baru dengan nama db_test

Log yang tergenerate dicloudwatch adalah `CREATE DATABASE …`

Test buat table baru (CREATE TABLE)

Di heidisql saya buat table dengan nama tb_test dengan 2 column (id dan name)

Maka log dicloudwatch akan tercatat juga lognya

audit log mysql RDS

Test insert data ke table (INSERT INTO)

Saya insert 1 data dari heidiSQL, id = 1 dan name = moko

Log di cloudwatch yang tergenerate:

Harga

Untuk harga mengaktifkan auditlog RDS tergantung dari seberapa banyak traffic RDS. Semakin besar trafficnya, maka data yang dicollect dari cloudwatch ke RDS akan semakin besar juga (istilahnya: custom log data ingested). Per GB adalah $0.70.

Just sharing saja, waktu itu saya kena charge $197 cuma dalam waktu seminggu. Setelah dicek ternyata penyebabnya adalah traffic RDSnya yang besar.

Kesimpulan

  • Audit log pada MySQL RDS bisa diaktifkan dengan mengkonfigurasi parameter dan option group terlebih dahulu
  • Audit log akan ditampilkan lognya di service cloudwatch pada menu Log > Log groups
  • Log yang tergenerate adalah CONNECT, DISCONNECT, DDL, DML
  • Setingan audit log ada di option group: MARIADB_AUDIT_PLUGIN
  • Harga untuk mengaktifkan auditlog RDS akan cukup besar jika traffic RDSnya besar

Semoga bermanfaat!

Ambar Hasbiyatmoko

Hello, I'm web developer. Passionate about programming, web server, and networking.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.