![rds mysql log exports audit log](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-20-41.png)
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](https://www.latcoding.com/wp-content/uploads/2024/07/image-29.png)
![](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-35-28.png)
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](https://www.latcoding.com/wp-content/uploads/2024/07/image-32.png)
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](https://www.latcoding.com/wp-content/uploads/2024/07/image-31.png)
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:
![](https://www.latcoding.com/wp-content/uploads/2024/07/image-33.png)
Parameter group
Untuk membuat parameter group, masuk ke RDS > Parameter groups > Create parameter group:
![](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-04-24-49.png)
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](https://www.latcoding.com/wp-content/uploads/2024/07/image-36.png)
Setelah terbuat, masuk ke detail, klik Edit
![](https://www.latcoding.com/wp-content/uploads/2024/07/image-37.png)
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](https://www.latcoding.com/wp-content/uploads/2024/07/image-38.png)
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
![](https://www.latcoding.com/wp-content/uploads/2024/07/image-39.png)
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
![](https://www.latcoding.com/wp-content/uploads/2024/07/image-40.png)
Setelah terbuat, masuk ke detail, klik Add option
![](https://www.latcoding.com/wp-content/uploads/2024/07/image-41.png)
Masukkan:
- Option name: MARIADB_AUDIT_PLUGIN
- Option settings: biarkan default
- Apply immediately: Yes
Klik Add option
![MARIADB_AUDIT_PLUGIN, audit log mysql RDS](https://www.latcoding.com/wp-content/uploads/2024/07/image-42.png)
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
![](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-07-38.png)
- Pada bagian Additional configuration, sesuaikan:
- DB parameter group: database-1-test
- Option group: database-1-test
![](https://www.latcoding.com/wp-content/uploads/2024/07/image-43.png)
- Masih di Additional configuration, pada Log Exports centang Audit log
![](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-20-41-1.png)
- Scroll kebawah, klik Continue
- Lalu pilih Apply Immediately, agar konfigurasi langsung berubah
- Klik Modify DB instance
![](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-20-54.png)
- Tunggu beberapa saat, maka akan ada proses modifying dan configuring-log-exports pada instance MySQL RDS
![](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-22-22.png)
- Jika status available maka audit log sudah aktif
![](https://www.latcoding.com/wp-content/uploads/2024/07/image-44.png)
Cek audit log di Cloudwatch
Seharusnya log sudah tergenerate dan bisa dilihat pada cloudwatch.
- Buka service cloudwatch dengan mengetikkan keywoard cloudwatch pada kolom pencarian
![](https://www.latcoding.com/wp-content/uploads/2024/07/image-45.png)
- 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](https://www.latcoding.com/wp-content/uploads/2024/07/image-46.png)
- Pada tab Log streams, klik db identifier kalian, misal database-1-test
![audit log mysql RDS, log streams](https://www.latcoding.com/wp-content/uploads/2024/07/image-47.png)
- Log akan muncul. Paling atas adalah log lama, paling bawah log baru.
![audit log mysql RDS](https://www.latcoding.com/wp-content/uploads/2024/07/image-48.png)
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](https://www.latcoding.com/wp-content/uploads/2024/07/image-49.png)
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](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-28-22.png)
Test disconnect dari database
Sekarang saya tutup koneksi HeidiSQLnya, dicloudwatch akan ada log dengan state DISCONNECT
![](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-29-48.png)
Test buat database baru (CREATE DATABASE)
Saya buat table baru dengan nama db_test
![](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-30-45.png)
Log yang tergenerate dicloudwatch adalah `CREATE DATABASE …`
![](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-31-49.png)
Test buat table baru (CREATE TABLE)
Di heidisql saya buat table dengan nama tb_test dengan 2 column (id dan name)
![](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-32-48.png)
Maka log dicloudwatch akan tercatat juga lognya
![audit log mysql RDS](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-34-31.png)
Test insert data ke table (INSERT INTO)
Saya insert 1 data dari heidiSQL, id = 1 dan name = moko
![](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-34-55.png)
Log di cloudwatch yang tergenerate:
![](https://www.latcoding.com/wp-content/uploads/2024/07/Screenshot-from-2024-07-13-02-35-28-1.png)
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.
![](https://www.latcoding.com/wp-content/uploads/2024/07/image-50.png)
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!