Menggunakan pgAudit untuk membuat log aktivitas basis data - Amazon Aurora

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan pgAudit untuk membuat log aktivitas basis data

Lembaga keuangan, lembaga pemerintah, dan banyak industri perlu menyimpan log audit untuk memenuhi persyaratan peraturan. Dengan menggunakan ekstensi PostgreSQL Audit (pgAudit) dengan klastier DB Aurora PostgreSQL, Anda dapat menangkap catatan terperinci yang biasanya dibutuhkan oleh auditor atau untuk memenuhi persyaratan peraturan. Misalnya, Anda dapat mengatur ekstensi pgAudit untuk melacak perubahan yang dibuat pada basis data dan tabel tertentu, untuk merekam pengguna yang membuat perubahan, dan banyak detail lainnya.

Ekstensi pgAudit dibangun di atas fungsionalitas infrastruktur pencatatan log PostgreSQL asli dengan memperluas pesan log dengan lebih detail. Dengan kata lain, Anda menggunakan pendekatan yang sama untuk melihat log audit Anda seperti yang Anda lakukan untuk melihat pesan log apa pun. Untuk informasi selengkapnya tentang pencatatan log PostgreSQL, lihat File log basis data Aurora PostgreSQL.

Ekstensi pgAudit menyunting data sensitif seperti kata sandi cleartext dari log. Jika klaster DB Aurora PostgreSQL Anda dikonfigurasi untuk mencatat pernyataan bahasa manipulasi data (DHTML) seperti yang dijelaskan dalam Mengaktifkan pencatatan log kueri untuk klaster DB Aurora PostgreSQL, Anda dapat menghindari masalah kata sandi cleartext dengan menggunakan ekstensi PostgreSQL Audit.

Anda dapat mengonfigurasi audit pada basis data instans Anda dengan tingkat kekhususan yang tinggi. Anda dapat mengaudit semua basis data dan semua pengguna. Atau, Anda dapat memilih untuk mengaudit hanya basis data tertentu, pengguna, dan objek lainnya. Anda juga dapat secara eksplisit mengecualikan pengguna dan basis data tertentu agar tidak diaudit. Untuk informasi selengkapnya, lihat Mengecualikan pengguna atau basis data dari pencatatan log audit.

Mengingat jumlah detail yang dapat ditangkap, kami menyarankan jika Anda menggunakan pgAudit, Anda memantau konsumsi penyimpanan Anda.

Ekstensi pgAudit didukung pada semua versi Aurora PostgreSQL yang tersedia. Untuk daftar versi pgAudit yang didukung oleh versi Aurora PostgreSQL, lihat versi ekstensi untuk Amazon Aurora PostgreSQL di Release Notes for Aurora PostgreSQL.

Menyiapkan ekstensi pgAdit

Untuk menyiapkan ekstensi pgAudit pada klaster DB Aurora PostgreSQL, Anda terlebih dahulu menambahkan pgAudit ke pustaka bersama pada grup parameter klaster DB khusus untuk klaster DB Aurora PostgreSQL Anda. Untuk informasi cara membuat grup grup parameter klaster DB, lihat Menggunakan grup parameter. Selanjutnya, Anda menginstal ekstensi pgAudit. Terakhir, Anda menentukan basis data dan objek yang ingin Anda audit. Prosedur di bagian ini menunjukkan caranya kepada Anda. Anda dapat menggunakan AWS Management Console atau AWS CLI.

Anda harus memiliki izin sebagai peran rds_superuser untuk melakukan semua tugas ini.

Langkah-langkah berikut mengasumsikan bahwa klaster DB Aurora PostgreSQL Anda dikaitkan dengan grup parameter kluster DB khusus.

