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.
- Restringe
USAGEen el servidor externo. Para ello, asegúrate de que los roles que no son de administrador no tengan privilegiosUSAGEen el servidor externo. Revócalo dePUBLICsi es necesario. - 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. - Otorga acceso selectivo. Los administradores administran el acceso de lectura con
GRANT SELECTen 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;