Best Practices für den Schutz Ihrer AlloyDB for PostgreSQL-Ressourcen

Wenn Sie die Best Practices auf dieser Seite befolgen, können Sie einen starken Sicherheitsstatus für Ihre AlloyDB for PostgreSQL-Ressourcen erreichen.

Hijacking des Suchpfads verhindern

Um Suchpfad-Hijacking zu verhindern, setzen Sie den Parameter search_path für Nutzer mit hohen Berechtigungen auf pg_catalog. Diese Konfiguration sichert den Suchpfad, sodass nicht vertrauenswürdige Schemas wie public umgangen werden.

Führen Sie den folgenden Befehl aus, um diesen Parameter dauerhaft für einen Nutzer festzulegen:

ALTER ROLE USER_NAME SET search_path = pg_catalog,pg_temp;

Führen Sie den folgenden Befehl aus, um diesen Parameter nur für die aktuelle Sitzung festzulegen:

SET search_path TO pg_catalog,pg_temp;

Führen Sie den folgenden Befehl aus, um diesen Parameter für alle Nutzer festzulegen, wenn sie mit einer Datenbank verbunden sind:

ALTER DATABASE DB_NAME SET search_path TO schema1, schema2, public;

Weitere Informationen zum Sichern des public-Schemas finden Sie in der PostgreSQL-Dokumentation zur sicheren Schemanutzung und im CVE-2018-1058-Leitfaden.

BigQuery-Datenzugriff mit dem Foreign Data Wrapper sichern

Wenn Sie den BigQuery Foreign Data Wrapper (FDW) verwenden, werden alle Abfragen von AlloyDB an BigQuery mit dem Dienstkonto des AlloyDB-Clusters authentifiziert. Da dieses Dienstkonto möglicherweise Zugriff auf mehrere sensible BigQuery-Datasets hat, ist es wichtig, dass reguläre Datenbanknutzer keine nicht autorisierten Tabellen zuordnen können.

Um den Zugriff mit den geringsten Berechtigungen zu erzwingen, beschränken Sie die USAGE-Berechtigungen auf dem externen Server, damit Nutzer ohne Administratorrechte keine CREATE FOREIGN TABLE-Anweisungen ausführen können:

  1. Schränken Sie USAGE auf dem externen Server ein: Verhindern Sie, dass Rollen, die keine Administratoren sind, USAGE-Berechtigungen haben, und widerrufen Sie gegebenenfalls USAGE von PUBLIC.

  2. Tabellenerstellung zentralisieren: Erlauben Sie nur Datenbankadministratoren, z. B. Nutzern mit der Rolle alloydbsuperuser, externe Tabellen zu erstellen.

  3. Selektiven Zugriff gewähren: Verwalten Sie den Lesezugriff mit GRANT SELECT für bestimmte Fremdtabellen.

Beispiel: Zugriff mit geringsten Berechtigungen konfigurieren

Der folgende Workflow zeigt, wie ein Administrator einem normalen Nutzer (bob) sicher Zugriff auf eine bestimmte BigQuery-Tabelle gewähren kann, ohne ihm die Möglichkeit zu geben, beliebige Datasets zuzuordnen:

  1. Erstellen Sie als Administrator den fremden Server und entziehen Sie PUBLIC die Berechtigungen USAGE, um das unbefugte Erstellen von Tabellen zu verhindern:

    CREATE EXTENSION IF NOT EXISTS bigquery_fdw;
    CREATE SERVER bq_server FOREIGN DATA WRAPPER bigquery_fdw;
    
    -- Explicitly revoke USAGE from all users to prevent unauthorized table creation
    REVOKE ALL ON FOREIGN SERVER bq_server FROM PUBLIC;
    
  2. Erstellen Sie als Administrator eine Nutzerzuordnung für den regulären Nutzer:

    CREATE USER MAPPING FOR bob SERVER bq_server;
    
  3. Erstellen Sie als Administrator die Fremdtabelle:

    -- Because 'bob' does not have USAGE on bq_server, only the administrator can run this.
    CREATE FOREIGN TABLE example_table (
        id INT,
        state VARCHAR
    ) SERVER bq_server OPTIONS (
        project 'BIGQUERY_PROJECT_ID',
        dataset 'BIGQUERY_DATASET_NAME',
        table 'example_table'
    );
    
  4. Gewähren Sie als Administrator dem regulären Nutzer selektiven Lesezugriff auf die jeweilige Fremdtabelle:

    GRANT SELECT ON public.example_table TO bob;