Mengatur ekstensi pgAudit
  1. Masuk ke AWS Management Console lalu buka konsol Amazon RDS di https://console.aws.amazon.com/rds/.

  2. Di panel navigasi, pilih Instans penulis klaster DB Aurora PostgreSQL Anda.

  3. Buka tab Konfigurasi untuk instans penulis klaster DB Aurora PostgreSQL. Di antara detail Instans, temukan tautan Grup parameter.

  4. Pilih tautan untuk membuka parameter kustom yang terkait dengan klaster DB Aurora PostgreSQL.

  5. Di kolom pencarian Parameter, ketik shared_pre untuk menemukan parameter shared_preload_libraries.

  6. Pilih Edit parameter untuk mengakses nilai properti.

  7. Tambahkan pgaudit ke daftar di kolom Nilai. Gunakan koma untuk memisahkan item dalam daftar nilai.

    Gambar parameter shared_preload_libaries dengan pgAudit ditambahkan.
  8. Boot ulang instans penulis klaster DB Aurora PostgreSQL Anda sehingga perubahan Anda pada parameter shared_preload_libraries berlaku.

  9. Ketika instans tersedia, verifikasi bahwa pgAudit yang telah diinisialisasi. Gunakan psql untuk terhubung ke instans penulis klaster DB Aurora PostgreSQL, kemudian jalankan perintah berikut.

    SHOW shared_preload_libraries; shared_preload_libraries -------------------------- rdsutils,pgaudit (1 row)
  10. Dengan pgAudit yang diinisialisasi, Anda sekarang dapat membuat ekstensi. Anda perlu membuat ekstensi setelah menginisialisasi pustaka karena ekstensi pgaudit menginstal pemicu peristiwa untuk mengaudit pernyataan bahasa definisi data (DDL).

    CREATE EXTENSION pgaudit;
  11. Tutup sesi psql.

    labdb=> \q
  12. Masuk ke AWS Management Console lalu buka konsol Amazon RDS di https://console.aws.amazon.com/rds/.

  13. Temukan parameter pgaudit.log dalam daftar lalu atur ke nilai yang sesuai untuk kasus penggunaan Anda. Misalnya, menyetel parameter pgaudit.log ke write seperti yang ditunjukkan pada gambar berikut menangkap sisipan, pembaruan, penghapusan, dan beberapa jenis lainnya yang berubah pada log.

    Gambar parameter pgaudit.log dengan pengaturan.

    Anda juga dapat memilih salah satu nilai berikut untuk parameter pgaudit.log.

    • none – Ini adalah default. Tidak ada perubahan basis data yang dibuat log.

    • semua – Semua dibuat log (baca, tulis, fungsi, peran, ddl, lain-lain).

    • ddl – Membuat log semua pernyataan bahasa definisi data (DDL) yang tidak disertakan dalam kelas ROLE.

    • fungsi – Membuat log panggilan fungsi dan blok DO.

    • lain-lain – Membuat log berbagai perintah, seperti DISCARD, FETCH, CHECKPOINT, VACUUM, dan SET.

    • baca – Membuat log SELECT dan COPY saat sumbernya adalah relasi (seperti tabel) atau kueri.

    • peran – Membuat log pernyataan yang terkait dengan peran dan hak istimewa, seperti GRANT, REVOKE, CREATE ROLE, ALTER ROLE, dan DROP ROLE.

    • write – Membuat log INSERT, UPDATE, DELETE, TRUNCATE, dan COPY ketika tujuan adalah relasi (tabel).

  14. Pilih Simpan perubahan

  15. Buka konsol Amazon RDS di https://console.aws.amazon.com/rds/.

  16. Pilih instans penulis klaster DB Aurora PostgreSQL dari daftar Basis Data untuk memilihnya, lalu pilih Boot ulang dari menu Tindakan.

Menyiapkan pgAudit

