Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial se muestra cómo configurar políticas ABAC de filtro de filas y enmascaramiento de columnas en Unity Catalog mediante SQL. Para obtener la versión basada en interfaz de usuario del Explorador de catálogos, consulte Tutorial: Configuración de ABAC.
En este ejemplo, un equipo de análisis no puede acceder a los registros de clientes de la UE y los SSN siempre se enmascaran. Los clientes que han dado su consentimiento al uso compartido de datos muestran su correo electrónico completo. Otros ven solo una versión enmascarada.
Este tutorial incluye los pasos siguientes:
- Creación de etiquetas reguladas
- Creación de un catálogo, esquema y tabla de Unity Catalog
- Aplicación de etiquetas reguladas a columnas
- Creación de una UDF para detectar direcciones de la UE
- Creación de una directiva de filtro de fila
- Prueba del filtro de fila
- Creación de una UDF para enmascarar SSN
- Crear una directiva de máscara de columna
- Prueba de la máscara de columna
Después de completar estos pasos, puede ampliar opcionalmente el tutorial con enmascaramiento de correo electrónico condicional (pasos 10–12).
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).
- Permiso
MANAGEen el catálogo o esquema de destino. -
EXECUTEen las UDF.
El proceso que ejecuta entornos de ejecución anteriores no puede acceder a las tablas protegidas por ABAC.
Paso 1: Crear etiquetas reguladas
Las etiquetas gestionadas son pares clave-valor definidos a nivel de cuenta. Las directivas de ABAC las usan para detectar qué columnas filtrar o enmascarar. En este tutorial, creará dos etiquetas reguladas:
- Etiqueta
piicon tres valores permitidos:ssn,addressyemail - Una
consentetiqueta de solo clave (sin valores permitidos) para identificar columnas de consentimiento
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.
- En el área de trabajo de Azure Databricks, haga clic en
Catalog.
- Haga clic en el
botón Administrar.
- En el menú desplegable, haga clic en Etiquetas gobernadas.
- Haga clic en Crear etiqueta regulada.
- En la clave de etiqueta, escriba
pii. - Escriba una descripción para la etiqueta regulada.
- Para los valores permitidos, escriba:
ssn,addressyemail. Solo estos valores se pueden asignar a esta clave de etiqueta. - Haga clic en Crear.
- Repita los pasos del 4 al 8 para crear una segunda etiqueta regulada con la clave
consent. Dejar los valores permitidos en blanco (etiqueta de clave únicamente).
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
Cree un catálogo, un esquema y una tabla con perfiles de cliente. La has_consent columna se usa más adelante para el enmascaramiento de correo electrónico condicional. Los clientes que han dado su consentimiento (TRUE) muestran su correo electrónico completo.
Ejecuta los siguientes comandos en un cuaderno vinculado a un entorno de cálculo en Databricks Runtime 16.4 o superior:
-- Create catalog (if not already exists)
CREATE CATALOG IF NOT EXISTS abac_tutorial;
USE CATALOG abac_tutorial;
-- Create schema
CREATE SCHEMA IF NOT EXISTS customers;
USE SCHEMA customers;
CREATE OR REPLACE TABLE profiles (
first_name STRING,
last_name STRING,
email STRING,
phone_number STRING,
home_address STRING,
ssn_number STRING,
has_consent BOOLEAN
);
INSERT INTO profiles (first_name, last_name, email, phone_number, home_address, ssn_number, has_consent)
VALUES
('John', 'Doe', 'john.doe@example.com', '123-456-7890', '123 Main St, NY', '123-45-6789', TRUE),
('Jane', 'Smith', 'jane.smith@example.com', '234-567-8901', '456 Oak St, CA', '234-56-7890', FALSE),
('Alice', 'Johnson', 'alice.j@example.com', '345-678-9012', '789 Pine St, TX', '345-67-8901', TRUE),
('Bob', 'Brown', 'bob.brown@example.com', '456-789-0123', '321 Maple St, FL', '456-78-9012', FALSE),
('Charlie', 'Davis', 'charlie.d@example.com', '567-890-1234', '654 Cedar St, IL', '567-89-0123', TRUE),
('Emily', 'White', 'emily.w@example.com', '678-901-2345', '987 Birch St, WA', '678-90-1234', FALSE),
('Frank', 'Miller', 'frank.m@example.com', '789-012-3456', '741 Spruce St, WA', '789-01-2345', TRUE),
('Grace', 'Wilson', 'grace.w@example.com', '890-123-4567', '852 Elm St, NV', '890-12-3456', TRUE),
('Hank', 'Moore', 'hank.moore@example.com', '901-234-5678', '963 Walnut St, CO', '901-23-4567', FALSE),
('Ivy', 'Taylor', 'ivy.taylor@example.com', '012-345-6789', '159 Aspen St, AZ', '012-34-5678', TRUE),
('Liam', 'Connor', 'liam.c@example.com', '111-222-3333', '12 Abbey Street, Dublin, Ireland EU', '111-22-3333', TRUE),
('Sophie', 'Dubois', 'sophie.d@example.com', '222-333-4444', '45 Rue de Rivoli, Paris, France Europe', '222-33-4444', FALSE),
('Hans', 'Müller', 'hans.m@example.com', '333-444-5555', '78 Berliner Str., Berlin, Germany E.U.', '333-44-5555', TRUE),
('Elena', 'Rossi', 'elena.r@example.com', '444-555-6666', '23 Via Roma, Milan, Italy Europe', '444-55-6666', FALSE),
('Johan', 'Andersson', 'johan.a@example.com', '555-666-7777', '56 Drottninggatan, Stockholm, Sweden EU', '555-66-7777', TRUE);
Paso 3: Agregar etiquetas reguladas a columnas
Etiquete las columnas ssn_number, home_address y email con la etiqueta regulada pii. Las directivas de ABAC hacen coincidir las columnas por etiqueta, no por nombre.
La has_consent columna se etiqueta con la consent etiqueta regulada. Esto es necesario para la directiva de enmascaramiento compatible con el consentimiento en el paso 11, que pasa has_consent a la UDF a través de USING COLUMNS.
ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN ssn_number
SET TAGS ('pii' = 'ssn');
ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN home_address
SET TAGS ('pii' = 'address');
ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN email
SET TAGS ('pii' = 'email');
ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN has_consent
SET TAGS ('consent' = '');
Paso 4: Crear una UDF para detectar direcciones de la UE
A esta UDF se le pasa el valor de cada columna etiquetada pii = address y devuelve:
-
FALSEsi la dirección contieneEU,E.U.oEurope, la fila está oculta. -
TRUEde lo contrario, se muestra la fila.
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
);
Note
Se trata de una comprobación simplificada con fines de demostración. En producción, use un método más sólido, como una columna de código de país o una tabla de búsqueda para determinar la región.
Paso 5: Crear una directiva de filtro de fila
Para crear una directiva, debes tener MANAGE sobre el objeto o la propiedad del mismo. Para añadir una UDF a una directiva, debes tener EXECUTE sobre la UDF.
CREATE POLICY hide_eu_customers
ON SCHEMA abac_tutorial.customers
ROW FILTER is_not_eu_address
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'address') AS addr_col
USING COLUMNS (addr_col);
También puede crear directivas a través de la interfaz de usuario del Explorador de catálogos. Consulte Creación y administración de directivas de filtro de fila y máscara de columna para obtener más información.
Paso 6: Probar el filtro de fila
Ejecute la consulta siguiente para comprobar que la directiva de filtro de fila funciona.
SELECT * FROM abac_tutorial.customers.profiles;
Solo se devuelven las 10 filas de no residentes en la UE. Los cinco clientes de la UE (Liam, Sophie, Hans, Elena y Johan) están ocultos.
Paso 7: Crear una UDF para enmascarar SSN
Esta UDF devuelve un marcador de posición totalmente ocultado para cualquier valor de SSN que se le pase.
CREATE OR REPLACE FUNCTION redact_ssn(ssn STRING)
RETURNS STRING
RETURN '***-**-****';
Paso 8: Crear una política de máscara de columna
Cree una directiva que tenga como destino todas las columnas etiquetadas pii = ssn y aplique la redact_ssn función a cada una.
CREATE POLICY redact_ssn_policy
ON SCHEMA abac_tutorial.customers
COLUMN MASK redact_ssn
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'ssn') AS ssn_col
ON COLUMN ssn_col;
Paso 9: Probar la máscara de columna
Ejecute la consulta siguiente para comprobar que el filtro de fila y la máscara de columna están activos.
SELECT * FROM abac_tutorial.customers.profiles;
Los SSN ahora se devuelven como ***-**-****. Solo se devuelven residentes que no son de la UE porque el filtro de fila también está activo.
Ampliar: enmascaramiento de correo electrónico condicional
Los pasos siguientes amplían el tutorial con enmascaramiento de correo electrónico compatible con consentimiento. Los clientes que han optado por (has_consent = TRUE) muestran su correo electrónico completo; otros solo ven el primer carácter y dominio.
Paso 10: Crear una UDF de enmascaramiento de correo electrónico que tenga en cuenta el consentimiento
Esta UDF toma dos argumentos:
-
email: el valor de correo electrónico real de la columna coincidente. -
consent: el valor de la columnahas_consenten la misma fila
CREATE OR REPLACE FUNCTION mask_email_by_consent(email STRING, consent BOOLEAN)
RETURNS STRING
RETURN CASE
WHEN consent = TRUE THEN email
ELSE CONCAT(LEFT(email, 1), '***@', SUBSTRING_INDEX(email, '@', -1))
END;
Paso 11: Crear la directiva de enmascaramiento de correo electrónico condicional
Esta directiva tiene como destino las columnas etiquetadas pii = email y pasa la has_consent columna a la UDF.
Note
La columna has_consent se etiquetó con la etiqueta regulada consent en el Paso 3. Esto es necesario porque USING COLUMNS solo puede hacer referencia a columnas que coinciden a través de MATCH COLUMNS. Aunque has_consent no se enmascara, debe etiquetarse para que la directiva pueda pasar su valor a la UDF.
CREATE POLICY mask_email_by_consent_policy
ON SCHEMA abac_tutorial.customers
COLUMN MASK mask_email_by_consent
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'email') AS email_col,
has_tag('consent') AS consent_col
ON COLUMN email_col
USING COLUMNS (consent_col);
Paso 12: Probar el enmascaramiento condicional de correo electrónico
Ejecute la siguiente consulta para comprobar que las tres directivas funcionan juntas.
SELECT * FROM abac_tutorial.customers.profiles;
Los clientes con has_consent = TRUE tienen su correo electrónico completo mostrado. Los clientes con has_consent = FALSE ven una versión enmascarada. Los SSN permanecen totalmente enmascarados y solo se devuelven los clientes que no son de la UE.
| primer nombre | tiene_consentimiento | correo electrónico | ssn_number |
|---|---|---|---|
| John | VERDADERO | john.doe@example.com | ***-**-**** |
| Jane | FALSE | j***@example.com | ***-**-**** |
| Alice | VERDADERO | alice.j@example.com | ***-**-**** |
| Bob | FALSE | b***@example.com | ***-**-**** |
| Charlie | VERDADERO | charlie.d@example.com | ***-**-**** |
| Emily | FALSE | e***@example.com | ***-**-**** |
| Franco | VERDADERO | frank.m@example.com | ***-**-**** |
| Gracia | VERDADERO | grace.w@example.com | ***-**-**** |
| Hank | FALSE | h***@example.com | ***-**-**** |
| Ivy | VERDADERO | ivy.taylor@example.com | ***-**-**** |
Resumen
En este tutorial se muestran tres patrones de ABAC:
- Filtrado de filas: ocultar filas en función de los valores de columna que coinciden con los tags regulados
- Enmascaramiento de columnas: enmascarar columnas coincidentes con etiquetas reguladas
-
Enmascaramiento condicional: enmascara una columna basada en el valor de otra columna en la misma fila, mediante el etiquetado de la columna de contexto y su paso a la UDF a través de
USING COLUMNS
Limpieza
Para quitar todos los objetos creados en este tutorial, ejecute lo siguiente. Si omitió los pasos de enmascaramiento de correo electrónico condicional, las declaraciones DROP POLICY mask_email_by_consent_policy y DROP FUNCTION mask_email_by_consent fallan, lo cual es esperado.
DROP POLICY hide_eu_customers ON SCHEMA abac_tutorial.customers;
DROP POLICY redact_ssn_policy ON SCHEMA abac_tutorial.customers;
DROP POLICY mask_email_by_consent_policy ON SCHEMA abac_tutorial.customers;
DROP FUNCTION IF EXISTS abac_tutorial.customers.is_not_eu_address;
DROP FUNCTION IF EXISTS abac_tutorial.customers.redact_ssn;
DROP FUNCTION IF EXISTS abac_tutorial.customers.mask_email_by_consent;
DROP TABLE IF EXISTS abac_tutorial.customers.profiles;
DROP SCHEMA IF EXISTS abac_tutorial.customers CASCADE;
Para quitar las etiquetas controladas por pii y consent, use la interfaz de usuario del Explorador de Catálogo.