Per aiutarti a ottenere una security posture efficace per le tue risorse AlloyDB per PostgreSQL, segui le best practice fornite in questa pagina.
Impedisci la compromissione del percorso di ricerca
Per evitare l'hijacking del percorso di ricerca, imposta il parametro search_path su pg_catalog per gli utenti con privilegi elevati. Questa configurazione protegge il percorso di ricerca in modo che gli schemi non attendibili come public vengano 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ù sulla protezione dello schema public, consulta la documentazione di PostgreSQL sull'utilizzo sicuro dello schema e la guida CVE-2018-1058.
Proteggi l'accesso ai dati BigQuery utilizzando il wrapper dei 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 service account potrebbe avere accesso a più set di dati BigQuery sensibili, è fondamentale impedire agli utenti normali del database di mappare tabelle non autorizzate.
Per applicare l'accesso con privilegi minimi, limita i privilegi USAGE sul server esterno in modo che gli utenti non amministratori non possano eseguire istruzioni CREATE FOREIGN TABLE:
Limita
USAGEsul server esterno: impedisci ai ruoli non amministratore di avere privilegiUSAGEe revocaUSAGEdaPUBLIC, se necessario.Centralizza la creazione delle tabelle: consenti solo agli amministratori di database, ad esempio gli utenti con il ruolo
alloydbsuperuser, di creare tabelle esterne.Concedi l'accesso selettivo: gestisci l'accesso in lettura utilizzando
GRANT SELECTsu tabelle esterne specifiche.
Esempio: configura l'accesso con privilegio minimo
Il seguente workflow 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:
In qualità di amministratore, crea il server esterno e revoca i privilegi
USAGEdaPUBLICper impedire la creazione non autorizzata di tabelle: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;In qualità di amministratore, crea una mappatura utente per l'utente normale:
CREATE USER MAPPING FOR bob SERVER bq_server;In qualità di amministratore, crea la tabella esterna:
-- 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' );In qualità di amministratore, concedi l'accesso in lettura selettivo alla tabella esterna specifica all'utente normale:
GRANT SELECT ON public.example_table TO bob;