Utilizzo di pgAudit per registrare l'attività del database - Amazon Aurora

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di pgAudit per registrare l'attività del database

Gli istituti finanziari, gli enti governativi e molti settori devono conservare i log di audit per soddisfare i requisiti normativi. L'utilizzo dell'estensione PostgreSQL Audit (pgAudit) con il cluster database Aurora PostgreSQL consente di acquisire i record dettagliati richiesti in genere dai revisori o di soddisfare requisiti normativi. Ad esempio, è possibile impostare l'estensione pgAudit per tenere traccia delle modifiche apportate a database e tabelle specifici, per registrare l'utente che ha apportato la modifica e molti altri dettagli.

L'estensione pgAudit si basa sulla funzionalità dell'infrastruttura di registrazione PostgreSQL nativa estendendo i messaggi di registro con maggiori dettagli. In altre parole, l'approccio utilizzato per visualizzare il registro di audit è lo stesso utilizzato per visualizzare i messaggi di registro. Per ulteriori informazioni sulla registrazione PostgreSQL, consulta File di log del database Aurora PostgreSQL.

L'estensione pgAudit consente di oscurare i dati sensibili, come le password in chiaro, dai registri. Se il cluster database Aurora PostgreSQL è configurato per registrare le istruzioni DML (Data Manipulation Language) come descritto in Attivazione della registrazione delle query per il cluster database Aurora PostgreSQL, il problema delle password in chiaro può essere evitato utilizzando l'estensione PostgreSQL Audit.

È possibile configurare l'audit sulle istanze database con un elevato grado di specificità. Puoi eseguire l'audit di tutti i database e di tutti gli utenti. In alternativa, è possibile scegliere di eseguire l'audit solo di determinati database, utenti e altri oggetti. È inoltre possibile escludere esplicitamente determinati utenti e database dall'audit. Per ulteriori informazioni, consulta Esclusione di utenti o database dalla registrazione di audit.

Data la quantità di dettagli che è possibile acquisire, ti consigliamo di monitorare il consumo di archiviazione se utilizzi pgAudit.

L'estensione pgAudit è supportata su tutte le versioni di Aurora PostgreSQL disponibili. Per un elenco delle versioni di pgAudit supportate dalla versione di Aurora PostgreSQL, consulta Extension versions for Amazon Aurora PostgreSQL (Versioni delle estensioni per Amazon Aurora PostgreSQL) in Release Notes for Aurora PostgreSQL (Note di rilascio di Aurora PostgreSQL).

Configurazione dell'estensione pgAudit

Per configurare l'estensione pgAudit sul cluster database Aurora PostgreSQL, aggiungi innanzitutto pgAudit alle librerie condivise nel gruppo di parametri cluster database personalizzato per il cluster database Aurora PostgreSQL. Per informazioni sulla creazione di un gruppo di parametri del·cluster database, consulta Utilizzo di gruppi di parametri. Quindi, installa l'estensione pgAudit. Infine, specifica i database e gli oggetti di cui eseguire l'audit. Le procedure in questa sezione mostrano come fare. Puoi utilizzare la AWS Management Console o l'AWS CLI.

Per eseguire tutte queste attività, sono richieste autorizzazioni come il ruolo rds_superuser.

Le fasi seguenti si basano sull'ipotesi che il cluster database Aurora PostgreSQL sia associato a un gruppo di parametri cluster di database personalizzato.

