In questa pagina viene descritto il controllo dei database utilizzando l'estensione pgAudit, che consente di configurare molti dei log spesso richiesti per la conformità alle certificazioni governative, finanziarie e ISO.
Per informazioni generali sulle estensioni PostgreSQL in Cloud SQL, consulta Estensioni PostgreSQL.
Panoramica
Il controllo dei database in Cloud SQL per PostgreSQL è disponibile tramite l'estensione open source pgAudit.
Utilizzando questa estensione, puoi registrare e monitorare selettivamente le operazioni SQL eseguite su una determinata istanza di database. L'estensione fornisce funzionalità di controllo per monitorare e registrare un sottoinsieme selezionato di operazioni.
L'estensione pgAudit si applica alle query e ai comandi SQL eseguiti. Al contrario, Cloud Audit Logs deve essere utilizzato per controllare le operazioni di amministrazione e manutenzione eseguite su un'istanza Cloud SQL.
Per ulteriori informazioni sull'audit logging in Cloud SQL, consulta la pagina Audit log.
Configura il controllo dei database in Cloud SQL
I passaggi per l'audit logging 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 il controllo del database, puoi visualizzare i log e, se necessario, disabilitare il logging.
Configura il controllo
Questa sezione descrive le nozioni di base per configurare le operazioni di controllo dei database.
Flag iniziale per abilitare il controllo
In Cloud SQL, utilizzi i flag di database per molte operazioni, tra cui la regolazione dei parametri PostgreSQL e la configurazione di un'istanza. Il flag cloudsql.enable_pgaudit
consente il controllo di una determinata istanza di database. Puoi modificare il valore del flag cloudsql.enable_pgaudit
tramite la console Google Cloud o il comando gcloud
.
Segui 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 abilitato il flag di database, esegui il comando CREATE EXTENSION
utilizzando un client psql compatibile. Il seguente comando crea l'estensione pgAudit per tutti i database in un'istanza Cloud SQL:
CREATE EXTENSION pgaudit;
Imposta i valori per il flag pgaudit.log
Segui le istruzioni standard per i flag per impostare i valori del flag pgaudit.log
.
Ad esempio, per attivare il controllo per tutte le operazioni di 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 nella sezione Personalizzazione dell'audit logging del database.
Visualizza audit log del database
Per visualizzare gli audit log, enable gli audit log di accesso ai dati per il tuo progetto. I pgAudit log generati per una determinata istanza vengono inviati a Cloud Logging come audit log di accesso ai dati. Gli utenti possono visualizzare i pgAudit log generati tramite l'applicazione Esplora log.
Nell'applicazione Esplora log, è possibile visualizzare pgAudit log selezionando il filtro log cloudaudit.googleapis.com/data_access.
In alternativa, puoi utilizzare la query seguente per visualizzare tutti i pgAudit log 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 di log per pgAudit
Ogni voce di pgAudit log negli audit log di 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 che viene registrata. I valori possibili sono
READ
,WRITE
,FUNCTION
,ROLE
,DDL
,MISC
eMISC_SET
. - auditType.
SESSION
oOBJECT
. - chunkCount. La suddivisione in blocchi può verificarsi nei dati forniti nei campi
parameter
estatement
. Il campochunkCount
indica il numero totale di blocchi. Vedi anche la descrizione del campochunkIndex
. - chunkIndex. Specifica il numero di indice dei blocchi di dati nei campi
parameter
estatement
(nell'attuale containerrequest
). Il numero iniziale è1
. Vedi anche la descrizione del campochunkCount
. - Comando. Ad esempio,
ALTER TABLE
oSELECT
. - . Il campo
chunkIndex
può determinarne i contenuti; consulta la descrizione del campochunkIndex
. Se il valore dipgaudit.log_parameter
è impostato, il campoparameter
può contenere i parametri dell'istruzione come dati CSV tra virgolette. Se non ci sono 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 istruzione univoco per questa sessione. Ogni ID istruzione rappresenta una chiamata al backend. Gli ID istruzione sono sequenziali, anche se alcune istruzioni non vengono registrate.
- substatementId. ID sequenziale per ogni sottoistruzione all'interno dell'istruzione principale.
Alcuni di questi campi sono descritti anche nella documentazione di pgAudit.
Disattiva controllo
Per disabilitare il controllo dei 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 disabilitare 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;
Personalizza l'audit logging del database in Cloud SQL
Questa sezione descrive come 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 super user
In Cloud SQL, le estensioni possono essere create solo dagli utenti con 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 ulteriori informazioni, consulta la pagina relativa agli utenti di PostgreSQL.
Configura il controllo per tutte le operazioni di database sull'istanza
Per configurare il controllo per tutti i database in un'istanza, devi applicare le impostazioni pgAudit a livello di sistema. I parametri di controllo a livello di sistema possono essere impostati
come flag di database solo tramite la console Google Cloud o il comando gcloud
.
Ad esempio, per attivare il controllo per tutte le operazioni di 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 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 utilizzare il seguente comando gcloud
. In questo esempio viene utilizzata 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 di database esistenti.
Configura i controlli 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 il controllo 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 all'audit di un database specifico.
Quando esegui il controllo di una relazione, al parametro pgaudit.role
viene assegnato un ruolo di revisore unico. Qualsiasi oggetto o relazione concessa 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 i seguenti 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 l'audit logging in modo che venga eseguito solo quando si accede alle colonne income
e tax_status
dalla relazione salary
:
employee=> GRANT SELECT(income, tax_status) ON salary TO auditor;
Configura i controlli per un utente del database
Puoi attivare il controllo per un utente specifico impostando il parametro pgaudit.log
su un livello ROLE
.
Ad esempio, i seguenti comandi SQL impostano il controllo di 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 di database
cloudsql.enable_pgaudit
viene disattivato, l'audit logging viene interrotto immediatamente. Tuttavia, le impostazioni 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
cloudsql.enable_pgaudit
viene modificato. - Gli utenti del database creati tramite comandi
CREATE ROLE
espliciti non hanno il 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 della sessione sia l'audit logging degli oggetti, le istruzioni relative a entrambi vengono aggiunte ai log. Il logging delle sessioni e il logging degli oggetti non si annullano né si 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 che i log vengano inviati a Cloud Logging. Pertanto, prima di utilizzare questa funzionalità, esamina tutte le seguenti informazioni:
- La frequenza di importazione dei log è di 4 MB al secondo. Quando il carico della generazione dei log supera la velocità di importazione, può verificarsi quanto segue:
- Può verificarsi un aumento indesiderato dell'utilizzo del disco.
- Lo spazio su disco può essere esaurito.
- Se hai abilitato 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à, prevedi di:
- Abilita gli aumenti automatici dello spazio di archiviazione.
- Monitora l'utilizzo complessivo del disco; il carico derivante dalla generazione dei log non può essere monitorato separatamente. Utilizza la metrica cloudsql.googleapis.com/database/disk/utilization in Metrics Explorer.
- Se necessario, riduci l'utilizzo del disco eseguendo meno query o riducendo i controlli.
- Se lo spazio su disco disponibile è esaurito, gli audit log per alcune query potrebbero andare persi.