Untuk mengatur PGAudit menggunakanAWS CLI, Anda memanggil modify-db-parameter-groupoperasi untuk mengubah parameter log audit di grup parameter kustom Anda, seperti yang ditunjukkan dalam prosedur berikut.

  1. Gunakan perintah AWS CLI berikut untuk menambah pgaudit ke parameter shared_preload_libraries.

    aws rds modify-db-parameter-group \ --db-parameter-group-name custom-param-group-name \ --parameters "ParameterName=shared_preload_libraries,ParameterValue=pgaudit,ApplyMethod=pending-reboot" \ --region aws-region
  2. Gunakan perintah AWS CLI berikut untuk melakukan boot ulang instans penulis klaster DB Aurora PostgreSQL sehingga pustaka pgaudit dapat diinisialisasi.

    aws rds reboot-db-instance \ --db-instance-identifier writer-instance \ --region aws-region
  3. Ketika instans tersedia, Anda dapat memverifikasi bahwa pgaudit telah diinisialisasi. Gunakan psql untuk terhubung ke instans penulis klaster DB Aurora PostgreSQL, kemudian jalankan perintah berikut.

    SHOW shared_preload_libraries; shared_preload_libraries -------------------------- rdsutils,pgaudit (1 row)

    Dengan pgAudit yang diinisialisasi, Anda sekarang dapat membuat ekstensi.

    CREATE EXTENSION pgaudit;
  4. Tutup sesi psql sehingga Anda dapat menggunakan AWS CLI.

    labdb=> \q
  5. Gunakan perintah AWS CLI berikut untuk menentukan kelas pernyataan yang ingin dibuat log oleh sesi audit pencatatan log. Contoh menetapkan parameter pgaudit.log ke write, yang menangkap sisipan, pembaruan, dan penghapusan ke log.

    aws rds modify-db-parameter-group \ --db-parameter-group-name custom-param-group-name \ --parameters "ParameterName=pgaudit.log,ParameterValue=write,ApplyMethod=pending-reboot" \ --region aws-region

    Anda juga dapat memilih salah satu nilai berikut untuk parameter pgaudit.log.

    • none – Ini adalah default. Tidak ada perubahan basis data yang dibuat log.

    • semua – Semua dibuat log (baca, tulis, fungsi, peran, ddl, lain-lain).

    • ddl – Membuat log semua pernyataan bahasa definisi data (DDL) yang tidak disertakan dalam kelas ROLE.

    • fungsi – Membuat log panggilan fungsi dan blok DO.

    • lain-lain – Membuat log berbagai perintah, seperti DISCARD, FETCH, CHECKPOINT, VACUUM, dan SET.

    • baca – Membuat log SELECT dan COPY saat sumbernya adalah relasi (seperti tabel) atau kueri.

    • peran – Membuat log pernyataan yang terkait dengan peran dan hak istimewa, seperti GRANT, REVOKE, CREATE ROLE, ALTER ROLE, dan DROP ROLE.

    • write – Membuat log INSERT, UPDATE, DELETE, TRUNCATE, dan COPY ketika tujuan adalah relasi (tabel).

    Boot ulang instans penulis Aurora PostgreSQL DB klaster instans PostgreSQL DB menggunakan perintah berikut. AWS CLI

    aws rds reboot-db-instance \ --db-instance-identifier writer-instance \ --region aws-region

Audit objek basis data

Dengan pgAudit yang telah disiapkan di klaster DB Aurora PostgreSQL Anda dan dikonfigurasi untuk kebutuhan Anda, informasi lebih detail akan ditangkap dalam pembuatan log PostgreSQL. Misalnya, sementara konfigurasi pencatatan log PostgreSQL default mengidentifikasi tanggal dan waktu perubahan dibuat dalam tabel basis data, dengan ekstensi pgAudit entri log yang dapat menyertakan skema, pengguna yang membuat perubahan, dan detail lainnya tergantung pada bagaimana parameter ekstensi dikonfigurasi. Anda dapat menyiapkan audit untuk melacak perubahan dengan cara berikut ini.

  • Untuk setiap sesi, oleh pengguna. Untuk tingkat sesi, Anda dapat menangkap teks perintah yang sepenuhnya memenuhi syarat.

  • Untuk setiap objek, oleh pengguna dan basis data.

