Tutorial: Configuración de ABAC

En este tutorial se muestra cómo configurar políticas de control de acceso basado en atributos (ABAC) para filtros de filas y máscaras de columnas en Unity Catalog mediante la interfaz de usuario del Explorador de Catálogos. Para obtener una versión totalmente basada en SQL que también cubre el enmascaramiento condicional de correo electrónico, consulte Tutorial: Configuración de ABAC con SQL.

En este ejemplo, un equipo de análisis de EE. UU. no debe poder acceder a los registros de clientes de la UE ni a los números de seguridad social. Sin embargo, deben poder acceder a otros clientes y datos de clientes en la misma tabla. Este tutorial incluye los pasos siguientes:

  1. Creación de una etiqueta regulada
  2. Creación de un catálogo, esquema y tabla de Unity Catalog
  3. Aplicación de etiquetas reguladas a columnas
  4. Crear una UDF para ocultar datos de clientes de la UE
  5. Creación de una directiva de filtro de fila
  6. Creación de una UDF para ocultar SSN
  7. Crear una directiva de máscara de columna
  8. Selecciona tu mesa usando las políticas

Para obtener una demostración de la configuración de ABAC, consulte Descubrimiento del Control de Acceso Basado en Atributos (ABAC) con Unity Catalog.

Prerrequisitos

  • Databricks Runtime 16.4 o superior, o computación sin servidor.
  • Permisos de administrador de cuenta o administrador del área de trabajo (para crear etiquetas reguladas).
  • Para aplicar etiquetas reguladas a columnas (paso 3): el ASSIGN privilegio de la etiqueta regulada (los administradores de cuentas tienen esto de forma predeterminada) y el APPLY TAG privilegio en la tabla de destino.
  • Permiso MANAGE en el catálogo o esquema de destino.
  • EXECUTE en las UDF.

El proceso que ejecuta entornos de ejecución anteriores no puede acceder a las tablas protegidas por ABAC. Como solución alternativa temporal, puede configurar ABAC para que se aplique solo a un grupo específico. Agregue los usuarios que desea restringir a ese grupo. Los usuarios que no están en el grupo todavía pueden acceder a las tablas.

Paso 1: Crear una etiqueta regulada

Para crear una etiqueta regulada, debes tener el permiso CREATE para etiquetas reguladas a nivel de cuenta. Los administradores de cuentas y áreas de trabajo tienen CREATE de forma predeterminada.

  1. En el área de trabajo de Azure Databricks, haga clic en el icono Datos.Catálogo.

  2. Haga clic en el icono Escudo.botón Administrar.

  3. En el menú desplegable, haga clic en Etiquetas gobernadas.

  4. Haga clic en Crear etiqueta regulada.

  5. Escriba la clave de etiqueta pii.

  6. Escriba una descripción para la etiqueta regulada.

  7. Escriba los valores permitidos para la etiqueta : ssn y address. Solo estos valores se pueden asignar a esta clave de etiqueta.

    Tutorial: Creación de una directiva de etiquetas.

  8. Haga clic en Crear.

Advertencia

Los datos de etiqueta se almacenan como texto sin formato y se pueden replicar globalmente. No use nombres de etiqueta, valores ni descriptores que puedan poner en peligro la seguridad de los recursos. Por ejemplo, no use nombres de etiqueta, valores o descriptores que contengan información personal o confidencial.

Paso 2: Crear la tabla de clientes

Para seguir estos pasos, debe tener el permiso de CREATE CATALOG en el metastore de Unity Catalog. También puedes crear la tabla en un esquema sobre el que tengas el permiso CREATE TABLE.

  1. En la barra lateral, haga clic en +Nuevo>Cuaderno.
  2. Seleccione SQL como idioma del cuaderno.
  3. Haga clic en Conectar y adjunte el cuaderno a un recurso de proceso.
  4. Agregue los siguientes comandos al cuaderno y ejecútelos:
-- Create catalog (if not already exists)
CREATE CATALOG IF NOT EXISTS abac;
USE CATALOG abac;

-- Create schema
CREATE SCHEMA IF NOT EXISTS customers;
USE SCHEMA customers;

-- Create table
CREATE TABLE IF NOT EXISTS profiles (
    First_Name STRING,
    Last_Name STRING,
    Phone_Number STRING,
    Address STRING,
    SSN STRING
)
USING DELTA;