Per impostare l'estensione pgAudit
  1. Accedi alla AWS Management Console e apri la console Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/.

  2. Nel riquadro di navigazione, scegli l'istanza di scrittura del cluster database Aurora PostgreSQL .

  3. Apri la scheda Configurazione per l'istanza di scrittura del cluster database Aurora PostgreSQL. Tra i dettagli dell'istanza, individua il collegamento Parameter group (Gruppo di parametri).

  4. Scegli il collegamento per aprire i parametri personalizzati associati al cluster database Aurora PostgreSQL.

  5. Nel campo di ricerca Parametri, digita shared_pre per trovare il parametro shared_preload_libraries.

  6. Scegli Edit parameters (Modifica parametri) per accedere ai valori delle proprietà.

  7. Aggiungi pgaudit all'elenco nel campo Values (Valori). Utilizza una virgola per separare gli elementi nell'elenco di valori.

    Immagine del parametro shared_preload_libaries con pgAudit aggiunto.
  8. Riavvia l'istanza di scrittura del cluster database Aurora PostgreSQL in modo che la modifica al parametro shared_preload_libraries diventi effettiva.

  9. Quando l'istanza è disponibile, verifica che pgAudit sia stato inizializzato. Utilizza psql per connetterti all'istanza di scrittura del cluster database Aurora PostgreSQL, quindi esegui il comando seguente.

    SHOW shared_preload_libraries; shared_preload_libraries -------------------------- rdsutils,pgaudit (1 row)
  10. Con pgAudit inizializzato, puoi ora creare l'estensione. L'estensione deve essere creata dopo aver inizializzato la libreria perché l'estensione pgaudit installa i trigger evento per l'audit delle istruzioni DDL (Data Definition Language).

    CREATE EXTENSION pgaudit;
  11. Chiudi la sessione psql.

    labdb=> \q
  12. Accedi alla AWS Management Console e apri la console Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/.

  13. Trova il parametro pgaudit.log nell'elenco e impostalo sul valore appropriato per il caso d'uso. Ad esempio, se si imposta il parametro pgaudit.log su write come mostrato nell'immagine seguente, gli inserimenti, gli aggiornamenti, le eliminazioni e alcuni altri tipi di modifiche vengono acquisiti nel registro.

    Immagine del parametro pgaudit.log con l'impostazione.

    Puoi anche scegliere uno dei seguenti valori per il parametro pgaudit.log.

    • none: valore predefinito. Non viene registrata alcuna modifica al database.

    • all: registra tutto (read, write, function, role, ddl, misc).

    • ddl: registra tutte le istruzioni DDL (Data Definition Language) non incluse nella classe ROLE.

    • function: registra le chiamate di funzione e blocchi DO.

    • misc: registra vari comandi come DISCARD, FETCH, CHECKPOINT, VACUUM e SET.

    • read: registra SELECT e COPY quando l'origine è una relazione (ad esempio una tabella) o una query.

    • role: registra le istruzioni correlate a ruoli e privilegi, ad esempio GRANT, REVOKE, CREATE ROLE, ALTER ROLE e DROP ROLE.

    • write: registra INSERT, UPDATE, DELETE, TRUNCATE e COPY quando la destinazione è una relazione (tabella).

  14. Seleziona Salvataggio delle modifiche.

  15. Apri la console di Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/.

  16. Scegli l'istanza di scrittura del cluster database Aurora PostgreSQL dall'elenco di database per selezionarla, quindi scegli Reboot (Riavvia) dal menu Actions (Operazioni).

Per configurare pgAudit

Per configurare pgAudit utilizzandoAWS CLI, si chiama l'modify-db-parameter-groupoperazione per modificare i parametri del registro di controllo nel gruppo di parametri personalizzato, come illustrato nella procedura seguente.

  1. Utilizza il seguente comando AWS CLI per aggiungere pgaudit al parametro 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. Utilizza il comando AWS CLI seguente per riavviare l'istanza di scrittura del cluster database Aurora PostgreSQL in modo che la libreria pgaudit venga inizializzata.

    aws rds reboot-db-instance \ --db-instance-identifier writer-instance \ --region aws-region
  3. Quando l'istanza è disponibile, verifica che pgaudit sia stato inizializzato. Utilizza psql per connetterti all'istanza di scrittura del cluster database Aurora PostgreSQL, quindi esegui il comando seguente.

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

    Con pgAudit inizializzato, puoi ora creare l'estensione.

    CREATE EXTENSION pgaudit;
  4. Chiudi la sessione psql in modo da poter utilizzare AWS CLI.

    labdb=> \q
  5. Utilizza il comando AWS CLI seguente per specificare le classi di istruzioni che desideri registrare mediante la registrazione di audit della sessione. L'esempio imposta il parametro pgaudit.log su write, che acquisisce inserimenti, aggiornamenti ed eliminazioni nel registro.

    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

    Puoi anche scegliere uno dei seguenti valori per il parametro pgaudit.log.

    • none: valore predefinito. Non viene registrata alcuna modifica al database.

    • all: registra tutto (read, write, function, role, ddl, misc).

    • ddl: registra tutte le istruzioni DDL (Data Definition Language) non incluse nella classe ROLE.

    • function: registra le chiamate di funzione e blocchi DO.

    • misc: registra vari comandi come DISCARD, FETCH, CHECKPOINT, VACUUM e SET.

    • read: registra SELECT e COPY quando l'origine è una relazione (ad esempio una tabella) o una query.

    • role: registra le istruzioni correlate a ruoli e privilegi, ad esempio GRANT, REVOKE, CREATE ROLE, ALTER ROLE e DROP ROLE.

    • write: registra INSERT, UPDATE, DELETE, TRUNCATE e COPY quando la destinazione è una relazione (tabella).

    Riavvia l'istanza di scrittura del cluster database Aurora PostgreSQL utilizzando il comando AWS CLI seguente.

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

