PostgreSQL — pgaudit Aracı ile Auditing Çözümü

Merhabalar, bu çalışmada PostgreSQL içerisinden audit çözümleri ile birlikte sistemde yapılan değişiklikleri nasıl takip edebileceğimizi ve analiz edebileceğimizi anlatmaya çalışacağım. Öncelikle PostgreSQL veritabanı sisteminde audit çözümü için bir konfigürasyon ile ilerleyeceğiz daha sonrasında bu audit loglarını sürekli olarak gerçek zamanlı olacak şekilde bir ELK altyapısına besleyip analizlerini yapacağız.

Çalışmadaki konu başlıkları ve akış aşağıdaki gibidir.

  1. PostgreSQL ortamında pgaudit ile audit özelliklerinin devreye alınması
  2. PostgreSQL audit loglarının ELK altyapısına gerçek zamanlı transfer edilmesi
  3. ELK altyapısı üzerinde analizlerin yapılması

PostgreSQL Audit Özelliğinin Aktif Edilmesi

PostgreSQL üzerinde audit çözümü için pgaudit isimli aracı kullanmayı tercih ettim. Bu araç, PostgreSQL için geliştirilmiş bir araçtır ve sisteme sonradan entegre edilebilir. Pgaudit ile birlikte sistemdeki DML ve DDL işlemlerini loglamak mümkündür. Bu aracın aktif edilmesi için öncelikle aşağıdaki adımların tamamlanması gerekmektedir.

İlk etapta pgaduit paketlerinin işletim sistemi seviyesinde kurulması gerekmektedir. Bunun için mevcut PostgreSQL’in çalıştığı ortama aşağıdaki paketin kurulması gerekmektedir.

apt-get install  postgresql-13-pgaudit

Daha sonrasında ise, PostgreSQL terminali üzerinden aşağıdaki konfigürasyonların uygunlanması ve ardından PostgreSQL servisinin restart edilmesi gerekmektedir.

ALTER SYSTEM SET shared_preload_libraries TO 'pgaudit';ALTER SYSTEM SET pgaudit.log TO 'read,write,ddl';ALTER SYSTEM SET pgaudit.log_catalog TO 'on';ALTER SYSTEM SET pgaudit.log_client TO 'off';ALTER SYSTEM SET pgaudit.log_level TO 'log';ALTER SYSTEM SET pgaudit.log_parameter TO 'off';ALTER SYSTEM SET pgaudit.log_relation TO 'off';ALTER SYSTEM SET pgaudit.log_statement_once TO 'off';

Bu işlemler sonrasında ise, audit loglarında yani standart postgresql log dosyalarında bu şekilde auit işlemlerini görebiliriz.

2021–11–13 18:12:04.235 UTC [1] LOG: database system is ready to accept connections

2021–11–13 18:12:53.793 UTC [64] LOG: AUDIT: SESSION,1,1,DDL,CREATE DATABASE,,,create database demo4;,<none>

Not: Bu çalışma, mevcut halde kurulu olan bir PostgreSQL veritabanı altyapısında uygulanmıştır. PostgreSQL ortamını da kurmak gerekiyorsa, bu işlemlere önce kurulum adımları dahil edilmelidir.

PostgreSQL Loglarının ELK Altyapısına Beslenmesi

PostgreSQL loglarının ELK altyapısına beslemek için fluenbit aracını kullanabiliriz. Fluentbit ile bizim sahip olduğumuz log dosyalarını eş zamanlı olarak hedef olarak belirttiğimiz ELK altyapısına beslememiz mümkündür. Fluentbit deploymentını PostgreSQL’in koşmakta olduğu lokasyona yapabiliriz.

Fluentbit deploymentını yapmadan önce, referanslar kısmındaki işletim sistemi özelindeki paket gereksinimlerini kontrol etmek gerekmektedir. Burada üzerinde çalıştığım sürüm debian 10 olduğu için ona göre bir deployment yapılmıştır.

wget -qO - https://packages.fluentbit.io/fluentbit.key | sudo apt-key add -

Aşağıdaki satırı sources.list dosyasına eklememiz gerekiyor.

deb https://packages.fluentbit.io/debian/buster buster mainsudo apt-get install td-agent-bitsudo service td-agent-bit start

Fluentbit kurulumundan sonra, postgresql log dizini için fluentbit konfigürasyon dosyasına aşağıdaki INPUT ve OUTPUT kaydını eklememiz gerekmektedir.

Fluentbit konfigürasyon dosyası(ön tanımlı dosya yolu): /etc/td-agent-bit/td-agent-bit.conf

[INPUT]
Name tail
Tag pgs_logs
Path /var/log/postgresql/*
Mem_Buf_Limit 8MB
Skip_Long_Lines On
Refresh_Interval 10
[OUTPUT]
Name es
Match *
Host elasticsearch_ip
Port 9200
Index fluent_bit
Type pgs_logs

Bu işlemlerden sonra Elasticsearch üzerinde fluent_bit index’i create edilmiş ve sürekli sunucudan beslenecek duruma gelmiştir. Bundan sonrasında kibana üzerinde dashboard’umuza bakabiliriz ve veriyi görselleştirebiliriz.

Aşağıda görüleceği üzere, postgresql log dosyalarından AUIDIT formatında loglar kibana üzerinde mevcuttur.

İsteğe göre buradan kibana dashboardları oluşturulabilir ve arzu edilen ihtiyaçlara göre filtreler ile farklı monitoring pratikleri uygulanabilir. Bu çalışmada dikkat edilmesi gereken bazı noktalar aşağadaki gibidir.

  • ELK altyapısı kurulu ve kullanıma hazır varsayılmıştır. Bu yapının kurulumları ve stack haline getirilmesi farklı bir konudur.
  • Fluentbit aracında kullanılan konfigürasyonlar bu amaç ve kapsam içindir. Bunun içindeki ihityaçlar ve konfigürasyonlar için ürünün dökümantasyonu kontrol edilmelidir.
  • Yazıda bahsedilen PostgreSQL parametreleri sadece bu konu ve kapsam ile ilgilidir. Bunun dışındaki parametreler ya da değişiklikler kapsam dışıdır.
  • Pgaudit aracı, veritabanı üzerindeki sorgularda ya da işlemlerde performans kaybına neden olabilir. Bu veritabanı üzerinde çalışan sorguların sıklığına, sorguların tipine ve performans beklentisine göre değişkenlik gösterir. Ancak pgaudit’in getirebileceği performans farkları göz ardı edilmemelidir.

Sevgiler,
Demir.

Referans

--

--

Database Platform Engineer | Bogazici University — Software Engineering

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store