Audit für PostgreSQL mit pgAudit durchführen

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.

Datenbankprüfung in Cloud SQL einrichten

Für das Audit-Logging mithilfe der pgAudit-Erweiterung sind folgende Schritte erforderlich:

  1. Flag cloudsql.enable_pgaudit in Cloud SQL aktivieren
  2. Befehl ausführen, um pgAudit-Erweiterung zu erstellen
  3. 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.

Auditing 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 Befehl gcloud ä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;

Werte für das Flag pgaudit.log festlegen

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

Weitere 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 die Loganzeige ansehen.

Wenn Sie sich die pgAudit-Logs in der Loganzeige (Klassisch) ansehen möchten, wählen Sie den Logfilter cloudaudit.googleapis.com/data_access aus, wie im Folgenden gezeigt:


Grafik: Diese Abbildung zeigt, wie sich Nutzer die generierten pgAudit-Logs über die Loganzeige ansehen können.

Alternativ können Sie die folgende Abfrage verwenden, um sich alle pgAudit-Logs für ein bestimmtes Cloud SQL-Projekt über die Oberfläche Erweiterte Filter anzusehen.

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"
      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 zu protokollierenden Anweisung. Mögliche Werte sind READ, WRITE, FUNCTION, ROLE, DDL, MISC und MISC_SET.
  • auditType: SESSION oder OBJECT.
  • command: Beispiel: ALTER TABLE oder SELECT
  • parameter: Wenn der Wert für pgaudit.log_parameter festgelegt ist, enthält dieses Feld die Anweisungsparameter als CSV in Anführungszeichen oder „<none>“, wenn keine Parameter vorhanden sind. Andernfalls steht im Feld „<not logged>“.
  • statement: Anweisung, die auf dem Back-End ausgeführt wird.
  • 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.

Diese Felder werden 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 kann über die Google Cloud Console oder mit dem Befehl gcloud geändert werden. 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 Audit-Parameter auf Systemebene können nur als Datenbank-Flags über die Google Cloud Console oder den Befehl gcloud 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 auf allen Instanzdatenbanken können Sie die Google Cloud Console oder den Befehl gcloud verwenden. Wenn Sie beispielsweise das Audit 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 Parameters pgaudit.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. Nur Datenbanknutzer, die über die Google Cloud Console und den Befehl gcloud erstellt wurden, können Audit-Einstellungen ändern.