Kemampuan audit objek diaktifkan saat Anda membuat peran rds_pgaudit pada sistem Anda lalu akan menambahkan peran ini ke parameter pgaudit.role dalam grup parameter parameter khusus Anda. Secara default, parameter pgaudit.role tidak disetel dan satu-satunya nilai yang diizinkan adalah rds_pgaudit. Langkah-langkah berikut mengasumsikan bahwa pgaudit telah diinisialisasi dan bahwa Anda telah membuat ekstensi pgaudit dengan mengikuti prosedur di Menyiapkan ekstensi pgAdit.

Gambar file log PostgreSQL setelah mengatur pgAudit.

Seperti yang ditunjukkan dalam contoh ini, baris "LOG: AUDIT: SESSION" memberikan informasi tabel dan skemanya, di antara detail lainnya.

Menyiapkan audit objek
  1. Gunakan psql untuk terhubung ke instans penulis klaster DB Aurora PostgreSQL.

    psql --host=your-instance-name.aws-region.rds.amazonaws.com --port=5432 --username=postgrespostgres --password --dbname=labdb
  2. Buat peran basis data yang dinamai rds_pgaudit dengan menggunakan perintah berikut.

    labdb=> CREATE ROLE rds_pgaudit; CREATE ROLE labdb=>
  3. Tutup sesi psql.

    labdb=> \q

    Dalam beberapa langkah berikutnya, gunakan AWS CLI untuk memodifikasi parameter log audit di grup parameter khusus Anda.

  4. Gunakan perintah AWS CLI berikut untuk mengatur parameter pgaudit.role ke rds_pgaudit. Secara default, parameter ini kosong, dan rds_pgaudit merupakan satu-satunya nilai yang diizinkan.

    aws rds modify-db-parameter-group \ --db-parameter-group-name custom-param-group-name \ --parameters "ParameterName=pgaudit.role,ParameterValue=rds_pgaudit,ApplyMethod=pending-reboot" \ --region aws-region
  5. Gunakan perintah AWS CLI berikut untuk melakukan boot ulang instans penulis klaster DB Aurora PostgreSQL sehingga perubahan Anda pada parameter berlaku.

    aws rds reboot-db-instance \ --db-instance-identifier writer-instance \ --region aws-region
  6. Jalankan perintah berikut untuk mengonfirmasi bahwa pgaudit.role diatur kerds_pgaudit.

    SHOW pgaudit.role; pgaudit.role ------------------ rds_pgaudit

Untuk menguji pencatatan log pgAudit, Anda dapat menjalankan beberapa contoh perintah yang ingin Anda audit. Misalnya, Anda dapat menjalankan perintah berikut.

CREATE TABLE t1 (id int); GRANT SELECT ON t1 TO rds_pgaudit; SELECT * FROM t1; id ---- (0 rows)

Log basis data harus berisi entri yang serupa dengan entri berikut.

... 2017-06-12 19:09:49 UTC:...:rds_test@postgres:[11701]:LOG: AUDIT: OBJECT,1,1,READ,SELECT,TABLE,public.t1,select * from t1; ...

Untuk informasi tentang melihat log, lihat Memantau file log Amazon Aurora.

Untuk mempelajari lebih lanjut tentang ekstensi PGAudit, lihat PGAudit aktif. GitHub

Mengecualikan pengguna atau basis data dari pencatatan log audit

Seperti dibahas dalam File log basis data Aurora PostgreSQL, log PostgreSQL menghabiskan ruang penyimpanan. Menggunakan ekstensi pgAudit dapat menambah volume data yang dikumpulkan di log Anda ke berbagai tingkat, tergantung pada perubahan yang Anda lacak. Anda mungkin tidak perlu mengaudit setiap pengguna atau basis data di klaster DB Aurora PostgreSQL Anda.

