Questa pagina descrive l'audit del database utilizzando l'estensione pgAudit, che ti aiuta a 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 del database in Cloud SQL per PostgreSQL è disponibile tramite l'estensione pgAudit open source.
Utilizzando questa estensione, puoi registrare e monitorare in modo selettivo le operazioni SQL eseguite su una determinata istanza di database. L'estensione offre 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 saperne di più sugli audit log in Cloud SQL, consulta la pagina Audit log.
Configura l'audit del database in Cloud SQL
I passaggi per l'audit logging utilizzando l'estensione pgAudit includono:
- Abilitazione del flag
cloudsql.enable_pgauditin 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 il logging.
Configura il controllo
Questa sezione descrive le nozioni di base per la configurazione delle operazioni di controllo del database.
Flag iniziale per abilitare l'audit
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 attiva l'audit per una determinata istanza di 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 [INSTANCE_NAME] con il nome dell'istanza:
gcloud sql instances patch [INSTANCE_NAME] --database-flags cloudsql.enable_pgaudit=on
Il flag cloudsql.enable_pgaudit è elencato insieme agli altri flag supportati ed è specifico per Cloud SQL.
Esegui il comando per creare l'estensione pgAudit
Dopo aver attivato il flag di 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 del flag pgaudit.log.
Ad esempio, per attivare l'audit 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 riportate nella sezione Personalizzazione dell'audit logging del database.
Visualizza gli audit log del database
Per visualizzare i log di controllo, abilita i log di controllo dell'accesso ai dati per il tuo progetto. I log pgAudit generati per un'istanza specifica vengono inviati a Cloud Logging come audit log di controllo dell'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 dei log cloudaudit.googleapis.com/data_access.
In alternativa, puoi utilizzare la seguente query per visualizzare 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 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 nei log di controllo dell'accesso ai dati:
- auditClass. Il tipo di istruzione registrata. I valori possibili sono
READ,WRITE,FUNCTION,ROLE,DDL,MISCeMISC_SET. - auditType.
SESSIONoOBJECT. - chunkCount. La suddivisione in blocchi può avvenire sui dati forniti nei campi
parameterestatement. Il campochunkCountindica il numero totale di blocchi. Consulta anche la descrizione del campochunkIndex. - chunkIndex. Specifica il numero di indice dei blocchi di dati nei campi
parameterestatement(nel containerrequestcorrente). Il numero iniziale è1. Consulta anche la descrizione del campochunkCount. - command. Ad esempio:
ALTER TABLEoSELECT. - parameter. Il campo
chunkIndexpuò determinare i contenuti di questo campo; consulta la descrizione del campochunkIndex. Se il valore dipgaudit.log_parameterè impostato, il campoparameterpuò contenere i parametri dell'istruzione come dati CSV tra virgolette. Se non sono presenti parametri, questo campo contiene[none]. In caso contrario, questo campo contiene[not logged]. - statement. Istruzione eseguita nel backend.
Il campo
chunkIndexpuò determinare i contenuti del campostatement. Consulta la descrizione del campochunkIndex. - statementId. ID istruzione univoco per questa sessione. Ogni ID istruzione rappresenta una chiamata di backend. Gli ID istruzione sono sequenziali, anche se alcune istruzioni non vengono registrate.
- substatementId. ID sequenziale per ogni sotto-istruzione all'interno dell'istruzione principale.
Alcuni di questi campi sono descritti anche nella documentazione di pgAudit.
Disattiva i controlli
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;
Personalizza l'audit logging 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 super utente
In Cloud SQL, le estensioni possono essere create solo dagli utenti che fanno parte del ruolo cloudsqlsuperuser. Quando crei una nuova istanza PostgreSQL, l'utente PostgreSQL predefinito viene creato automaticamente (anche se devi impostare la password dell'utente).
L'utente PostgreSQL predefinito fa parte del ruolo cloudsqlsuperuser. Per saperne di più, consulta Utenti PostgreSQL.
Configura l'audit per tutte le operazioni del database nell'istanza
Per configurare l'audit per tutti i database di un'istanza, devi applicare le impostazioni 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 di 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 il controllo di tutti i database delle istanze, puoi utilizzare la consoleGoogle Cloud o il comando gcloud. Ad esempio, per attivare l'audit 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 di database esistenti.
Configura l'audit 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 e 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ù limitato rispetto al controllo di un database specifico.
Quando esegui l'audit per una relazione, al parametro pgaudit.role viene assegnato un ruolo di auditor univoco. Viene registrato qualsiasi oggetto o relazione concesso a questo ruolo.
Ad esempio, per configurare l'audit 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 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 l'audit 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';
Maschera i dati sensibili negli audit log
Per migliorare la privacy dei dati e la sicurezza, puoi configurare pgAudit in modo che mascheri i valori letterali all'interno delle istruzioni SQL registrate utilizzando il flag cloudsql.pgaudit_mask_literals. Quando questa funzionalità è attiva, le costanti di stringa, i numeri e altri valori letterali vengono sostituiti con segnaposto posizionali negli audit log. In questo modo puoi controllare la struttura delle query e le operazioni eseguite senza registrare valori di dati potenzialmente sensibili.
Vantaggi
- Impedisce la visualizzazione nei log di controllo dei dati sensibili che potrebbero essere incorporati nelle query, inclusi i seguenti esempi:
- Password
- Informazioni personali
- Secret
- Aiuta a soddisfare i requisiti normativi e di conformità relativi alla privacy dei dati.
Come funziona
Quando il flag cloudsql.pgaudit_mask_literals è impostato su on, l'estensione pgAudit elabora l'istruzione SQL prima di scriverla nell'audit log. Se l'estensione identifica valori letterali nella query, li sostituisce prima di registrare la query:
Original statement:
INSERT INTO users (id, email) VALUES (123, 'sensitive@example.com');Istruzione nel log di controllo, con mascheramento abilitato:
INSERT INTO users (id, email) VALUES ($1, $2);
Tieni presente che i valori letterali per l'ID e l'email vengono sostituiti nell'audit log restituito.
Requisiti
- Il flag
cloudsql.pgaudit_mask_literalsè supportato in Cloud SQL per PostgreSQL versioni 14 e successive. - Il flag
cloudsql.enable_pgauditè disattivato per impostazione predefinita e deve essere impostato suonper essere utilizzato.
Attiva mascheramento
Per attivare il mascheramento letterale, imposta il flag di database cloudsql.pgaudit_mask_literals su on. Puoi impostare i flag di database utilizzando la console Google Cloud , gcloud CLI o l'API Cloud SQL Admin.
Per saperne di più, consulta Configura i flag di database.
gcloud sql instances patch INSTANCE_NAME \
--database-flags cloudsql.enable_pgaudit=on,cloudsql.pgaudit_mask_literals=on
Sostituisci INSTANCE_NAME con il nome dell'istanza.
Disattiva mascheramento
Per disattivare il mascheramento letterale, imposta il flag cloudsql.pgaudit_mask_literals su off.
gcloud sql instances patch INSTANCE_NAME \
--database-flags cloudsql.enable_pgaudit=on,cloudsql.pgaudit_mask_literals=off
Sostituisci INSTANCE_NAME con il nome dell'istanza.
Suggerimenti per la gestione degli audit in Cloud SQL
Quando personalizzi il comportamento di controllo, tieni presente quanto segue:
- Quando il flag di database
cloudsql.enable_pgauditè 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_pgauditviene modificato. - Gli utenti del database creati tramite comandi
CREATE ROLEespliciti non dispongono del privilegio per modificare le impostazioni di controllo. Solo gli utenti del database creati tramite la console Google Cloud e il comandogcloudpossono 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. 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 relativa istanza, occupando spazio su disco prima di essere inviati a Cloud Logging. Pertanto, prima di utilizzare questa funzionalità, consulta tutte le seguenti informazioni:
- La velocità di importazione dei log è di 4 MB al secondo. Quando il carico della generazione dei log supera la frequenza di importazione, può verificarsi quanto segue:
- Può 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 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 Esplora metriche.
- Se necessario, riduci l'utilizzo del disco eseguendo meno query o riducendo il controllo.
- Se lo spazio su disco disponibile è esaurito, gli audit log per alcune query potrebbero andare persi.