-- Insert data
INSERT INTO profiles (First_Name, Last_Name, Phone_Number, Address, SSN)
VALUES
('John', 'Doe', '123-456-7890', '123 Main St, NY', '123-45-6789'),
('Jane', 'Smith', '234-567-8901', '456 Oak St, CA', '234-56-7890'),
('Alice', 'Johnson', '345-678-9012', '789 Pine St, TX', '345-67-8901'),
('Bob', 'Brown', '456-789-0123', '321 Maple St, FL', '456-78-9012'),
('Charlie', 'Davis', '567-890-1234', '654 Cedar St, IL', '567-89-0123'),
('Emily', 'White', '678-901-2345', '987 Birch St, WA', '678-90-1234'),
('Frank', 'Miller', '789-012-3456', '741 Spruce St, WA', '789-01-2345'),
('Grace', 'Wilson', '890-123-4567', '852 Elm St, NV', '890-12-3456'),
('Hank', 'Moore', '901-234-5678', '963 Walnut St, CO', '901-23-4567'),
('Ivy', 'Taylor', '012-345-6789', '159 Aspen St, AZ', '012-34-5678'),
('Liam', 'Connor', '111-222-3333', '12 Abbey Street, Dublin, Ireland EU', '111-22-3333'),
('Sophie', 'Dubois', '222-333-4444', '45 Rue de Rivoli, Paris, France Europe', '222-33-4444'),
('Hans', 'Müller', '333-444-5555', '78 Berliner Str., Berlin, Germany E.U.', '333-44-5555'),
('Elena', 'Rossi', '444-555-6666', '23 Via Roma, Milan, Italy Europe', '444-55-6666'),
('Johan', 'Andersson', '555-666-7777', '56 Drottninggatan, Stockholm, Sweden EU', '555-66-7777');

Paso 3: Agregar etiquetas reguladas a las columnas PII

  1. Agregue el siguiente comando al cuaderno y ejecútelo:
-- Add the governed tag to ssn column
ALTER TABLE abac.customers.profiles
ALTER COLUMN SSN
SET TAGS ('pii' = 'ssn');

-- Add governed tag to address column
ALTER TABLE abac.customers.profiles
ALTER COLUMN Address
SET TAGS ('pii' = 'address');

Paso 4: Crear una UDF para buscar direcciones de la UE

  1. Agregue el siguiente comando al cuaderno y ejecútelo:
-- Determine if an address is not in the EU
CREATE OR REPLACE FUNCTION is_not_eu_address(address STRING)
RETURNS BOOLEAN
RETURN (
    SELECT CASE
        WHEN LOWER(address) LIKE '%eu%'
          OR LOWER(address) LIKE '%e.u.%'
          OR LOWER(address) LIKE '%europe%'
        THEN FALSE
        ELSE TRUE
    END
);

Esta UDF comprueba si una cadena determinada no parece hacer referencia a Europa o a la UE. Si se encuentra alguna de estas subcadenas, devuelve FALSE (lo que significa que es una dirección de la UE). Si no se encuentra ninguna de las subcadenas, devuelve TRUE (lo que significa que no es una dirección de la UE).

Paso 5: Crear una directiva de filtro de fila

Para crear una directiva sobre un objeto, debes tener MANAGE sobre el objeto o ser el propietario del mismo. Para añadir una UDF a una directiva, debes tener EXECUTE sobre la UDF y esta debe estar en Unity Catalog.

  1. Haga clic en el icono Datos.Catálogo.

  2. Haga clic en el abaccatálogo que ha creado anteriormente.

  3. Haga clic en la pestaña Directivas.

  4. Haga clic en Nueva directiva.

  5. En general:

    • En Nombre, escriba hide_eu_customers.
    • En Descripción, escriba una descripción de la directiva.
    • En Aplicado a..., busque y seleccione los sujetos a los que se aplica la directiva. En este ejemplo, puede usar el grupo Todos los usuarios de la cuenta.
    • Deje Excepto para... en blanco.
    • En Ámbito, elija el abaccatálogo y Todos los esquemas.

    Configuración de ejemplo de la política de filtro de fila ABAC para la sección General.

  6. Para propósito, elija Ocultar filas de tabla.

  7. En Condiciones, haga clic en Seleccionar existente. A continuación, haga clic en Icono de función.Seleccione función.

  8. En el menú Seleccionar una función , haga clic en el abac catálogo, el customers esquema y is_not_eu_address la función que creó anteriormente.

  9. Haga clic en Seleccionar.

    Ejemplo de configuración de directiva de filtro para filas de ABAC para la sección Condiciones.

  10. Opcionalmente, puedes probar tu función expandiendo la función de Prueba y proporcionando una entrada. Por ejemplo, escribir 78 Berliner Str., Berlin, Germany E.U. y hacer clic en Ejecutar prueba correctamente devuelve FALSE (Hide row).

    Ejemplo de prueba de función de filtro de filas ABAC.

  11. En Parámetros de función:

    • Seleccione Asignar columna a parámetro si tiene una etiqueta específica.
    • Busque pii. Seleccione pii : address.

    Ejemplo de configuración de política de filtro de filas ABAC para la sección de parámetros de la función.

  12. Haga clic en Crear directiva.

