Konektor pgAudit sledzi strukturalny log audytu PostgreSQL i emituje jedna krawedz mapy dostepu na audytowany dostep do danych. Tryb odczyt/zapis jest pobierany doslownie z klasy pgAudit (READ, WRITE, DDL) — nigdy nie jest wnioskowany z tekstu SQL. Konektor jest tylko-do-odczytu nad plikiem logu i nigdy nie otwiera polaczenia do bazy danych.
Dla ogolnego modelu zrodel i struktury konfiguracji zacznij od Podlacz zrodlo. Ta strona obejmuje wymagania wstepne po stronie PostgreSQL, pelna powierzchnie konfiguracji, mechanike atrybucji i rozwiazania operacyjne dla produkcyjnych infrastruktur.
Wymagania wstepne PostgreSQL
Konektor czyta wyjscie pgAudit, wiec PostgreSQL musi byc skonfigurowany do jego
produkcji. Zainstaluj rozszerzenie (apt install postgresql-<version>-pgaudit na
Debian/Ubuntu), zaladuj je przez shared_preload_libraries, zrestartuj, nastepnie
CREATE EXTENSION pgaudit w kazdej bazie danych, ktora chcesz obserwowac.
Minimalne ustawienia postgresql.conf dla uzytecznego wyjscia:
shared_preload_libraries = 'pgaudit'
pgaudit.log = 'read, write' # READ i WRITE obejmuja dostep do danych
log_destination = 'jsonlog' # zalecane dla streamingu; csvlog tez dziala
logging_collector = on
log_directory = '/var/log/postgresql'
log_filename = 'postgresql.json'
Zrestartuj po shared_preload_libraries; przeladuj (SELECT pg_reload_conf())
po reszcie. Zweryfikuj uruchamiajac zapytanie i potwierdzajac, ze wpis pgAudit
pojawia sie w logu — pole message wpisu zawiera strukturalna linie pgAudit
(klasa, polecenie, nazwa obiektu). Jesli pojawiaja sie tylko standardowe
komunikaty PostgreSQL, rozszerzenie nie jest zaladowane lub nie jest skonfigurowane.
Konfiguracja
Konektor jest wybierany przez kind: "pgaudit" w pliku JSON
OLIVARES_SOURCES_CONFIG. Pelny przyklad:
{
"sources": [
{
"name": "prod-postgres",
"kind": "pgaudit",
"tenant": "acme",
"config": {
"log_path": "/var/log/postgresql/postgresql.json",
"format": "jsonlog",
"follow": "true",
"shared_accounts": "app_pool,reporting"
}
}
]
}
Wszystkie wartosci config sa lancuchami. Klucze sa wlasnoscia konektora pgAudit:
log_path(wymagany) — bezwzgledna sciezka do pliku logu PostgreSQL. Konektor czyta ten plik; nie odkrywa plikow logu wedlug konwencji.format—csvloglubjsonlog. Domyslniecsvlog. Kontroluje parser, ktorego uzywa konektor; musi odpowiadaclog_destination, ktory PostgreSQL faktycznie zapisuje.follow— gdy"true", sledz plik ciagly (tryb strumieniowy). Dotyczy tylkojsonlog. Plikcsvlogjest czytany jako wsad, poniewaz rekordy CSV moga obejmowac wiele linii, co sprawia, ze strumieniowe sledzenie jest zawodne. Zobacz Wsad vs streaming ponizej.shared_accounts— oddzielona przecinkami lista rol PostgreSQL lub wartosciapplication_name, ktore sa pulowane lub wspoldzielone miedzy wieloma wywolujacymi. Dostep przypisany do ktorejkolwiek z nich jest celowo oznaczanyapproximate. Zobacz Atrybucja i wspoldzielone konta.
Nie wymyslaj kluczy konfiguracji poza tymi czterema. Powierzchnia konfiguracji konektora jest celowo waska — czyta plik logu, nie zarzadza PostgreSQL.
Atrybucja i wspoldzielone konta
Mapa dostepu musi odpowiedziec “ktory agent to zrobil.” Wpisy logu pgAudit niosza
role PostgreSQL (uzytkownika) i, gdy jest ustawiony, application_name sesji.
Konektor uzywa obu do budowania pochodzenia krawedzi.
Tozsamosc per-agent zapewnia pewna krawedz. Gdy kazdy agent ustawia odrebny
application_name na swoim polaczeniu (lub uzywa dedykowanej roli), konektor
przypisuje kazdy dostep jednoznacznie i krawedz jest firm.
Wspoldzielone role skladaja sie do approximate. Gdy wielu agentow dzieli pule
polaczen, wspolne konto serwisowe lub ogolny application_name, konektor nie
moze rozdzielic wywolujacych. Kazdy dostep przez te tozsamosc jest oznaczany
approximate, a produkt mowi o tym otwarcie zamiast udawac, ze potrafi
odroznic agentow, ktorych nie potrafi. Dlatego shared_accounts istnieje:
deklarowanie pulowanych tozsamosci z gory mowi konektorowi, by oznaczal je
approximate natychmiast.
Implikacja zarzadcza jest bezposrednia: krawedz approximate nie moze wspierac
pewnego odkrycia najnizszych uprawnien. Jesli potrzebujesz zarzadzania per-agent
nad dostepem do bazy danych, wydaj poswiadczenia lub wartosci application_name
per-agent. Zobacz Wiernosc dla pelnego modelu atrybucji.
Poziom pokrycia
pgAudit to pokrycie na poziomie clean. Klasy READ, WRITE i DDL sa autorytatywne — podsystem audytu PostgreSQL klasyfikuje instrukcje, a konektor bierze te klasyfikacje doslownie. Nie ma wnioskowania, parsowania SQL ani heurystyki.
mode krawedzi to R (odczyt), RW (odczyt-zapis, dla klas WRITE i DDL) lub
pozostawiony jak dyktuje klasa. Konektor nigdy nie podnosi ani nie obniza tego,
co pgAudit zaraportowalo. Zobacz Wiernosc — pokrycie
jak clean porownuje sie do zrodel lossy i opaque.
Wsad vs streaming
csvlog— wsad. Rekordy CSV moga obejmowac wiele linii (zapytanie z osadzonymi nowymi liniami produkuje wieloliniowy wiersz), wiec strumieniowe sledzenie nie moze niezawodnie rozdzielac rekordow. Konektor czyta plik jako pelny wsad; ustawpoll_secondsna wpisie zrodla, by ponownie uruchamiac w interwale.jsonlogzfollow: "true"— streaming. Kazdy wpis JSON to pojedyncza linia, wiec sledzenie jest bezpieczne. Konektor trzyma plik otwarty i emituje krawedzie w miare jak PostgreSQL je zapisuje.
Dla krawedzi niemal w czasie rzeczywistym, jsonlog z follow jest zalecaną
konfiguracją. Dla okresowych audytow lub baz danych o mniejszym wolumenie, wsad
csvlog jest wystarczajacy.
Jak wygladaja krawedzie
Kazdy wpis logu pgAudit, ktory konektor parsuje, produkuje jedna krawedz mapy dostepu z tymi polami:
- Pochodzenie — rola PostgreSQL, kwalifikowana przez
application_namegdy jest obecna. Przyklad:reporting_agentlubapp_pool/invoice-service. - Zasob — w pelni kwalifikowany obiekt:
database.schema.table. Przyklad:prod.public.orders. - Tryb —
R(z klasy pgAudit READ) lubRW(z klasy pgAudit WRITE lub DDL). - Atrybucja —
firmjesli pochodzenie rozwiazuje sie do pojedynczej tozsamosci agenta,approximatejesli pasuje do wpisushared_accountslub nie moze byc rozrozniione. - Zrodlo — identyfikuje te instancje konektora po nazwie.
Krawedz nie niesie tekstu SQL, danych wierszy ani parametrow zapytania. Rejestruje tylko strukturalny fakt, ze tozsamosc uzyskala dostep do obiektu w danym trybie.
Uwagi operacyjne
Rotacja logow. Gdy PostgreSQL rotuje swoj plik logu (przez log_rotation_age
lub log_rotation_size), konektor musi byc skierowany na biezacy plik. Jesli
twoja rotacja zmienia nazwe aktywnego pliku, sledzenie follow bedzie kontynuowac
czytanie starego deskryptora pliku az sie wyczerpie, a nastepnie zatrzyma. Skieruj
log_path na stabilny symlink lub uzyj konwencji nazewnictwa, ktora konektor
moze sledzic. Konektor nie zarzadza rotacja sam.
Infrastruktury o duzym wolumenie. pgAudit moze produkowac znaczny wolumen
logow na zajetych bazach danych, szczegolnie z pgaudit.log = 'all'. Ogranicz
pgaudit.log do klas, ktorych potrzebujesz (typowo read, write) i rozważ
filtrowanie per-baza-danych lub per-rola przez pgaudit.log_relation, by
zredukowac szum bez utraty pokrycia.
Wiele instancji PostgreSQL. Kazda instancja potrzebuje wlasnego wpisu zrodla
w OLIVARES_SOURCES_CONFIG z odrębna name i wlasnym log_path. Nie ma
odkrywania wielu instancji — kazde zrodlo obserwuje dokladnie jeden plik logu.
Uprawnienia. Proces kolektora potrzebuje dostepu do odczytu pliku logu PostgreSQL. Nie potrzebuje polaczenia z baza danych, roli PostgreSQL ani jakiegokolwiek dostepu sieciowego do serwera bazy danych. Uprawnienie do odczytu systemu plikow to jedyne wymaganie.
Powiazane
- Podlacz zrodlo — ogolny model zrodel i struktura konfiguracji.
- Mapa dostepu — co te krawedzie buduja.
- Wiernosc — poziomy pokrycia i atrybucji.
- Uczciwosci i ograniczenia — co jest zweryfikowane vs na etapie projektowania.