Audit di oggetti di database

Con pgAudit impostata sul cluster database Aurora PostgreSQL e configurata per i requisiti, informazioni più dettagliate vengono acquisite nel registro PostgreSQL. Ad esempio, sebbene la configurazione della registrazione PostgreSQL predefinita consenta di identificare la data e l'ora della modifica apportata a una tabella di database, con l'estensione pgAudit la voce di registro può includere lo schema, l'utente che ha apportato la modifica e altri dettagli a seconda della configurazione dei parametri dell'estensione. È possibile configurare l'audit per tenere traccia delle modifiche nei modi seguenti.

  • Per ogni sessione, per utente. Per il livello di sessione, è possibile acquisire il testo del comando completo.

  • Per ogni oggetto, per utente e per database.

La funzionalità di audit degli oggetti viene attivata quando il ruolo rds_pgaudit viene creato nel sistema e quindi aggiunto al parametro pgaudit.role nel gruppo di parametri personalizzati. Per impostazione predefinita, l'impostazione del parametro pgaudit.role viene annullata e l'unico valore consentito è rds_pgaudit. Nelle fasi seguenti si presume che pgaudit sia stato inizializzato e che l'estensione pgaudit sia stata creata seguendo la procedura in Configurazione dell'estensione pgAudit.

Immagine del file di registro di PostgreSQL dopo la configurazione di pgAudit.

Come mostrato in questo esempio, la riga "LOG: AUDIT: SESSION" fornisce informazioni sulla tabella e il relativo schema, insieme ad altri dettagli.

Per configurare l'audit degli oggetti
  1. Utilizza psql per connetterti all'istanza di scrittura del cluster database Aurora PostgreSQL.

    psql --host=your-instance-name.aws-region.rds.amazonaws.com --port=5432 --username=postgrespostgres --password --dbname=labdb
  2. Crea un ruolo del database denominato rds_pgaudit utilizzando il comando seguente.

    labdb=> CREATE ROLE rds_pgaudit; CREATE ROLE labdb=>
  3. Chiudi la sessione psql.

    labdb=> \q

    Nei passaggi successivi, utilizza AWS CLI per modificare i parametri del registro di audit nel gruppo di parametri personalizzati.

  4. Utilizza il seguente comando AWS CLI per impostare il parametro pgaudit.role su rds_pgaudit. Per impostazione predefinita, questo parametro è vuoto e rds_pgaudit è l'unico valore consentito.

    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. Utilizza il seguente comando AWS CLI per riavviare l'istanza di scrittura del cluster database Aurora PostgreSQL in modo da rendere effettive le modifiche apportate ai parametri.

    aws rds reboot-db-instance \ --db-instance-identifier writer-instance \ --region aws-region
  6. Esegui il comando seguente per verificare che pgaudit.role sia impostato su rds_pgaudit.

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

Per testare la registrazione di pgAudit, è possibile eseguire diversi comandi di esempio da controllare. Ad esempio, si potrebbero eseguire i comandi seguenti.

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

I registri del database devono contenere una voce simile alla seguente:

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

Per informazioni sulla visualizzazione dei registri, consulta Monitoraggio dei file di log di Amazon Aurora.

Per saperne di più sull'estensione pgAudit, vedi pgAudit su. GitHub

Esclusione di utenti o database dalla registrazione di audit

Come illustrato in File di log del database Aurora PostgreSQL, i registri di PostgreSQL consumano spazio di archiviazione. L'uso dell'estensione pgAudit consente di aumentare il volume di dati raccolti nei registri in misura diversa, a seconda delle modifiche che vengono monitorate. Potrebbe non essere necessario eseguire l'audit di ogni utente o database nel cluster database Aurora PostgreSQL.

Per ridurre al minimo l'impatto sull'archiviazione ed evitare di acquisire inutilmente i record di audit, è possibile escludere utenti e database dall'audit. È anche possibile modificare la registrazione all'interno di una determinata sessione. Negli esempi seguenti viene mostrato come fare.

Nota

Le impostazioni dei parametri a livello di sessione hanno la precedenza sulle impostazioni nel gruppo di parametri cluster database personalizzato per l'istanza di scrittura del cluster database Aurora PostgreSQL. Per evitare che gli utenti del database ignorino le impostazioni di configurazione della registrazione di audit, accertati di modificare le loro autorizzazioni.

Supponi che il cluster database Aurora PostgreSQL sia configurato per eseguire l'audit dello stesso livello di attività per tutti gli utenti e i database. Decidi quindi di non voler eseguire l'audit dell'utente myuser. Puoi disattivare l'audit per myuser con il comando SQL seguente.

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

