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, establece el parámetro search_path
en pg_catalog para los usuarios con privilegios elevados. Esta configuración protege la
ruta de búsqueda para 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 configurar 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 conecten 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 sobre cómo proteger el esquema public, consulta la
documentación de PostgreSQL sobre el uso seguro de esquemas y la
guía de 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 con privilegios mínimos, restringe los privilegios de USAGE en el servidor
externo para que los usuarios que no son administradores no puedan ejecutar sentencias
CREATE FOREIGN TABLE:
Restringe
USAGEen el servidor externo: evita que los roles que no son de administrador tengan privilegios deUSAGEy revocaUSAGEdePUBLICsi es necesario.Centraliza la creación de tablas: permite que solo los administradores de bases de datos, como los usuarios con el rol
alloydbsuperuser, creen tablas externas.Otorga acceso selectivo: administra el acceso de lectura con
GRANT SELECTen tablas externas específicas.
Ejemplo: Configura el acceso con privilegio mínimo
En el siguiente flujo de trabajo, se muestra cómo un administrador puede otorgar de forma segura a un
usuario normal (bob) acceso a una tabla específica de BigQuery sin
permitirle asignar conjuntos de datos arbitrarios:
Como administrador, crea el servidor externo y revoca los privilegios de
USAGEdePUBLICpara evitar la creación de tablas no autorizadas: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;Como administrador, crea una asignación de usuario para el usuario normal:
CREATE USER MAPPING FOR bob SERVER bq_server;Como administrador, crea la tabla externa:
-- 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' );Como administrador, otorga acceso de lectura selectivo en la tabla externa específica al usuario normal:
GRANT SELECT ON public.example_table TO bob;