Compartir a través de


Tutorial: Configuración de ABAC

Importante

Esta característica está en versión preliminar pública.

En este tutorial se presenta cómo configurar políticas de control de acceso basado en atributos (ABAC) para filtro de fila y máscara de columna en Unity Catalog.

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 seguro 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 los datos del miembro 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 política 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 Discover Attribute-Based Access Control (ABAC) with Unity Catalog (Detección de Attribute-Based Access Control (ABAC) con Unity Catalog.

Requisitos de proceso

  • Debe usar el proceso en Databricks Runtime 16.4 o superior.
  • El proceso sin servidor siempre funciona con ABAC.

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, debe tener el permiso CREATE de etiqueta regulada en el 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 botón Etiquetas gobernadas >.

  3. Haga clic en Crear etiqueta regulada.

  4. Escriba la clave de etiqueta pii.

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

  6. 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.

  7. 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 puede crear la tabla en un esquema donde tenga 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 en un objeto, debe tener MANAGE en el objeto o la propiedad del objeto. Para agregar una UDF a una directiva, debe tener EXECUTE en la UDF y debe estar en el catálogo de Unity.

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

  2. Haga clic en el abac catálogo que creó 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 principales a los que se aplica la política. En este ejemplo, puede usar el grupo Todos los usuarios de la cuenta.
    • Deje Excepto para... en blanco.
    • En Ámbito, elija el abac catá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, puede probar la función de enmascaramiento expandiendo la función Test 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).

    Prueba de función de enmascaramiento de filtros de fila de ABAC de ejemplo.

  11. En Parámetros de función:

    • Elija Asignar columna al 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
Hiedra Taylor 012-345-6789 159 Aspen St, AZ 012-34-5678
Franco Molinero 789-012-3456 741 Spruce St, WA 789-01-2345
Jane Herrero 234-567-8901 456 Oak St, CA 234-56-7890
Juan Cierva 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
Madeja Moore 901-234-5678 963 Nogal St, CO 901-23-4567
Bob Marrón 456-789-0123 321 Maple St, FL 456-78-9012

Puede continuar creando una política de máscara de columna.

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 SSN totalmente enmascarada ('***-**-***'),

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

Para crear una directiva en un objeto, debe tener MANAGE en el objeto o la propiedad del objeto. Para agregar una UDF a una directiva, debe tener EXECUTE en la UDF y debe estar en el catálogo de Unity.

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

  2. Haga clic en el abac catálogo que creó 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 principales a los que se aplica la política. En este ejemplo, puede usar el grupo Todos los usuarios de la cuenta.
    • Deje Excepto para... en blanco.
    • En Ámbito, elija el abac catálogo y Todos los esquemas.

    Configuraciones de la política de máscara de columnas de ABAC de ejemplo 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.

    Configuraciones de políticas de máscara de columna ABAC de ejemplo para la sección de 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 SSNs ahora se devuelven como ***-***-***. Solo se devuelven residentes que no son de la UE porque la máscara de filtro de fila también está habilitada.

First_Name Apellido Número de Teléfono Dirección SSN
Jane Herrero 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 ***-**-****
Madeja Moore 901-234-5678 963 Nogal St, CO ***-**-****
Hiedra Taylor 012-345-6789 159 Aspen St, AZ ***-**-****
Emily Blanco 678-901-2345 987 Birch St, WA ***-**-****
Franco Molinero 789-012-3456 741 Spruce St, WA ***-**-****
Juan Cierva 123-456-7890 123 Main St, NY ***-**-****