Paso 6: Probar la política

  1. Vuelva al cuaderno y ejecute el siguiente comando:
SELECT DISTINCT * FROM abac.customers.profiles

Solo se devuelven las filas correspondientes a no residentes en la UE.

First_Name Apellido Número de Teléfono Dirección SSN
Gracia Wilson 890-123-4567 852 Elm St, NV 890-12-3456
Alice Johnson 345-678-9012 789 Pine St, TX 345-67-8901
Ivy Taylor 012-345-6789 159 Aspen St, AZ 012-34-5678
Franco Miller 789-012-3456 741 Spruce St, WA 789-01-2345
Jane Smith 234-567-8901 456 Oak St, CA 234-56-7890
Juan Coneja 123-456-7890 123 Main St, NY 123-45-6789
Charlie Davis 567-890-1234 654 Cedar St, IL 567-89-0123
Emily Blanco 678-901-2345 987 Birch St, WA 678-90-1234
Hank Moore 901-234-5678 963 Walnut St, CO 901-23-4567
Bob Marrón 456-789-0123 321 Maple St, FL 456-78-9012

Puede continuar creando una directiva de enmascaramiento de columnas.

Paso 7: Crear una UDF para enmascarar SSN

  1. Agregue el siguiente comando al cuaderno y ejecútelo:
-- Masks any SSN input by returning a fully masked value
CREATE FUNCTION mask_SSN(ssn STRING)
RETURN '***-**-****' ;

Esta UDF devuelve una cadena de número de la Seguridad Social (SSN) totalmente enmascarada (***-**-****).

Paso 8: Crear una política de máscara de columna

Para crear una directiva sobre un objeto, debes tener MANAGE sobre el objeto o ser el propietario del mismo. Para añadir una UDF a una directiva, debes tener EXECUTE sobre la UDF y esta debe estar en Unity Catalog.

  1. Haga clic en el icono Datos.Catálogo.

  2. Haga clic en el abaccatálogo que ha creado anteriormente.

  3. Haga clic en la pestaña Directivas.

  4. Haga clic en Nueva directiva.

  5. En general:

    • En Nombre, escriba mask_ssn.
    • En Descripción, escriba una descripción de la directiva.
    • En Aplicado a..., busque y seleccione los sujetos a los que se aplica la directiva. En este ejemplo, puede usar el grupo Todos los usuarios de la cuenta.
    • Deje Excepto para... en blanco.
    • En Ámbito, elija el abaccatálogo y Todos los esquemas.

    Ejemplo de configuración de la directiva de enmascaramiento de columnas ABAC para la sección General.

  6. Para propósito, elija Enmascarar datos de columna.

  7. En Condiciones:

    • Elija Enmascarar columna si tiene una etiqueta específica. Busque pii y seleccione pii : ssn.
    • Haga clic en Seleccionar existente. A continuación, haga clic en Icono de función.Seleccione función.
    • En el menú Seleccionar una función , haga clic en el abac catálogo, el customers esquema y mask_ssn la función que creó anteriormente.
  8. Haga clic en Seleccionar.

    Ejemplo de configuración de la directiva de enmascaramiento de columnas ABAC para la sección Condiciones.

  9. Opcionalmente, puede probar la función de enmascaramiento expandiendo la función Test y proporcionando una entrada. Por ejemplo, escribir 901-234-5678 y hacer clic en Ejecutar prueba correctamente devuelve ***-**-****.

    Prueba de función de máscara de columna de ABAC de ejemplo.

  10. Haga clic en Crear directiva.

Paso 9: Prueba tu política

  1. Vuelva al cuaderno y ejecute el siguiente comando:
SELECT * FROM abac.customers.profiles

Los números de la Seguridad Social (SSN) ahora se muestran como ***-**-****. Solo se muestran los residentes fuera de la UE porque también está activada la máscara de filtrado de filas.

First_Name Apellido Número de Teléfono Dirección SSN
Jane Smith 234-567-8901 456 Oak St, CA ***-**-****
Alice Johnson 345-678-9012 789 Pine St, TX ***-**-****
Charlie Davis 567-890-1234 654 Cedar St, IL ***-**-****
Gracia Wilson 890-123-4567 852 Elm St, NV ***-**-****
Bob Marrón 456-789-0123 321 Maple St, FL ***-**-****
Hank Moore 901-234-5678 963 Walnut St, CO ***-**-****
Ivy Taylor 012-345-6789 159 Aspen St, AZ ***-**-****
Emily Blanco 678-901-2345 987 Birch St, WA ***-**-****
Franco Miller 789-012-3456 741 Spruce St, WA ***-**-****
Juan Coneja 123-456-7890 123 Main St, NY ***-**-****