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).
Argomenti
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
Accedi alla AWS Management Console e apri la console Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/
. -
Nel riquadro di navigazione, scegli l'istanza di scrittura del cluster database Aurora PostgreSQL .
-
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).
-
Scegli il collegamento per aprire i parametri personalizzati associati al cluster database Aurora PostgreSQL.
-
Nel campo di ricerca Parametri, digita
shared_pre
per trovare il parametroshared_preload_libraries
. -
Scegli Edit parameters (Modifica parametri) per accedere ai valori delle proprietà.
-
Aggiungi
pgaudit
all'elenco nel campo Values (Valori). Utilizza una virgola per separare gli elementi nell'elenco di valori. Riavvia l'istanza di scrittura del cluster database Aurora PostgreSQL in modo che la modifica al parametro
shared_preload_libraries
diventi effettiva.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. 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;
Chiudi la sessione
psql
.labdb=>
\q
Accedi alla AWS Management Console e apri la console Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/
. Trova il parametro
pgaudit.log
nell'elenco e impostalo sul valore appropriato per il caso d'uso. Ad esempio, se si imposta il parametropgaudit.log
suwrite
come mostrato nell'immagine seguente, gli inserimenti, gli aggiornamenti, le eliminazioni e alcuni altri tipi di modifiche vengono acquisiti nel registro.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
eSET
.read: registra
SELECT
eCOPY
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
eDROP ROLE
.write: registra
INSERT
,UPDATE
,DELETE
,TRUNCATE
eCOPY
quando la destinazione è una relazione (tabella).
Seleziona Salvataggio delle modifiche.
Apri la console di Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/
. 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.
Utilizza il seguente comando AWS CLI per aggiungere
pgaudit
al parametroshared_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" \ --regionaws-region
-
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
\ --regionaws-region
Quando l'istanza è disponibile, verifica che
pgaudit
sia stato inizializzato. Utilizzapsql
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;
Chiudi la sessione
psql
in modo da poter utilizzare AWS CLI.labdb=>
\q
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
suwrite
, 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" \ --regionaws-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
eSET
.read: registra
SELECT
eCOPY
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
eDROP ROLE
.write: registra
INSERT
,UPDATE
,DELETE
,TRUNCATE
eCOPY
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
\ --regionaws-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.
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
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=postgres
postgres --password --dbname=labdb
-
Crea un ruolo del database denominato
rds_pgaudit
utilizzando il comando seguente.labdb=>
CREATE ROLE rds_pgaudit;
CREATE ROLE
labdb=>
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.
-
Utilizza il seguente comando AWS CLI per impostare il parametro
pgaudit.role
surds_pgaudit
. Per impostazione predefinita, questo parametro è vuoto erds_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" \ --regionaws-region
-
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
\ --regionaws-region
Esegui il comando seguente per verificare che
pgaudit.role
sia impostato surds_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.
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 |
---|---|
| 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. |
|
Quando è attivato (impostato su 1), aggiunge istruzioni all'audit trail se tutte le relazioni in un'istruzione si trovano in pg_catalog. |
|
Specifica il livello di registro che verrà utilizzato per le voci di registro. Valori consentiti: debug5, debug4, debug3, debug2, debug1, info, notice, warning, log |
|
Quando è attivato (impostato su 1), i parametri passati con l'istruzione vengono acquisiti nel registro di audit. |
|
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. |
|
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. |
|
Specifica il ruolo principale da utilizzare per la registrazione di verifica degli oggetti. L'unica voce consentita è |
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 |
funzione | Registra le chiamate di funzione e i blocchi |
misc | Registra vari comandi, ad esempio |
read | Registra |
role | Registra le istruzioni relative a ruoli e privilegi, ad esempio |
write | Registra |
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.