Untuk meminimalkan dampak pada penyimpanan Anda dan untuk menghindari pengambilan catatan audit yang tidak perlu, Anda dapat mengecualikan pengguna dan basis data agar tidak diaudit. Anda juga dapat mengubah pencatatan log dalam sesi tertentu. Contoh berikut menunjukkan caranya kepada Anda.

catatan

Pengaturan parameter pada tingkat sesi lebih diutamakan daripada pengaturan dalam grup parameter klaster DB khusus untuk instans penulis klaster DB Aurora PostgreSQL. Jika Anda tidak ingin pengguna basis data melewati pengaturan konfigurasi pencatatan audit Anda, pastikan untuk mengubah izin mereka.

Misalkan klaster DB Aurora PostgreSQL Anda dikonfigurasi untuk mengaudit tingkat aktivitas yang sama untuk semua pengguna dan basis data. Anda kemudian memutuskan bahwa Anda tidak ingin mengaudit pengguna myuser. Anda dapat mematikan audit myuser dengan perintah SQL berikut.

ALTER USER myuser SET pgaudit.log TO 'NONE';

Kemudian, Anda dapat menggunakan kueri berikut untuk memeriksa kolom user_specific_settings untuk pgaudit.log agar mengonfirmasi bahwa parameter diatur ke NONE.

SELECT usename AS user_name, useconfig AS user_specific_settings FROM pg_user WHERE usename = 'myuser';

Anda akan melihat output seperti berikut ini.

user_name | user_specific_settings -----------+------------------------ myuser | {pgaudit.log=NONE} (1 row)

Anda dapat mematikan pencatatan log untuk pengguna tertentu di tengah-tengah sesi mereka dengan basis data menggunakan perintah berikut.

ALTER USER myuser IN DATABASE mydatabase SET pgaudit.log TO 'none';

Gunakan kueri berikut untuk memeriksa kolom pengaturan untuk pgaudit.log untuk kombinasi pengguna dan basis data tertentu.

SELECT usename AS "user_name", datname AS "database_name", pg_catalog.array_to_string(setconfig, E'\n') AS "settings" FROM pg_catalog.pg_db_role_setting s LEFT JOIN pg_catalog.pg_database d ON d.oid = setdatabase LEFT JOIN pg_catalog.pg_user r ON r.usesysid = setrole WHERE usename = 'myuser' AND datname = 'mydatabase' ORDER BY 1, 2;

Anda akan melihat output yang mirip dengan berikut ini.

user_name | database_name | settings -----------+---------------+------------------ myuser | mydatabase | pgaudit.log=none (1 row)

Setelah menonaktifkan audit myuser, Anda memutuskan bahwa Anda tidak ingin melacak perubahan ke mydatabase. Anda mematikan audit untuk basis data spesifik tersebut menggunakan perintah berikut.

ALTER DATABASE mydatabase SET pgaudit.log to 'NONE';

Kemudian, gunakan kueri berikut untuk memeriksa kolom database_specific_settings untuk mengonfirmasi bahwa pgaudit.log disetel ke NONE.

SELECT a.datname AS database_name, b.setconfig AS database_specific_settings FROM pg_database a FULL JOIN pg_db_role_setting b ON a.oid = b.setdatabase WHERE a.datname = 'mydatabase';

Anda akan melihat output seperti berikut ini.

database_name | database_specific_settings ---------------+---------------------------- mydatabase | {pgaudit.log=NONE} (1 row)

Untuk mengembalikan pengaturan ke pengaturan default untuk myuser, gunakan perintah berikut:

ALTER USER myuser RESET pgaudit.log;

Untuk mengembalikan pengaturan ke pengaturan default untuk basis data, gunakan perintah berikut ini.

ALTER DATABASE mydatabase RESET pgaudit.log;

Untuk mengatur ulang pengguna dan basis data ke pengaturan default, gunakan perintah berikut.

ALTER USER myuser IN DATABASE mydatabase RESET pgaudit.log;

