DataSunrise está patrocinando AWS re:Invent 2024 en Las Vegas, por favor visítenos en el stand #2158 de DataSunrise

ABAC en PostgreSQL

ABAC en PostgreSQL

abac en postgresql

Asegurar los datos sensibles en las bases de datos PostgreSQL requiere control de acceso granular. ABAC es un método para establecer y aplicar reglas de acceso. Estas reglas se basan en atributos de usuario, recurso y ambientales. En este artículo, discutiremos cómo usar ABAC en PostgreSQL para controlar el acceso a sus datos con ejemplos.

Comprendiendo ABAC

ABAC es un modelo de control de acceso que determina los derechos de acceso en función de atributos. Los usuarios pueden conectar estos rasgos a títulos de trabajo, equipos, recursos como datos, registros y entornos como tiempo y lugar. ABAC proporciona una forma flexible y dinámica de establecer políticas de acceso. Esto permite un control más detalado que los modelos de control de acceso basado en roles tradicionales.

En PostgreSQL, puede usar diferentes métodos como seguridad a nivel de fila y etiquetas de seguridad para implementar ABAC. Exploremos cada una de estas técnicas y veamos cómo puede aplicarlas para hacer cumplir ABAC en su base de datos PostgreSQL.

Seguridad a Nivel de Fila

La seguridad a nivel de fila en PostgreSQL le permite controlar el acceso a filas específicas en una tabla según los atributos del usuario. Las políticas RLS son reglas escritas en SQL que los usuarios pueden aplicar a ciertas tablas o a todas las tablas en una base de datos.

A continuación, se muestra cómo habilitar RLS y crear una política que limite el acceso a filas basadas en el atributo de departamento de un usuario.

CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name TEXT,
department TEXT,
salary NUMERIC
);
ALTER TABLE employees ENABLE ROW LEVEL SECURITY;
CREATE POLICY department_access ON employees
USING (department = current_setting('app.current_user_department'));

En este ejemplo, creamos una tabla `employees` y habilitamos RLS en ella. La cláusula `USING` define la política `department_access`, que especifica la condición para acceder a las filas.

La política verifica si la columna department de cada fila coincide con el atributo de departamento actual del usuario. La aplicación almacena el atributo de departamento actual del usuario en app.current_user_department.

Para establecer el atributo de departamento del usuario, puede usar la función `set_config`:

SELECT set_config('app.current_user_department', 'HR', false);

Esta política permite a los usuarios ver solo las filas de sus departamentos, asegurando un control de acceso estricto basado en sus atributos.

Etiquetas de Seguridad

Las etiquetas de seguridad proporcionan otra forma de implementar ABAC en PostgreSQL. Los objetos de la base de datos asignan pares clave-valor conocidos como etiquetas. Estas categorizan tablas o filas basadas en atributos de seguridad. Luego puede definir políticas de acceso basadas en estas etiquetas.

A continuación, se muestra un ejemplo de cómo crear etiquetas de seguridad y definir una política de acceso usando estas:

CREATE EXTENSION sepgsql;
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
classification TEXT
);
SECURITY LABEL FOR selinux ON TABLE documents IS 'system_u:object_r:sepgsql_table_t:s0';
SECURITY LABEL FOR selinux ON COLUMN documents.classification IS 'system_u:object_r:sepgsql_column_t:s0';
CREATE POLICY document_access ON documents
USING (sepgsql_has_perm(current_user, classification, 'read') = 't');

En este ejemplo, creamos una tabla llamada `documents`. Asignamos etiquetas de seguridad tanto a la tabla como a la columna `classification` usando el comando `SECURITY LABEL`. Las etiquetas siguen el formato de SELinux y categorizan la tabla y la columna según los atributos de seguridad.

A continuación, definimos una política de acceso `document_access` utilizando la función `sepgsql_has_perm`. Esta función verifica si el usuario tiene permiso para leer la etiqueta de clasificación de cada fila. Sólo las filas para las que la función devuelve `true` (`’t’`) son accesibles para el usuario.

Expresiones de Política

Las expresiones de políticas le permiten definir reglas de control de acceso complejas basadas en atributos y condiciones. Proporcionan una forma flexible de combinar múltiples atributos y lógica para determinar los derechos de acceso.

A continuación, se muestra un ejemplo de cómo usar expresiones de políticas para implementar ABAC:

