Questa pagina descrive l'audit del database utilizzando l'estensione pgAudit, che consente di configurare molti dei log spesso richiesti per rispettare le certificazioni governative, finanziarie e ISO.
Per informazioni generali sulle estensioni PostgreSQL in Cloud SQL, consulta la sezione Estensioni PostgreSQL.
Panoramica
Il controllo del database in Cloud SQL per PostgreSQL è disponibile tramite l'estensione open source pgAudit.
Utilizzando questa estensione, puoi registrare e monitorare in modo selettivo le operazioni SQL eseguite su una determinata istanza di database. L'estensione ti offre funzionalità di controllo per monitorare e registrare un sottoinsieme selezionato di operazioni.
L'estensione pgAudit si applica ai comandi e alle query SQL eseguiti. Al contrario, Cloud Audit Logs deve essere utilizzato per controllare le operazioni amministrative e di manutenzione eseguite su un'istanza Cloud SQL.
Per ulteriori informazioni sui log di controllo in Cloud SQL, consulta la pagina Audit log.
Configurare il controllo dei database in Cloud SQL
I passaggi per la registrazione dei log di controllo utilizzando l'estensione pgAudit includono:
- Abilitazione del flag
cloudsql.enable_pgaudit
in Cloud SQL. - Esecuzione di un comando per creare l'estensione pgAudit.
- Impostazione dei valori per il flag
pgaudit.log
.
Dopo aver configurato l'audit del database, puoi visualizzare i log e, se necessario, disattivare la registrazione.
Configurare l'audit
Questa sezione descrive le nozioni di base per la configurazione delle operazioni di controllo del database.
Flag iniziale per abilitare il controllo
In Cloud SQL, utilizzi i flag di database per molte operazioni, tra cui la modifica dei parametri PostgreSQL e la configurazione di un'istanza. Il flag
cloudsql.enable_pgaudit
abilita il controllo per una determinata
istanza del database. Puoi modificare il valore del flag cloudsql.enable_pgaudit
tramite la console Google Cloud o tramite il comando gcloud
.
Utilizza le istruzioni standard per i flag per
attivare il flag cloudsql.enable_pgaudit
, impostando il valore su on
. Ad esempio, per utilizzare il comando gcloud
, specifica quanto segue, sostituendo il nome dell'istanza con [INSTANCE_NAME]
:
gcloud sql instances patch [INSTANCE_NAME] --database-flags cloudsql.enable_pgaudit=on
Il flag cloudsql.enable_pgaudit
è elencato con gli altri
flag supportati
ed è specifico di Cloud SQL.
Esegui il comando per creare l'estensione pgAudit
Dopo aver attivato il flag del database, esegui il comando CREATE EXTENSION
utilizzando un client psql compatibile. Il comando seguente crea l'estensione pgAudit per tutti i database in un'istanza Cloud SQL:
CREATE EXTENSION pgaudit;
Imposta i valori per il flag pgaudit.log
Utilizza le istruzioni standard per i flag per
impostare i valori per il flag pgaudit.log
.
Ad esempio, per attivare il controllo per tutte le operazioni del database su un'istanza, puoi utilizzare il seguente comando gcloud
:
gcloud sql instances patch [INSTANCE_NAME] --database-flags \
cloudsql.enable_pgaudit=on,pgaudit.log=all
Configura altre impostazioni per il database
Per configurare le impostazioni di controllo per il database, segui le procedure descritte nella sezione Personalizzazione della registrazione degli audit del database.
Visualizzare i log di controllo del database
Per visualizzare i log di controllo, attiva gli audit log di accesso ai dati per il tuo progetto. I log pgAudit generati per una determinata istanza vengono inviati a Cloud Logging come audit log di accesso ai dati. Gli utenti possono visualizzare i log pgAudit generati tramite l'applicazione Esplora log.
Nell'applicazione Esplora log, i log pgAudit possono essere visualizzati selezionando il filtro cloudaudit.googleapis.com/data_access.
In alternativa, puoi utilizzare la seguente query per mostrare tutti i log pgAudit per un determinato progetto Cloud SQL:
resource.type="cloudsql_database"
logName="projects/<your-project-name>/logs/cloudaudit.googleapis.com%2Fdata_access"
protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.PgAuditEntry"
Formato dei log per pgAudit
Ogni voce di log pgAudit nei log di controllo dell'accesso ai dati contiene campi che rappresentano le informazioni raccolte per una query.
Ecco un esempio:
{ protoPayload: { @type: "type.googleapis.com/google.cloud.audit.AuditLog" methodName: "cloudsql.instances.query" request: { @type: "type.googleapis.com/google.cloud.sql.audit.v1.PgAuditEntry" auditClass: "READ" auditType: "SESSION" chunkCount: "1" chunkIndex: "1" command: "SELECT" database: "finance" databaseSessionId: 2209692 parameter: "[not logged]" statement: "SELECT * FROM revenue" statementId: 2 substatementId: 1 user: "alice" } } }
Di seguito sono riportate le descrizioni dei campi negli audit log di accesso ai dati:
- auditClass. Il tipo di istruzione registrata. I valori possibili sono
READ
,WRITE
,FUNCTION
,ROLE
,DDL
,MISC
eMISC_SET
. - auditType.
SESSION
oOBJECT
. - chunkCount. La suddivisione in blocchi può verificarsi sui dati forniti nei campi
parameter
estatement
. Il campochunkCount
indica il numero totale di blocchi. Consulta anche la descrizione del campochunkIndex
. - chunkIndex. Specifica il numero di indice dei blocchi di dati nei campi
parameter
estatement
(nel contenitorerequest
corrente). Il numero iniziale è1
. Consulta anche la descrizione del campochunkCount
. - command. Ad esempio,
ALTER TABLE
oSELECT
. - parameter. Il campo
chunkIndex
può determinare i contenuti di questo campo. Vedi la descrizione del campochunkIndex
. Se il valore dipgaudit.log_parameter
è impostato, il campoparameter
può contenere i parametri dell'estratto conto come dati CSV tra virgolette. Se non sono presenti parametri, questo campo contiene[none]
. In caso contrario, questo campo contiene[not logged]
. - dichiarazione. Istruzione eseguita nel backend.
Il campo
chunkIndex
può determinare i contenuti del campostatement
. Consulta la descrizione del campochunkIndex
. - statementId. ID univoco dell'istruzione per questa sessione. Ogni ID istruzione rappresenta una chiamata di backend. Gli ID estratto conto sono sequenziali, anche se alcuni estratti conto non vengono registrati.
- substatementId. ID sequenziale per ogni estratto conto secondario all'interno dell'estratto conto principale.
Alcuni di questi campi sono descritti anche nella documentazione di pgAudit.
Disattivare il controllo
Per disattivare l'audit del database, imposta il valore del flag cloudsql.enable_pgaudit
su off
. Il valore può essere modificato tramite la console Google Cloud o tramite il comando gcloud
. Utilizza le
istruzioni standard per i flag per
disattivare il flag cloudsql.enable_pgaudit
.
Inoltre, esegui il comando DROP EXTENSION
utilizzando un client psql compatibile per rimuovere lo stato dell'estensione:
DROP EXTENSION pgaudit;
Personalizzare la registrazione degli audit del database in Cloud SQL
Questa sezione descrive i modi per personalizzare il comportamento di controllo di un'istanza di database.
Per ulteriori funzionalità dell'estensione, consulta la documentazione di pgAudit.
Requisito per i privilegi di superuser
In Cloud SQL, le estensioni possono essere create solo dagli utenti che fanno parte del ruolo
cloudsqlsuperuser
. Quando crei una nuova istanza PostgreSQL, viene creato l'utente PostgreSQL predefinito (anche se devi impostare la password dell'utente).
L'utente PostgreSQL predefinito fa parte del ruolo cloudsqlsuperuser
. Per saperne di più, consulta la sezione Utenti PostgreSQL.
Configura il controllo per tutte le operazioni del database sull'istanza
Per configurare l'audit per tutti i database in un'istanza, devi applicare le impostazioni di pgAudit a livello di sistema. I parametri di controllo a livello di sistema possono essere impostati
solo come flag di database tramite la console Google Cloud o il comando gcloud
.
Ad esempio, per attivare il controllo per tutte le operazioni del database su un'istanza, puoi utilizzare il seguente comando gcloud
:
gcloud sql instances patch [INSTANCE_NAME] --database-flags \
cloudsql.enable_pgaudit=on,pgaudit.log=all
Configura operazioni specifiche su tutti i database dell'istanza
Per l'audit su tutti i database delle istanze, puoi utilizzare la consoleGoogle Cloud o il comando gcloud
. Ad esempio, per attivare il controllo solo per le operazioni di lettura e scrittura sull'istanza, puoi utilizzare il seguente comando gcloud
. Questo esempio utilizza una
sintassi basata su elenchi per specificare
più valori:
gcloud sql instances patch [INSTANCE_NAME] \
--database-flags ^:^cloudsql.enable_pgaudit=on:pgaudit.log=read,write
Il comando sovrascrive i flag del database esistenti.
Configurare il controllo per un database specifico
Per configurare l'audit per un database specifico, imposta i parametri pgAudit a livello di database. Ad esempio, il seguente comando SQL può essere utilizzato per attivare
il controllo di lettura/scrittura per un database denominato finance
:
finance=> ALTER DATABASE finance SET pgaudit.log = 'read,write';
Configurare il controllo per una relazione
Il controllo di una relazione è più ristretto rispetto al controllo di un database specifico.
Quando esegui l'audit per una relazione, viene assegnato un ruolo di revisore univoco
al parametro pgaudit.role
. Vengono registrati tutti gli oggetti o le relazioni concessi a questo ruolo.
Ad esempio, per configurare l'audit per tutte le query SELECT
nella relazione
salary
all'interno del database employee
, puoi utilizzare questi comandi:
employee=> CREATE ROLE auditor WITH NOLOGIN;
employee=> ALTER DATABASE employee SET pgaudit.role = 'auditor';
employee=> GRANT SELECT ON salary TO auditor;
Puoi anche controllare un sottoinsieme di colonne per una determinata relazione.
Ad esempio, il seguente comando configura la registrazione di controllo in modo che avvenga solo
quando si accede alle colonne income
e tax_status
dalla
relazione salary
:
employee=> GRANT SELECT(income, tax_status) ON salary TO auditor;
Configura il controllo per un utente del database
Puoi attivare il controllo per un utente specifico impostando il parametro
pgaudit.log
a livello di ROLE
.
Ad esempio, il seguente comando SQL imposta l'audit per tutte le operazioni del database eseguite dall'utente Alice
:
finance=> ALTER ROLE alice SET pgaudit.log = 'all';
Suggerimenti per la gestione degli audit in Cloud SQL
Quando personalizzi il comportamento di controllo, ricorda quanto segue:
- Quando il flag del database
cloudsql.enable_pgaudit
è disattivato, la registrazione del controllo viene interrotta immediatamente. Tuttavia, le impostazioni pgAudit applicate (ad esempio, le impostazioni del parametropgaudit.log
) vengono mantenute, a meno che non vengano rimosse esplicitamente. - L'istanza di database viene riavviata ogni volta che viene modificato il valore del flag del database per
cloudsql.enable_pgaudit
. - Gli utenti del database creati tramite comandi
CREATE ROLE
espliciti non dispongono del privilegio di modificare le impostazioni di controllo. Solo gli utenti del database creati tramite la console Google Cloud e il comandogcloud
possono modificare le impostazioni di controllo. - Quando abiliti sia l'audit logging delle sessioni sia l'audit logging degli oggetti, le istruzioni relative a entrambi vengono aggiunte ai log. La registrazione delle sessioni e la registrazione degli oggetti non si annullano o modificano a vicenda.
Limitazioni dell'estensione pgAudit in Cloud SQL per PostgreSQL
Gli audit log vengono scritti temporaneamente sul disco della loro istanza, occupando spazio su disco prima di essere inviati a Cloud Logging. Pertanto, prima di utilizzare questa funzionalità, rivedi tutte le informazioni riportate di seguito:
- La velocità di importazione dei log è di 4 MB al secondo. Quando il carico generato dai log
supera la velocità di importazione, può verificarsi quanto segue:
- Potrebbe verificarsi una crescita indesiderata dell'utilizzo del disco.
- Lo spazio su disco può esaurirsi.
- Se hai attivato questa funzionalità ed esegui molte query che soddisfano i criteri di controllo, l'utilizzo del disco può aumentare troppo rapidamente.
- Prima di utilizzare questa funzionalità, pianifica di:
- Abilita aumenti automatici dello spazio di archiviazione.
- Monitora l'utilizzo complessivo del disco; il carico generato dalla generazione dei log non può essere monitorato separatamente. Utilizza la metrica cloudsql.googleapis.com/database/disk/utilization in Esplora metriche.
- Se necessario, riduci l'utilizzo del disco eseguendo meno query o riducendo il controllo.
- Se lo spazio su disco disponibile è esaurito, i log di controllo per alcune query potrebbero andare persi.