Best practice per proteggere le risorse AlloyDB per PostgreSQL

Per aiutarti a ottenere una solida strategia di sicurezza per le risorse AlloyDB per PostgreSQL, segui le best practice fornite in questa pagina.

Impedire la compromissione del percorso di ricerca

Per impedire la compromissione del percorso di ricerca, assicurati che gli utenti con privilegi elevati abbiano il parametro search_path impostato su pg_catalog. In questo modo, il percorso di ricerca è protetto e gli schemi non attendibili come public vengono ignorati.

Per impostare questo parametro in modo permanente per un utente, esegui questo comando:

ALTER ROLE USER_NAME SET search_path = pg_catalog,pg_temp;

Per impostare questo parametro solo per la sessione corrente, esegui questo comando:

SET search_path TO pg_catalog,pg_temp;

Per impostare questo parametro per tutti gli utenti quando sono connessi a un database, esegui questo comando:

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

Per saperne di più, consulta la documentazione di PostgreSQL sull'utilizzo sicuro dello schema e la guida CVE-2018-1058.

Proteggere l'accesso ai dati BigQuery utilizzando il wrapper di dati esterni

Quando utilizzi il wrapper di dati esterni (FDW) di BigQuery, tutte le query da AlloyDB a BigQuery vengono autenticate utilizzando l'account di servizio del cluster AlloyDB. Poiché questo account di servizio potrebbe avere accesso a più set di dati BigQuery sensibili, è fondamentale impedire agli utenti di database regolari di mappare tabelle non autorizzate.

Per applicare l'accesso con privilegio minimo, gli amministratori devono limitare i privilegi USAGE sul server esterno. In questo modo, gli utenti non amministratori non possono eseguire le istruzioni CREATE FOREIGN TABLE.

  1. Limita USAGE sul server esterno assicurandoti che i ruoli non amministrativi non abbiano privilegi USAGE sul server esterno. Se necessario, revoca il privilegio da PUBLIC.
  2. Centralizza la creazione delle tabelle: solo gli amministratori di database, ad esempio gli utenti con il ruolo alloydbsuperuser, possono creare tabelle esterne.
  3. Concedi l'accesso selettivo: gli amministratori gestiscono l'accesso in lettura utilizzando GRANT SELECT su tabelle esterne specifiche.

Esempio: configurare l'accesso con privilegio minimo

Il seguente flusso di lavoro mostra come un amministratore può concedere in modo sicuro a un utente normale (bob) l'accesso a una tabella BigQuery specifica senza consentirgli di mappare set di dati arbitrari.

-- Step 1: Create the server and restrict access (Executed as Administrator) ```sql 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; ```

-- Step 2: Create a User Mapping for the regular user (Executed as Administrator) sql CREATE USER MAPPING FOR bob SERVER bq_server;

-- Step 3: Create the Foreign Table (Executed as Administrator) -- Because 'bob' does not have USAGE on bq_server, only the administrator can run this. sql CREATE FOREIGN TABLE example_table ( id INT, state VARCHAR ) SERVER bq_server OPTIONS ( project 'BIGQUERY_PROJECT_ID', dataset 'BIGQUERY_DATASET_NAME', table 'example_table' );

-- Step 4: Grant Selective Read Access (Executed as Administrator) -- Explicitly grant read access to the regular user for this specific table. sql GRANT SELECT ON public.example_table TO bob;