CREATE TABLE sales (
id SERIAL PRIMARY KEY,
product TEXT,
region TEXT,
amount NUMERIC
);
CREATE POLICY regional_sales ON sales
USING (
(region = current_setting('app.current_user_region') AND amount = 10000) OR
(current_setting('app.current_user_role') = 'manager')
);

En este ejemplo, tenemos una tabla `sales` que almacena datos de ventas, incluyendo el producto, la región y la cantidad. La política `regional_sales` define usando una expresión de política que combina múltiples condiciones.

La política otorga acceso a los registros de ventas si se cumple alguna de las siguientes condiciones:

El atributo de región del usuario coincide con la columna `region` de la fila y la `amount` es menor o igual a 10,000.

El sistema establece el atributo de rol del usuario a `’manager’`, otorgándoles acceso sin restricciones a todos los registros de ventas.

El usuario puede establecer sus atributos de región y rol usando la función `set_config`, similar a los ejemplos anteriores.

Combinando Técnicas ABAC

Puede implementar ABAC en PostgreSQL usando una combinación de las técnicas discutidas anteriormente. Combine RLS, etiquetas de seguridad y expresiones de políticas para un sistema de control de acceso personalizado que se ajuste a sus necesidades.

Puede usar RLS para controlar el acceso por departamento. Use etiquetas de seguridad para categorizar datos sensibles y expresiones de políticas para crear reglas de acceso detalladas. Luego puede basar estas reglas en varios atributos y condiciones.

Consideraciones de Rendimiento

Implementar ABAC en PostgreSQL puede afectar el rendimiento de las consultas, especialmente cuando se trata de políticas de acceso complejas. Es importante considerar los siguientes aspectos del rendimiento:

  • Evaluación de políticas: El sistema evalúa cada política a nivel de fila para cada consulta, lo que puede agregar sobrecarga a la ejecución de la consulta. Optimice sus políticas para minimizar el número de condiciones y la complejidad.
  • Indexación: Asegúrese de indexar adecuadamente las columnas utilizadas en sus políticas de acceso para acelerar la evaluación de políticas. Considere crear índices en los atributos que se utilizan con frecuencia en las condiciones de las políticas.
  • Caché: PostgreSQL almacena en caché el resultado de las evaluaciones de políticas durante un corto período. Ajuste el parámetro de configuración `row_security_cache_size` para equilibrar la eficiencia del caché y el uso de la memoria.
  • Particionar sus tablas en función de atributos específicos puede ayudar a gestionar tablas grandes y políticas de acceso más eficazmente. Esto puede mejorar el rendimiento de las consultas al reducir el número de filas examinadas durante la evaluación de políticas.

Pruebas y Auditoría

Al implementar ABAC en PostgreSQL, es crucial probar a fondo sus políticas de acceso para asegurarse de que se comporten como se espera. Pruebe sus reglas creando diferentes escenarios con atributos de usuario, atributos de recurso y condiciones ambientales para garantizar precisión.

Además, habilite el registro y la auditoría para monitorear los intentos de acceso y las evaluaciones de políticas. PostgreSQL ofrece mecanismos de registro integrados que los usuarios pueden configurar para capturar eventos relevantes de control de acceso. Revise regularmente los registros para identificar cualquier intento de acceso no autorizado o configuraciones incorrectas de políticas.

Conclusión

ABAC es un enfoque poderoso para hacer cumplir el control de acceso granular en bases de datos PostgreSQL. Puede crear políticas de acceso basadas en atributos de usuario, atributos de recurso y condiciones ambientales. Puede hacerlo utilizando técnicas como seguridad a nivel de fila, etiquetas de seguridad y expresiones de políticas.

Usar ABAC en PostgreSQL ayuda a proteger datos sensibles, cumplir con las regulaciones y mantener la privacidad de los datos. Asegúrese de probar y auditar sus políticas de acceso para asegurarse de que funcionen bien y no causen problemas.

Este artículo le muestra cómo implementar ABAC en su base de datos PostgreSQL para mejorar la seguridad de su aplicación. No olvide revisar y cambiar sus reglas de acceso según sea necesario para mantener su sistema de acceso a datos fuerte y seguro.

Siguiente

Enmascaramiento de Datos en PostgreSQL

Enmascaramiento de Datos en PostgreSQL

Más información

¿Necesita la ayuda de nuestro equipo de soporte?

Nuestros expertos estarán encantados de responder a sus preguntas.

Información general:
[email protected]
Servicio al Cliente y Soporte Técnico:
support.datasunrise.com
Consultas sobre Asociaciones y Alianzas:
[email protected]