In questa pagina viene descritto il controllo dei database utilizzando pgAudit, che consente di configurare molti dei i log spesso richiesti per rispettare le normative della pubblica amministrazione, del settore finanziario e certificazioni.
Per informazioni generali sulle estensioni PostgreSQL in Cloud SQL, consulta Estensioni PostgreSQL.
Panoramica
Il controllo dei database in Cloud SQL per PostgreSQL è disponibile tramite la pgAudit open source.
Con questa estensione puoi registrare e monitorare in modo selettivo le operazioni SQL eseguite su una determinata istanza del database. L'estensione fornisce funzionalità di controllo per monitorare e registrare un sottoinsieme selezionato di operazioni aziendali.
L'estensione pgAudit si applica ai comandi e alle query SQL eseguiti. Al contrario, È necessario utilizzare Cloud Audit Logs per controllare le operazioni amministrative e di manutenzione eseguite su Cloud SQL in esecuzione in un'istanza Compute Engine.
Consulta la pagina Log di controllo per ulteriori informazioni sull'audit logging in Cloud SQL.
Configura il controllo dei database in Cloud SQL
I passaggi per la registrazione degli audit utilizzando l'estensione pgAudit includono:
- Attivare il 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 il controllo del database, puoi visualizzare i log e, se necessario, disattivare il logging.
Configurare il controllo
Questa sezione descrive le nozioni di base sulla configurazione delle operazioni di controllo del database.
Indicatore iniziale per attivare 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. La
Il flag cloudsql.enable_pgaudit
abilita il controllo per un determinato
un'istanza del database. Puoi modificare il valore dell'attributo cloudsql.enable_pgaudit
tramite la console Google Cloud o il comando gcloud
.
Utilizza le istruzioni standard per i flag per
Attiva il flag cloudsql.enable_pgaudit
impostando il valore su on
. Per
Ad esempio, per utilizzare il comando gcloud
, specifica quanto segue, sostituendo
nome istanza per [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
imposta i valori per il flag pgaudit.log
.
Ad esempio, per attivare il controllo per tutte le operazioni di database su un'istanza,
puoi usare questo 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 Personalizzare la registrazione degli audit del database.
Visualizzare i log di controllo del database
Per visualizzare gli audit log, attiva Audit log degli accessi ai dati per il progetto. Gli audit 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 Logs Explorer.
Nell'applicazione Logs Explorer, i log pgAudit possono essere visualizzati selezionando il filtro log cloudaudit.googleapis.com/data_access.
In alternativa, puoi utilizzare la seguente query per mostrare tutti i log pgAudit per di 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 del log pgAudit negli audit log di accesso ai dati ha 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. Possibile
i valori sono
READ
,WRITE
,FUNCTION
,ROLE
,DDL
,MISC
, eMISC_SET
. - auditType.
SESSION
oOBJECT
. - chunkCount. Il chunking può avvenire sui dati forniti
parameter
estatement
campi. Il campochunkCount
indica il numero totale di chunk. Consulta anche la descrizione del campochunkIndex
. - chunkIndex. Specifica il numero di indice dei blocchi di dati in
i campi
parameter
estatement
(nel modellorequest
). Il numero iniziale è1
. Consulta anche la descrizione del campochunkCount
. - . Ad esempio,
ALTER TABLE
oSELECT
. - . Il campo
chunkIndex
può determinare i contenuti di questo campo; consulta la descrizione del campochunkIndex
. Se il valore dipgaudit.log_parameter
è impostato, il valore diparameter
può contenere i parametri delle istruzioni come dati CSV tra virgolette. Se non sono presenti parametri, questo campo contiene[none]
. In caso contrario, questo campo contiene[not logged]
. - . Istruzione eseguita nel backend.
Il campo
chunkIndex
può determinare i contenuti del campostatement
; consulta la descrizione campochunkIndex
. - statementId. ID univoco dell'istruzione per questa sessione. Ogni ID istruzione rappresenta una chiamata di backend. Gli ID istruzione sono sequenziali, anche se le istruzioni non vengono registrate.
- substatementId. ID sequenziale per ogni sottoistruzione all'interno dell'istruzione principale.
Alcuni di questi campi sono descritti anche documentazione di pgAudit.
Disabilita controlli
Per disabilitare il controllo dei database, imposta il valore dell'attributo cloudsql.enable_pgaudit
per off
. Il valore può essere modificato mediante 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
In questa sezione vengono descritti i metodi per personalizzare il comportamento di controllo di un un'istanza del database.
Per ulteriori funzionalità dell'estensione, consulta la documentazione di pgAudit.
Requisito per i privilegi di super user
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 automaticamente l'utente PostgreSQL predefinito (anche se devi impostare la password dell'utente).
L'utente PostgreSQL predefinito fa parte del ruolo cloudsqlsuperuser
. Per maggiori informazioni
vedi Utenti di PostgreSQL.
Configura il controllo per tutte le operazioni di database sull'istanza
Per configurare il controllo per tutti i database di un'istanza, devi applicare le impostazioni di pgAudit
a livello di sistema. È possibile impostare i parametri di audit a livello di sistema
solo come flag di database tramite la console Google Cloud o il comando gcloud
.
Ad esempio, per attivare
sul controllo di tutte le operazioni di database su un'istanza, puoi utilizzare
seguente comando gcloud
:
gcloud sql instances patch [INSTANCE_NAME] --database-flags \
cloudsql.enable_pgaudit=on,pgaudit.log=all
Configurare operazioni specifiche su tutti i database delle istanze
Per il controllo su tutti i database delle istanze, puoi utilizzare la console Google Cloud o il comando gcloud
. Ad esempio:
per attivare il controllo solo per le operazioni di lettura e scrittura sull'istanza, puoi
usa questo comando gcloud
. Questo esempio utilizza una
sintassi basata su elenco 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.
configura il controllo per un database specifico
Per configurare il controllo per un database specifico, imposta i parametri pgAudit a livello di database. Ad esempio, il seguente comando SQL può essere utilizzato per attivare la verifica di lettura/scrittura per un database denominato finance
:
finance=> ALTER DATABASE finance SET pgaudit.log = 'read,write';
configura il controllo per una relazione
Il controllo di una relazione è più ristretto rispetto al controllo di un database specifico.
Quando esegui un controllo per una relazione, al parametro pgaudit.role
viene assegnato un ruolo di revisore univoco. Qualsiasi oggetto o relazione concesso a questo ruolo viene registrato.
Ad esempio, per configurare il controllo per tutte le query SELECT
sulla 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 generazione di log di controllo solo quando si accede alle colonne income
e tax_status
dalla relazione salary
:
employee=> GRANT SELECT(income, tax_status) ON salary TO auditor;
Configurare il controllo per un utente di database
Puoi attivare il controllo per un utente specifico impostando la
Parametro pgaudit.log
a livello di ROLE
.
Ad esempio, il seguente comando SQL imposta il controllo per tutte le operazioni sul 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 dei controlli, tieni presente quanto segue:
- Quando il flag del database
cloudsql.enable_pgaudit
è disattivato, il logging di controllo viene interrotto immediatamente. Tuttavia, le impostazioni di pgAudit applicate (ad esempio le impostazioni del parametropgaudit.log
) vengono conservate, a meno che non vengano rimosse esplicitamente. - L'istanza di database viene riavviata ogni volta che il valore del flag di database per
Il campo
cloudsql.enable_pgaudit
è stato modificato. - Gli utenti del database creati tramite comandi
CREATE ROLE
espliciti non dispongono del privilegio per modificare le impostazioni di controllo. Solo database gli utenti creati mediante la console Google Cloud e il comandogcloud
possono modificare le impostazioni di controllo. - Quando attivi sia l'audit logging delle sessioni sia l'audit logging degli oggetti, gli statement relativi a entrambi vengono aggiunti ai log. Logging della sessione e oggetto i log non si annullano o si modificano a vicenda.
Limiti dell'estensione pgAudit in Cloud SQL per PostgreSQL
Gli audit log vengono temporaneamente scritti sul disco dell'istanza, occupando il disco prima che i log vengano inviati a Cloud Logging. Pertanto, Prima di utilizzare questa funzionalità, verifica le seguenti informazioni:
- La velocità di importazione dei log è di 4 MB al secondo. Quando il carico generato dalla generazione dei log
supera la frequenza di importazione, si può verificare quanto segue:
- Potrebbe verificarsi un aumento indesiderato dell'utilizzo del disco.
- Lo spazio su disco può essere esaurito.
- Se hai attivato questa funzionalità ed esegui molte query che soddisfano i tuoi criteri di controllo, l'utilizzo del disco può aumentare troppo rapidamente.
- Prima di utilizzare questa funzionalità, pianifica di:
- Abilita gli 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 cloudsql.googleapis.com/database/disk/utilization in Esplora metriche.
- Se necessario, riduci l'utilizzo del disco eseguendo meno query o riducendo e l'auditing.
- Se lo spazio su disco disponibile è esaurito, gli audit log di alcune query potrebbero essere persi.