Anda juga dapat menangkap peristiwa tertentu ke log dengan menyetel pgaudit.log ke salah satu nilai lain yang diizinkan untuk parameter pgaudit.log. Untuk informasi selengkapnya, lihat Daftar pengaturan yang diizinkan untuk parameter pgaudit.log.

ALTER USER myuser SET pgaudit.log TO 'read'; ALTER DATABASE mydatabase SET pgaudit.log TO 'function'; ALTER USER myuser IN DATABASE mydatabase SET pgaudit.log TO 'read,function'

Referensi untuk ekstensi pgAudit

Anda dapat menentukan tingkat detail yang Anda inginkan untuk log audit Anda dengan mengubah satu atau beberapa parameter yang tercantum di bagian ini.

Mengatur perilaku pgAudit

Anda dapat mengontrol pencatatan audit dengan mengubah satu atau beberapa parameter yang tercantum dalam tabel berikut.

Parameter Deskripsi

pgaudit.log

Menentukan kelas pernyataan yang akan dicatat oleh sesi audit pencatatan log. Nilai yang diizinkan termasuk ddl, fungsi, misc, baca, peran, tulis, tidak ada, semua. Untuk informasi selengkapnya, lihat Daftar pengaturan yang diizinkan untuk parameter pgaudit.log.

pgaudit.log_catalog

Saat diaktifkan (disetel ke 1), tambahkan pernyataan ke jejak audit jika semua relasi dalam pernyataan ada di pg_catalog.

pgaudit.log_level

Menentukan tingkat log untuk digunakan untuk entri log. Nilai yang diizinkan: debug5, debug4, debug3, debug2, debug1, info, notifikasi, peringatan, log

pgaudit.log_parameter

Ketika diaktifkan (diatur ke 1), parameter yang diteruskan dengan pernyataan ditangkap dalam log audit.

pgaudit.log_relation

Saat diaktifkan (disetel ke 1), log audit untuk sesi membuat entri log terpisah untuk setiap relasi (TABEL, TAMPILAN, dan sebagainya) yang direferensikan dalam pernyataan SELECT atau DML.

pgaudit.log_statement_once

Menentukan apakah pencatatan log akan mencakup teks pernyataan dan parameter dengan entri log pertama untuk kombinasi pernyataan/subpernyataan atau dengan setiap entri.

pgaudit.role

Menentukan peran utama yang akan digunakan untuk pencatatan log audit objek. Satu-satunya entri yang diizinkan adalah rds_pgaudit.

Daftar pengaturan yang diizinkan untuk parameter pgaudit.log

Nilai Deskripsi

tidak ada

Ini adalah default. Tidak ada perubahan basis data yang dibuat log.

semua

Semuanya dibuat log (baca, tulis, fungsi, peran, ddl, misc).

ddl

Membuat log semua pernyataan bahasa definisi data (DDL) yang tidak disertakan dalam kelas ROLE.

fungsi

Log berfungsi panggilan dan blok DO.

misc

Log berbagai perintah, seperti DISCARD, FETCH, CHECKPOINT, VACUUM dan SET.

baca

Log SELECT dan COPY ketika sumbernya adalah relasi (seperti tabel) atau kueri.

peran

Log pernyataan yang terkait dengan peran dan hak istimewa, seperti GRANT, REVOKE, CREATE ROLE, ALTER ROLE, dan DROP ROLE.

tulis

Log INSERT, UPDATE, DELETE, TRUNCATE, dan COPY ketika tujuan adalah relasi (tabel).

Untuk mencatat beberapa jenis peristiwa dengan audit sesi, gunakan daftar yang dipisahkan koma. Untuk membuat log semua jenis acara, atur pgaudit.log ke ALL. Boot ulang instans DB Anda untuk menerapkan perubahan.

Dengan objek audit, Anda dapat memperbaiki pencatatan log audit untuk bekerja dengan relasi spesifik. Misalnya, Anda dapat menentukan bahwa Anda ingin pencatatan log audit untuk operasi READ di satu tabel atau beberapa.