Auf dieser Seite wird die Datenbankprüfung mit der pgAudit-Erweiterung beschrieben. Damit können Sie viele Logs konfigurieren, die häufig für die Einhaltung von behördlichen, finanziellen und ISO-Zertifizierungen erforderlich sind.
Allgemeine Informationen zu PostgreSQL-Erweiterungen in Cloud SQL finden Sie unter PostgreSQL-Erweiterungen.
Übersicht
Die Datenbankprüfung in Cloud SQL for PostgreSQL ist über die Open-Source-pgAudit-Erweiterung möglich.
Mit dieser Erweiterung können Sie SQL-Vorgänge, die für eine bestimmte Datenbankinstanz ausgeführt wurden, selektiv aufzeichnen und verfolgen. Die Erweiterung bietet Ihnen Prüfungsfunktionen, mit denen Sie einen Teil der Vorgänge überwachen und aufzeichnen können.
Die pgAudit-Erweiterung gilt für ausgeführte SQL-Befehle und -Abfragen. Im Gegensatz dazu sollten Cloud-Audit-Logs verwendet werden, um Verwaltungs- und Wartungsvorgänge für eine Cloud SQL-Instanz zu prüfen.
Weitere Informationen zum Audit-Logging in Cloud SQL finden Sie auf der Seite Audit-Logs.
Datenbankprüfung in Cloud SQL einrichten
Für das Audit-Logging mithilfe der pgAudit-Erweiterung sind folgende Schritte erforderlich:
- Flag
cloudsql.enable_pgaudit
in Cloud SQL aktivieren - Befehl ausführen, um pgAudit-Erweiterung zu erstellen
- Werte für das Flag
pgaudit.log
festlegen
Nach dem Einrichten der Datenbank-Auditing können Sie sich die Logs ansehen und das Logging gegebenenfalls deaktivieren.
Prüfung einrichten
In diesem Abschnitt werden die Grundlagen der Einrichtung von Datenbankprüfungsvorgängen beschrieben.
Erstes Flag zum Aktivieren des Auditing
In Cloud SQL verwenden Sie Datenbank-Flags für viele Vorgänge, einschließlich des Anpassens von PostgreSQL-Parametern und des Konfigurierens einer Instanz. Das Flag cloudsql.enable_pgaudit
aktiviert das Auditing für eine bestimmte Datenbankinstanz. Sie können den Wert des Flags cloudsql.enable_pgaudit
über die Google Cloud Console oder mit dem gcloud
-Befehl ändern.
Verwenden Sie die Standardanleitung für Flags, um das Flag cloudsql.enable_pgaudit
zu aktivieren und den Wert auf on
zu setzen. Geben Sie beispielsweise zur Verwendung des gcloud
-Befehls Folgendes an und ersetzen Sie [INSTANCE_NAME]
durch Ihren Instanznamen:
gcloud sql instances patch [INSTANCE_NAME] --database-flags cloudsql.enable_pgaudit=on
Das Flag cloudsql.enable_pgaudit
wird mit den anderen unterstützten Flags aufgeführt und gilt speziell für Cloud SQL.
Befehl ausführen, um pgAudit-Erweiterung zu erstellen
Führen Sie nach dem Aktivieren des Datenbank-Flags den Befehl CREATE EXTENSION
mit einem kompatiblen psql-Client aus. Mit dem folgenden Befehl wird die pgAudit-Erweiterung für alle Datenbanken in einer Cloud SQL-Instanz erstellt:
CREATE EXTENSION pgaudit;
Legen Sie Werte für das Flag pgaudit.log
fest.
Verwenden Sie die Standardanleitung für Flags, um Werte für das Flag pgaudit.log
festzulegen.
Mit dem folgenden gcloud
-Befehl können Sie beispielsweise die Prüfung für alle Datenbankvorgänge für eine Instanz aktivieren:
gcloud sql instances patch [INSTANCE_NAME] --database-flags \
cloudsql.enable_pgaudit=on,pgaudit.log=all
Andere Einstellungen für die Datenbank konfigurieren
Um die Prüfungseinstellungen für die Datenbank zu konfigurieren, folgen Sie den Schritten im Abschnitt Audit-Logging für Datenbanken in Cloud SQL anpassen.
Datenbank-Audit-Logs ansehen
Aktivieren Sie Audit-Logs zum Datenzugriff für Ihr Projekt, um sich Audit-Logs ansehen zu können. Die generierten pgAudit-Logs für die jeweilige Instanz werden als Audit-Logs zum Datenzugriff an Cloud Logging gesendet. Nutzer können sich die generierten pgAudit-Logs über den Log-Explorer ansehen.
Wenn Sie die pgAudit-Logs in der Log-Explorer-Anwendung aufrufen möchten, wählen Sie den Logfilter cloudaudit.googleapis.com/data_access aus.
Alternativ können Sie die folgende Abfrage verwenden, um alle pgAudit-Logs für ein bestimmtes Cloud SQL-Projekt aufzurufen:
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"
Logformat für pgAudit
Jeder pgAudit-Logeintrag in den Audit-Logs zum Datenzugriff enthält Felder, die die für eine Abfrage erfassten Informationen enthalten.
Hier ein Beispiel:
{ 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" } } }
Im Folgenden werden die Felder in den Audit-Logs zum Datenzugriff beschrieben:
- auditClass. Der Typ der protokollierten Anweisung. Mögliche Werte sind
READ
,WRITE
,FUNCTION
,ROLE
,DDL
,MISC
undMISC_SET
. - auditType.
SESSION
oderOBJECT
. - chunkCount. Die Blockaufteilung kann mit den Daten in den Feldern
parameter
undstatement
erfolgen. Das FeldchunkCount
gibt die Gesamtzahl der Blöcke an. Sehen Sie sich auch die Beschreibung des FeldschunkIndex
an. - chunkIndex. Gibt die Indexnummer der Datenblöcke in den Feldern
parameter
undstatement
im aktuellenrequest
-Container an. Die erste Zahl ist1
. Sehen Sie sich auch die Beschreibung des FeldschunkCount
an. - command: Beispiel:
ALTER TABLE
oderSELECT
- parameter: Das Feld
chunkIndex
kann den Inhalt dieses Felds bestimmen. Siehe die Beschreibung des FeldschunkIndex
. Wenn der Wert fürpgaudit.log_parameter
festgelegt ist, kann das Feldparameter
die Anweisungsparameter als CSV-Daten in Anführungszeichen enthalten. Wenn keine Parameter vorhanden sind, enthält dieses Feld[none]
. Andernfalls enthält dieses Feld[not logged]
. - statement: Anweisung, die auf dem Back-End ausgeführt wurde.
Das Feld
chunkIndex
kann den Inhalt des Feldsstatement
bestimmen. Siehe die Beschreibung des FeldschunkIndex
. - statementId Eindeutige Anweisungs-ID für diese Sitzung. Jede Anweisungs-ID stellt einen Back-End-Aufruf dar. Anweisungs-IDs sind sequenziell, selbst wenn einige Anweisungen nicht protokolliert werden.
- substatementId Sequenzielle ID für jede Unteranweisung in der Hauptanweisung.
Einige dieser Felder sind auch in der pgAudit-Dokumentation beschrieben.
Prüfung deaktivieren
Wenn Sie die Datenbankprüfung deaktivieren möchten, setzen Sie das Flag cloudsql.enable_pgaudit
auf off
. Der Wert lässt sich über die Cloud Console oder mit dem gcloud
-Befehl ändern. Folgen Sie der Standardanleitung für Flags, um das Flag cloudsql.enable_pgaudit
zu deaktivieren.
Führen Sie außerdem den Befehl DROP EXTENSION
mit einem kompatiblen psql-Client aus, um den Erweiterungsstatus zu entfernen:
DROP EXTENSION pgaudit;
Audit-Logging für Datenbanken in Cloud SQL anpassen
In diesem Abschnitt wird beschrieben, wie Sie das Prüfverhalten einer Datenbankinstanz anpassen können.
Informationen zu weiteren Funktionen der Erweiterung finden Sie in der pgAudit-Dokumentation.
Anforderungen für Superuser-Berechtigungen
In Cloud SQL können Erweiterungen nur von Nutzern mit der Rolle cloudsqlsuperuser
erstellt werden. Wenn Sie eine neue PostgreSQL-Instanz erstellen, wird der PostgreSQL-Standardnutzer für Sie erstellt. Sie müssen jedoch das Passwort des Nutzers festlegen.
Der PostgreSQL-Standardnutzer hat die Rolle cloudsqlsuperuser
. Weitere Informationen finden Sie unter PostgreSQL-Nutzer.
Prüfung für alle Datenbankvorgänge für die Instanz konfigurieren
Zum Konfigurieren der Prüfung für alle Datenbanken in einer Instanz müssen die pgAudit-Einstellungen auf Systemebene angewendet werden. Die Prüfparameter auf Systemebene können nur als Datenbank-Flags über die Google Cloud Console oder den gcloud
-Befehl festgelegt werden.
Mit dem folgenden gcloud
-Befehl können Sie beispielsweise die Prüfung für alle Datenbankvorgänge für eine Instanz aktivieren:
gcloud sql instances patch [INSTANCE_NAME] --database-flags \
cloudsql.enable_pgaudit=on,pgaudit.log=all
Bestimmte Vorgänge für alle Instanzdatenbanken konfigurieren
Für die Prüfung aller Instanzdatenbanken können Sie die Google Cloud Console oder den Befehl gcloud
verwenden. Wenn Sie beispielsweise die Prüfung nur für Lese- und Schreibvorgänge auf der Instanz aktivieren möchten, können Sie den folgenden gcloud
-Befehl verwenden. In diesem Beispiel wird eine listenbasierte Syntax zum Angeben mehrerer Werte verwendet:
gcloud sql instances patch [INSTANCE_NAME] \
--database-flags ^:^cloudsql.enable_pgaudit=on:pgaudit.log=read,write
Der Befehl überschreibt die vorhandenen Datenbank-Flags.
Prüfung für eine bestimmte Datenbank konfigurieren
Um die Prüfung für eine bestimmte Datenbank zu konfigurieren, legen Sie die pgAudit-Parameter auf Datenbankebene fest. Mit dem folgenden SQL-Befehl kann beispielsweise die Lese-/Schreibprüfung für eine Datenbank namens finance
aktiviert werden:
finance=> ALTER DATABASE finance SET pgaudit.log = 'read,write';
Prüfung für eine Beziehung konfigurieren
Die Prüfung für eine Beziehung ist weniger umfassend als die Prüfung für eine bestimmte Datenbank.
Beim Prüfen einer Beziehung wird dem Parameter pgaudit.role
eine spezielle Prüferrolle zugewiesen. Alle Objekte oder Beziehungen, die dieser Rolle zugewiesen werden, werden in Logs erfasst.
Wenn Sie beispielsweise die Prüfung für alle SELECT
-Abfragen in der salary
-Beziehung in der employee
-Datenbank konfigurieren möchten, können Sie die folgenden Befehle verwenden:
employee=> CREATE ROLE auditor WITH NOLOGIN;
employee=> ALTER DATABASE employee SET pgaudit.role = 'auditor';
employee=> GRANT SELECT ON salary TO auditor;
Sie können auch nur einen Teil der Spalten für eine bestimmte Beziehung prüfen.
Mit dem folgenden Befehl wird beispielsweise das Audit-Logging so konfiguriert, dass es nur erfolgt, wenn auf die Spalten income
und tax_status
über die salary
-Beziehung zugegriffen wird:
employee=> GRANT SELECT(income, tax_status) ON salary TO auditor;
Prüfung für einen Datenbanknutzer konfigurieren
Sie können die Prüfung für einen bestimmten Nutzer aktivieren, indem Sie den Parameter pgaudit.log
auf ROLE
-Ebene festlegen.
Mit dem folgenden SQL-Befehl wird beispielsweise die Prüfung für alle Datenbankvorgänge festgelegt, die die Nutzerin Alice
ausführt:
finance=> ALTER ROLE alice SET pgaudit.log = 'all';
Tipps zur Prüfungsverwaltung in Cloud SQL
Beachten Sie beim Anpassen des Prüfverhaltens Folgendes:
- Wenn das Datenbank-Flag
cloudsql.enable_pgaudit
deaktiviert ist, wird das Audit-Logging sofort beendet. Die angewendeten pgAudit-Einstellungen (z. B. die Einstellungen des Parameterspgaudit.log
) werden gespeichert, können aber explizit entfernt werden. - Die Datenbankinstanz wird neu gestartet, wenn der Wert des Datenbank-Flags für
cloudsql.enable_pgaudit
geändert wird. - Datenbanknutzer, die mit expliziten
CREATE ROLE
-Befehlen erstellt wurden, können keine Prüfungseinstellungen ändern. Das können nur Datenbanknutzer, die über die Google Cloud Console und dengcloud
-Befehl erstellt wurden. - Wenn Sie sowohl das Sitzungs-Audit-Logging als auch das Objekt-Audit-Logging aktivieren, werden den Logs Anweisungen hinzugefügt, die sich auf beide beziehen. Sitzungs- und Objekt-Logging heben sich nicht gegenseitig auf oder verändern sich.
Einschränkungen der Erweiterung "pgAudit" in Cloud SQL for PostgreSQL
Audit-Logs werden vorübergehend auf das Laufwerk ihrer Instanz geschrieben und belegen Speicherplatz, bevor die Logs an Cloud Logging gesendet werden. Sehen Sie sich daher alle folgenden Informationen an, bevor Sie dieses Feature verwenden:
- Die Logaufnahmerate beträgt 4 MB pro Sekunde. Wenn die Last aus der Loggenerierung die Aufnahmerate überschreitet, kann Folgendes auftreten:
- Es kann zu einem Anstieg der Laufwerknutzung kommen.
- Der Speicherplatz kann aufgebraucht werden.
- Wenn Sie dieses Feature aktiviert haben und viele Abfragen ausführen, die Ihre Prüfungskriterien erfüllen, kann die Laufwerknutzung zu schnell anwachsen.
- Bevor Sie dieses Feature verwenden, sollten Sie Folgendes tun:
- Automatische Speichererhöhungen aktivieren
- Gesamte Laufwerknutzung überwachen. Die Last aus der Loggenerierung kann nicht separat überwacht werden. Verwenden Sie den Messwert cloudsql.googleapis.com/database/disk/utilization im Metrics Explorer.
- Verringern Sie die Laufwerknutzung gegebenenfalls, indem Sie weniger Abfragen ausführen oder die Prüfung reduzieren.
- Wenn der verfügbare Speicherplatz aufgebraucht ist, gehen Audit-Logs für einige Abfragen möglicherweise verloren.