Prácticas recomendadas para proteger tus recursos de AlloyDB para PostgreSQL

Para ayudarte a lograr una postura de seguridad sólida para tus recursos de AlloyDB para PostgreSQL, sigue las prácticas recomendadas que se proporcionan en esta página.

Evita el secuestro de la ruta de búsqueda

Para evitar el secuestro de la ruta de búsqueda, asegúrate de que los usuarios con privilegios altos tengan el parámetro search_path establecido en pg_catalog. Esto garantiza que la ruta de búsqueda esté protegida y que se omitan los esquemas no confiables, como public.

Para establecer este parámetro de forma permanente para un usuario, ejecuta el siguiente comando:

ALTER ROLE USER_NAME SET search_path = pg_catalog,pg_temp;

Para establecer este parámetro solo para la sesión actual, ejecuta el siguiente comando:

SET search_path TO pg_catalog,pg_temp;

Para establecer este parámetro para todos los usuarios cuando se conectan a una base de datos, ejecuta el siguiente comando:

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

Para obtener más información, consulta la documentación de PostgreSQL sobre el uso seguro de esquemas y la guía CVE-2018-1058.

Protege el acceso a los datos de BigQuery con el wrapper de datos externos

Cuando usas el wrapper de datos externos (FDW) de BigQuery, todas las consultas de AlloyDB a BigQuery se autentican con la cuenta de servicio del clúster de AlloyDB. Debido a que esta cuenta de servicio puede tener acceso a varios conjuntos de datos sensibles de BigQuery, es fundamental evitar que los usuarios habituales de la base de datos asignen tablas no autorizadas.

Para aplicar el acceso de privilegio mínimo, los administradores deben restringir los privilegios USAGE en el servidor externo. Esto impide físicamente que los usuarios que no son administradores ejecuten instrucciones CREATE FOREIGN TABLE.

  1. Restringe USAGE en el servidor externo. Para ello, asegúrate de que los roles que no son de administrador no tengan privilegios USAGE en el servidor externo. Revócalo de PUBLIC si es necesario.
  2. Centraliza la creación de tablas. Solo los administradores de bases de datos, por ejemplo, los usuarios con el rol alloydbsuperuser, pueden crear tablas externas.
  3. Otorga acceso selectivo. Los administradores administran el acceso de lectura con GRANT SELECT en tablas externas específicas.

Ejemplo: Configura el acceso de privilegio mínimo

El siguiente flujo de trabajo muestra cómo un administrador puede otorgar de forma segura a un usuario habitual (bob) acceso a una tabla específica de BigQuery sin permitirle asignar conjuntos de datos arbitrarios.

-- 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;