Quindi, puoi utilizzare la seguente query per controllare la colonna user_specific_settings per pgaudit.log per verificare che sia impostata su NONE.

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

Viene visualizzato l'output riportato di seguito.

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

Puoi disattivare la registrazione per un determinato utente durante la sessione con il database con il seguente comando.

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

Utilizza la seguente query per controllare la colonna delle impostazioni per pgaudit.log per una combinazione specifica di utente e database.

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;

L'output visualizzato è simile al seguente.

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

Dopo aver disattivato l'audit per myuser, decidi di non voler tenere traccia delle modifiche apportate a mydatabase. Puoi disattivare l'audit per il database specifico utilizzando il comando seguente.

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

Quindi, utilizza la seguente query per controllare la colonna database_specific_settings per verificare che pgaudit.log sia impostato su 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';

Viene visualizzato l'output riportato di seguito.

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

Per ripristinare le impostazioni predefinite di myuser, utilizza il comando seguente:

ALTER USER myuser RESET pgaudit.log;

Per ripristinare i valori predefiniti delle impostazioni di un database, utilizza il comando seguente.

ALTER DATABASE mydatabase RESET pgaudit.log;

Per ripristinare l'impostazione predefinita di utente e database, utilizza il comando seguente.

ALTER USER myuser IN DATABASE mydatabase RESET pgaudit.log;

Puoi anche acquisire eventi specifici nel registro impostando pgaudit.log su uno degli altri valori consentiti per il parametro pgaudit.log. Per ulteriori informazioni, consulta Elenco delle impostazioni consentite per il parametro 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'

Riferimento per l'estensione pgAudit

Puoi specificare il livello di dettaglio desiderato per il registro di audit modificando uno o più dei parametri elencati in questa sezione.

Controllo del comportamento di pgAudit

Puoi controllare la registrazione di audit modificando uno o più dei parametri elencati nella tabella seguente.

Parametro Descrizione

pgaudit.log

Specifica quali classi di istruzioni verranno registrate per registrazione di audit della sessione. I valori consentiti includono ddl, function, misc, read, role, write, none, all. Per ulteriori informazioni, consulta Elenco delle impostazioni consentite per il parametro pgaudit.log.

pgaudit.log_catalog

Quando è attivato (impostato su 1), aggiunge istruzioni all'audit trail se tutte le relazioni in un'istruzione si trovano in pg_catalog.

pgaudit.log_level

Specifica il livello di registro che verrà utilizzato per le voci di registro. Valori consentiti: debug5, debug4, debug3, debug2, debug1, info, notice, warning, log

pgaudit.log_parameter

Quando è attivato (impostato su 1), i parametri passati con l'istruzione vengono acquisiti nel registro di audit.

pgaudit.log_relation

Quando è attivato (impostato su 1), il registro di audit della sessione crea una voce di registro separata per ogni relazione (TABLE, VIEW e così via) a cui si fa riferimento in un'istruzione SELECT o DML.

pgaudit.log_statement_once

Specifica se la registrazione includerà il testo dell'istruzione e i parametri con la prima voce di registro per una combinazione istruzione/istruzione secondaria o con ogni voce.

pgaudit.role

Specifica il ruolo principale da utilizzare per la registrazione di verifica degli oggetti. L'unica voce consentita è rds_pgaudit.

Elenco delle impostazioni consentite per il parametro pgaudit.log

Valore Descrizione

nessuno

Questa è l'impostazione predefinita. Non viene registrata alcuna modifica al database.

tutto

Registra tutto (read, write, function, role, ddl, misc).

ddl

Registra tutte le istruzioni DDL (Data Definition Language) non incluse nella classe ROLE.

funzione

Registra le chiamate di funzione e i blocchi DO.

misc

Registra vari comandi, ad esempio DISCARD, FETCH, CHECKPOINT, VACUUM e SET.

read

Registra SELECT e COPY quando l'origine è una relazione (ad esempio una tabella) o una query.

role

Registra le istruzioni relative a ruoli e privilegi, ad esempio GRANT, REVOKE, CREATE ROLE, ALTER ROLE e DROP ROLE.

write

Registra INSERT, UPDATE, DELETE, TRUNCATE e COPY quando la destinazione è una relazione (tabella).

Per registrare più tipi di eventi con controllo di sessioni, utilizzare un elenco separato da virgole. Per registrare tutti i tipi di eventi, impostare pgaudit.log su ALL. Riavviare l'istanza database per applicare le modifiche.

Con il controllo dell'oggetto, è possibile perfezionare la registrazione di controllo per lavorare con relazioni specifiche. Ad esempio, è possibile richiedere la registrazione di audit per le operazioni READ su una o più tabelle.