Auditing in de informatietechnologie (IT) is een proces waarbij de IT-infrastructuur van een organisatie wordt onderzocht om te zorgen dat wordt voldaan aan de vereisten die worden opgelegd door erkende normen of vastgesteld beleid. Regels voor gegevensbescherming, zoals de nieuwe AVG-regelgeving, worden steeds strenger om gebruikersgegevens te beschermen, dus het is belangrijk dat uw database-audits goed zijn opgezet om ervoor te zorgen dat zowel uw toepassings- als gebruikersgegevens beschermd zijn tegen kwetsbaarheden. In deze blogpost bespreken we pgAudit – een tool die de auditlogboeken genereert die nodig zijn om de audit van PostgreSQL te vergemakkelijken.
Wat is pgAudit?
De PostgreSQL-auditextensie, pgAudit, is een open source-extensie die de gebeurtenissen in een PostgreSQL-database registreert in een gedetailleerd auditlogboek. Het maakt gebruik van de native PostgreSQL-logboekregistratie, dus de auditlogboeken zullen deel uitmaken van de PostgreSQL-logboeken. De extensie is gebaseerd op het 2ndQuadrant pgAudit-project, geschreven door Simon Riggs, Abhijit Menon-Sen en Ian Barwick, en bevat verbeteringen door David Steele van Crunchy Data.
Waarom pgAudit over log_statement=all?
We kunnen alle statements in PostgreSQL loggen door gewoon log_statement=all
in te stellen . Dus waarom überhaupt pgAudit gebruiken? De basisregistratie van instructies (met behulp van log_statement
) geeft alleen de bewerkingen weer die op de database zijn uitgevoerd. Het biedt niet de mogelijkheid om bewerkingen te filteren en de logboeken hebben niet de juiste opmaak die vereist is voor controle. pgAudit biedt bovendien granulariteit voor het loggen van specifieke klassen van instructies zoals READ
(SELECT
en COPY
), WRITE
(INSERT
, UPDATE
, DELETE
, enz.), DDL
enz. Verder biedt het auditing op objectniveau waarbij alleen bewerkingen op specifieke relaties worden vastgelegd.
Een ander voordeel van pgAudit boven het loggen van basisstatements is dat het de details van de uitgevoerde bewerking geeft in plaats van alleen de gevraagde bewerking te loggen. Overweeg bijvoorbeeld om het anonieme codeblok uit te voeren met een DO-statement.
DO $$ BEGIN EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)'; END $$;
Het loggen van basisstatements resulteert in:
2020-12-20 23:40:11 UTC:157.230.232.139(53064):sgpostgres@test:[9091]: LOG: statement: DO $$ BEGIN EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)'; END $$;
pgAudit zal dezelfde bewerking loggen als:
2020-12-20 23:40:11 UTC:157.230.232.139(53064):sgpostgres@test:[9091]: LOG: AUDIT: SESSION,4,1,FUNCTION,DO,,,"DO $$ BEGIN EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)'; END $$;",<not logged> 2020-12-20 23:40:11 UTC:157.230.232.139(53064):sgpostgres@test:[9091]: LOG: AUDIT: SESSION,4,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE important_table (id INT),<not logged>
Het bovenstaande geeft duidelijk de pgAudit-functionaliteit aan die de bewerking en de interne onderdelen ervan logt met gestructureerde uitvoer die het zoeken vergemakkelijkt.
PostgreSQL controleren met pgAuditClick To TweetHoe pgAudit installeren?
pgAudit is een extensie die kan worden gedownload van de PostgreSQL-repository, of kan worden gecompileerd en gebouwd vanaf de broncode. Als eerste stap moet het pakket worden gedownload en geïnstalleerd op de machine waarop PostgreSQL draait (dit uitbreidingspakket is vooraf geïnstalleerd op alle ScaleGrid PostgreSQL-implementaties).
Eenmaal geïnstalleerd, moet het in PostgreSQL worden geladen. Dit wordt bereikt door pgaudit
. toe te voegen naar de shared_preload_libraries
configuratieparameter. Een herstart van PostgreSQL is vereist om deze configuratiewijziging effectief te laten zijn. De volgende stap is om de extensie op de database in te schakelen door CREATE EXTENSION pgaudit
uit te voeren. .
Nu de extensie gereed is, moeten we ervoor zorgen dat de configuratieparameters voor de extensie zijn ingesteld om te beginnen met loggen. Dit kan zo simpel zijn als het instellen van de parameter pgaudit.log
waarde toekennen aan all
en de pgAudit begint in te loggen in session
modus.
Nu we weten hoe we pgAudit moeten installeren en inschakelen, gaan we de twee modi voor auditregistratie bespreken, sessie en object.
Sessie-auditregistratie
In de sessiemodus logt pgAudit alle bewerkingen die door een gebruiker zijn uitgevoerd. Instellen van de pgaudit.log
parameter naar een van de gedefinieerde waarden, behalve NONE
, schakelt het loggen van sessie-audits in. De pgaudit.log
parameter specificeert de klassen van instructies die worden gelogd in de sessiemodus. De mogelijke waarden zijn:READ
, WRITE
, FUNCTION
, ROLE
, DDL
, MISC
, MISC_SET
, ALL
en NONE
.
De pgaudit.log
instellen parameter naar ALL
logt alle verklaringen. De parameter kan meerdere klassen accepteren met behulp van een door komma's gescheiden lijst en specifieke klassen kunnen worden uitgesloten met een – teken. Als u bijvoorbeeld alle verklaringen wilt loggen behalve MISC
class, de waarde van pgaudit.log
wordt ALL, -MISC, -MISC_SET
. U kunt pgAudit ook inschakelen om een aparte logboekvermelding te maken voor elke relatieverwijzing in een instructie door pgaudit.log_relation
in te stellen. aan.
Bekijk een voorbeeld van het maken van een tabel. De SQL-instructie zou zijn:
CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));
De corresponderende vermeldingen in het controlelogboek zijn:
2020-12-21 00:00:11 UTC:157.230.232.139(53178):sgpostgres@test:[11514]: LOG: AUDIT: SESSION,5,1,DDL,CREATE SEQUENCE,SEQUENCE,public.persons_id_seq,"CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));",<not logged> 2020-12-21 00:00:11 UTC:157.230.232.139(53178):sgpostgres@test:[11514]: LOG: AUDIT: SESSION,5,1,DDL,CREATE TABLE,TABLE,public.persons,"CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));",<not logged> 2020-12-21 00:00:11 UTC:157.230.232.139(53178):sgpostgres@test:[11514]: LOG: AUDIT: SESSION,5,1,DDL,CREATE INDEX,INDEX,public.persons_pkey,"CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));",<not logged> 2020-12-21 00:00:11 UTC:157.230.232.139(53178):sgpostgres@test:[11514]: LOG: AUDIT: SESSION,5,1,DDL,ALTER SEQUENCE,SEQUENCE,public.persons_id_seq,"CREATE TABLE persons(ID SERIAL PRIMARY KEY, LNAME varchar(20), FNAME varchar(20));",<not logged>
Object Audit Logging
In bepaalde gevallen kan het nodig zijn om alleen een specifieke set relaties te controleren. In dergelijke gevallen zal het gebruik van de sessiemodus alleen resulteren in een onnodig groot aantal auditlogs die niet overeenkomen met de vereiste relaties. Objectmodus is speciaal geschikt voor dit doel en kan alleen een specifieke set relaties controleren.
Logboekregistratie van objectcontroles wordt bereikt met behulp van de PostgreSQL-rollen. Er kan een rol worden gemaakt en de machtigingen worden toegewezen om alleen toegang te krijgen tot een specifieke set relaties. Deze rol moet worden gespecificeerd in de configuratieparameter pgaudit.role
. Objectmodus ondersteunt alleen SELECT
, INSERT
, UPDATE
en DELETE
verklaringen. De klassen van instructies die worden vastgelegd, zijn afhankelijk van de machtigingen die aan de rol zijn verleend. Als de rol bijvoorbeeld machtigingen heeft om alleen SELECT
. uit te voeren , dan alleen SELECT
verklaringen worden gelogd.
Hieronder ziet u een voorbeeld van objectcontrolelogboekregistratie:
Maak een rol aan en verleen alleen SELECT
rechten. Stel de pgaudit.role
. in aan die rol en voer de SELECT
SQL-instructie:
CREATE ROLE audit_person; GRANT SELECT ON persons TO audit_person; SET pgaudit.role = 'audit_person'; SELECT * FROM persons WHERE ID=404;
De bovenstaande select-instructie wordt gelogd als:
2020-12-21 00:27:09 UTC:157.230.232.139(54900):sgpostgres@test:[21835]: LOG: AUDIT: OBJECT,10,1,READ,SELECT,TABLE,public.persons,select * from persons where ID=404;,<not logged>
|
Hoe interpreteer ik de invoer in het controlelogboek?
Tot nu toe hebben we details gegeven over hoe de invoer in het controlelogboek eruitziet. Laten we nu eens kijken naar het invoerformaat van het controlelogboek. Elk item begint met de log_line_prefix die wordt genoemd voor PostgreSQL-logboekregistratie, en de rest van de uitvoer is in CSV-indeling. Overweeg de volgende eenvoudige invoer in het auditlogboek:
2020-12-21 00:27:09 UTC:157.230.232.139(54900):sgpostgres@test:[21835]: LOG: AUDIT: OBJECT,10,1,READ,SELECT,TABLE,public.persons,select * from persons where ID=404;,<not logged>
In het bovenstaande item, de waarde
2020-12-21 00:27:09 UTC:157.230.232.139(54900):sgpostgres@test:[21835]:
is van het log_line_prefix formaat %t:%r:%u@%d:[%p]:
. De inhoud van de auditinvoer begint vanaf LOG: AUDIT:
waarde en het volgt het CSV-formaat. Het waardeformaat is van de vorm:
AUDIT_TYPE,STATEMENT_ID,SUBSTATEMENT_ID,CLASS,COMMAND,OBJECT_TYPE,OBJECT_NAME,STATEMENT,PARAMETER
Laten we elk van de velden een voor een bekijken:
Veld | Beschrijving | Waarde uit voorbeeld controle-invoer |
---|---|---|
AUDIT_TYPE | Geeft de controlemodus aan:SESSION of OBJECT | OBJECT |
STATEMENT_ID | Unieke instructie-ID voor elke sessie | 10 |
SUBSTATEMENT_ID | Een identifier voor elke sub-instructie binnen de hoofd-instructie | 1 |
KLASSE | Geeft de klasse aan van statements zoals READ, WRITE etc die gedefinieerde waarden zijn voor de pgaudit.log parameter. | LEZEN |
COMMANDO | De opdracht die in de SQL-instructie wordt gebruikt | SELECTEER |
OBJECT_TYPE | Kan TABLE, INDEX, VIEW, etc. zijn | TABEL |
OBJECT_NAME | De volledig gekwalificeerde objectnaam | public.persons |
VERKLARING | Het daadwerkelijke uitgevoerde statement | selecteer * uit personen waarbij ID=404; |
PARAMETER | Als de pgaudit.log_parameter is ingesteld op true, wordt de geciteerde CSV van parameters vermeld indien aanwezig, of "none" als er geen parameters zijn. Als de pgaudit.log_parameter niet is ingesteld, is de waarde " |
Inferentie
pgAudit, met al zijn mogelijkheden, vereenvoudigt het auditproces door het audittrail-logboek te genereren. Hoewel er een paar kanttekeningen zijn, zoals het loggen van hernoemde objecten onder dezelfde naam, is het nog steeds een robuust hulpmiddel dat de vereiste functionaliteit biedt. De audit-informatie die in logboeken is geschreven, is misschien niet alleen ideaal voor het auditproces - het auditproces is zelfs nog beter wanneer die logs kunnen worden geconverteerd naar een databaseschema en auditgegevens in de database kunnen worden geladen, zodat u eenvoudig de informatie. Dit is waar de PostgreSQL Audit Log Analyzer (pgAudit Analyze) nuttig is. Raadpleeg voor meer informatie de github-pagina's van pgAudit en pgAudit Analyze.