Creación y administración de directivas de ABAC

En esta página se describe cómo crear, editar, ver y eliminar directivas de ABAC en el catálogo de Unity. Para obtener información general sobre los conceptos de directiva, consulte Conceptos básicos de ABAC.

Requisitos

Todas las operaciones de directiva (crear, editar, eliminar, mostrar, describir) requieren MANAGE en la propiedad protegible o del objeto. La creación de una directiva también requiere:

  • Databricks Runtime 16.4 o superior, o computación sin servidor. Consulte Requisitos de computación.
  • Para la lógica de filtrado o enmascaramiento, una función definida por el usuario (UDF) en el catálogo de Unity que tiene EXECUTE activada, o una función SQL que defines en línea cuando se crea la directiva.
  • Etiquetas reguladas aplicadas a objetos de destino. Consulte Etiquetas gobernadas.

Creación de una directiva

Puede crear una directiva mediante la interfaz de usuario del Explorador de catálogos, la CREATE POLICY instrucción SQL o las API de REST, los SDK y Terraform de Azure Databricks.

Para crear una directiva, debe tener MANAGE sobre el elemento protegible donde se adjunta (catálogo, esquema o tabla) o ser propietario del elemento protegible, y EXECUTE sobre la UDF que implementa la lógica de filtrado o enmascaramiento.

Explorador de catálogos

  1. En el área de trabajo de Azure Databricks, haga clic en Data icon.Catalog.

  2. Seleccione el objeto que determina el ámbito de la directiva, como un catálogo, un esquema o una tabla.

  3. Haga clic en la pestaña Directivas.

  4. Haga clic en Nueva directiva.

  5. Complete la sección Identificación de directiva. En la tabla siguiente se resume cada campo:

    Campo Description Ejemplo
    Nombre Nombre de la directiva. Debe ser único entre todas las directivas definidas en el mismo elemento securizable. hide_eu_customers, mask_ssn
    Descripción Opcional. Descripción de la directiva. Aparece en los registros de auditoría y ayuda a los administradores a comprender la intención de la directiva. Restrict EU customer rows from US analysts, Mask SSN for all account users
  6. Complete la sección Principios y ámbito. En la tabla siguiente se resume cada campo:

    Campo Description Ejemplo
    Aplicado a... Los usuarios, grupos o entidades de servicio sujetos a la directiva. Cuando estos principios consultan tablas dentro del ámbito, se aplica el filtro de fila o la máscara de columna. Para aplicar la política a todos los principales de la cuenta, seleccione All account users. us_analysts, All account users
    Excepto para Los directores están exentos de la política. Los principales exentos no están sujetos a filtrado ni enmascaramiento y ven los datos completos sin modificaciones. admins, compliance_team
    Ámbito Objeto securizable donde se adjunta la política. La política se evalúa en todas las tablas del ámbito seleccionado. Seleccione un catálogo, un esquema o una tabla. Azure Databricks recomienda adjuntar directivas en el nivel más alto aplicable. Seleccione catálogo prody, después, esquema customers.
    Condición de tabla Determina a qué tablas del ámbito se aplica la directiva. Sin condición: aplica la directiva a todas las tablas del ámbito. Tablas que coinciden con cualquiera de estas etiquetas: aplica la directiva a la lista especificada de claves de etiqueta o pares clave-valor de etiqueta. Las tablas que tienen cualquiera de estas coincidencias con la directiva. Tablas que coinciden con una expresión personalizada: puede construir una expresión booleana usando has_tag y has_tag_value, combinada con AND, OR, y NOT para una lógica de coincidencia más compleja. Aplica la directiva a las tablas en las que la expresión se evalúa como TRUE y coincide con la directiva. Si una tabla en el ámbito no coincide con la condición, la directiva no se aplica a esa tabla. Seleccione Tablas que coincidan con cualquiera de estas etiquetas y, a continuación, elija clave sensitivity de etiqueta con valor high para restringir la directiva solo a tablas confidenciales.

    Configuración de directiva de ABAC de ejemplo para la sección Principales y ámbito.

  7. En Tipo de directiva, elija el tipo de control de acceso que se va a aplicar:

    Opción Description Se utiliza cuando
    Filtro de fila Crea una política de filtro de fila. La UDF evalúa cada fila y devuelve un valor booleano. Las filas en las que devuelve la UDF FALSE se excluyen de los resultados de la consulta. El acceso depende de los valores de cada fila, como el filtrado por los valores de una columna que contiene regiones geográficas.
    Máscara de columna Crea una directiva de máscara de columna. La UDF toma el valor de columna como entrada y devuelve la versión original o enmascarada. El tipo de retorno debe ser compatible con el tipo de datos de la columna de destino. Debe redactar campos confidenciales, como los números de Seguridad Social, números de teléfono o direcciones de correo electrónico, mientras permite que la entidad principal consulte la tabla.
  8. Las siguientes secciones dependen de su selección del tipo de directiva. Expanda la sección que coincida con la selección:

    Filtro de fila

    En la sección Función de filtro de fila , elija cómo especificar la función de filtro de fila:

    • Seleccionar existente: Seleccione una UDF ya definida en el catálogo de Unity. La UDF evalúa cada fila y devuelve un valor booleano. Las filas en las que la función devuelve FALSE se excluyen de los resultados de la consulta. Debe tener EXECUTE en la UDF.
    • Crear: defina una función SQL que se usará como lógica de filtro de fila.

    Configuración de directiva de filtro de fila de ABAC de ejemplo para la sección Función de filtro de fila.

    En la sección Entradas de función, proporcione un valor para cada parámetro de función. Cada entrada puede ser una columna coincidente con etiquetas, una columna coincidente con una expresión personalizada o un valor constante.

    Configuración de ABAC de ejemplo para la sección de las Entradas de Funciones.

    Máscara de columna

    En la sección Condiciones de columna, elija cómo identificar las columnas que se van a enmascarar:

    • Columnas que coinciden con cualquiera de estas etiquetas: especifique una lista de claves de etiqueta o pares clave-valor de etiqueta. Las columnas que tienen cualquiera de estas se enmascaran mediante la directiva.
    • Columnas que coinciden con una expresión personalizada: cree una expresión booleana mediante has_tag y has_tag_value, combinada con AND, ORy para una NOT lógica de coincidencia más compleja. Columnas donde la expresión se evalúa a TRUE se enmascaran.

    Configuración de ejemplo de la política de máscara de columna de ABAC para la sección de condiciones de columna.

    A continuación, elija la función Masking que se va a aplicar a las columnas coincidentes:

    • Seleccione existente: seleccione una UDF ya definida en el catálogo de Unity. La UDF devuelve el valor original o el valor enmascarado. El tipo de valor devuelto se debe convertir al tipo de datos de la columna de destino. Debes tener EXECUTE en el UDF.
    • Crear: defina una función SQL que se usará como lógica de enmascaramiento de columnas.

    Configuración de directiva de máscara de columna ABAC como ejemplo para la sección Función de enmascaramiento.

    En la sección Entradas de función, proporcione un valor para cada parámetro de función adicional. Cada entrada puede ser una columna coincidente con etiquetas, una columna coincidente con una expresión personalizada o un valor constante.

    En este ejemplo se usa un valor constante de 4 para mostrar los últimos 4 caracteres del SSN.

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

  9. Haga clic en Crear directiva.

SQL

Para obtener documentación completa, consulte CREATE POLICY.

CREATE [OR REPLACE] POLICY policy_name
ON { CATALOG catalog_name | SCHEMA schema_name | TABLE table_name }
[COMMENT description]
{ row_filter_body | column_mask_body }

Cuerpo del filtro de fila:

ROW FILTER function_name
TO principal [, ...]
[EXCEPT principal [, ...]]
FOR TABLES
[WHEN condition]
[MATCH COLUMNS condition [[AS] alias] [, ...]]
[USING COLUMNS (function_arg [, ...])]

Cuerpo de máscara de columna:

COLUMN MASK function_name
TO principal [, ...]
[EXCEPT principal [, ...]]
FOR TABLES
[WHEN condition]
[MATCH COLUMNS condition [[AS] alias] [, ...]]
ON COLUMN alias
[USING COLUMNS (function_arg [, ...])]

Parameters:

  • policy_name: un nombre para la política. Debe ser único entre todas las directivas definidas en el mismo elemento securizable.
  • ON { CATALOG | SCHEMA | TABLE }: el ámbito al que se adjunta la directiva. La directiva se evalúa en todas las tablas que son descendientes de este elemento protegible.
  • function_name: nombre completo de la UDF que implementa la lógica de filtrado o enmascaramiento.
  • TO principal [, ...]: los usuarios, grupos o entidades de servicio a los que se aplica la directiva.
  • EXCEPT principal [, ...]: Los principales están exentos de la política. Los principales exentos no están sujetos a filtrado o enmascaramiento.
  • FOR TABLES: especifica que la directiva tiene como destino las tablas. Actualmente, las tablas son el único tipo protegible admitido y que incluye tablas de streaming y vistas materializadas.
  • WHEN condition: expresión booleana que determina a qué tablas se aplica la directiva, en función de sus etiquetas. Usa funciones has_tag('tag_name') integradas y has_tag_value('tag_name', 'tag_value'). Si se omite, el valor predeterminado es TRUE (se aplica a todas las tablas del ámbito).
  • MATCH COLUMNS condition [[AS] alias] [, ...]: condiciones de columna que identifican qué columnas tiene como destino la directiva. Cada condición es una expresión booleana compilada a partir de has_tag('tag_name') y has_tag_value('tag_name', 'tag_value'), opcionalmente combinada con AND, ORy NOT. A cada condición se le puede asignar un alias para su uso en ON COLUMN y USING COLUMNS. Una directiva puede incluir hasta 3 MATCH COLUMNS expresiones y todas deben coincidir para que se aplique la directiva.
  • ON COLUMN alias: para las directivas de máscara de columna, especifica la columna coincidente que se va a enmascarar, a la que hace referencia su alias desde MATCH COLUMNS.
  • USING COLUMNS (function_arg [, ...]): argumentos pasados a la UDF. Cada argumento puede ser un alias de MATCH COLUMNS o un literal constante.

Ejemplo: política de máscara de columna. Enmascara todas las columnas etiquetadas con pii:ssn en el prod.customers esquema, mostrando solo los últimos 4 caracteres. La directiva se aplica a us_analysts excepto admins.

CREATE FUNCTION ssn_to_last_nr (ssn STRING, nr INT) RETURNS STRING
  RETURN right(ssn, nr);

CREATE POLICY mask_ssn
ON SCHEMA prod.customers
COLUMN MASK ssn_to_last_nr
TO us_analysts EXCEPT admins
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'ssn') AS ssn
ON COLUMN ssn
USING COLUMNS (4);

Ejemplo: política de filtro de filas. Excluya las filas con clientes europeos de las tablas etiquetadas con sensitivity:high en el prod.customers esquema. La directiva se aplica a us_analysts y filtra filas basándose en una columna geo_region.

CREATE FUNCTION non_eu_region (geo_region STRING) RETURNS BOOLEAN
  RETURN geo_region <> 'eu';

CREATE POLICY hide_eu_customers
ON SCHEMA prod.customers
COMMENT 'Exclude rows with European customers from sensitive tables'
ROW FILTER non_eu_region
TO us_analysts
FOR TABLES
WHEN has_tag_value('sensitivity', 'high')
MATCH COLUMNS has_tag('geo_region') AS region
USING COLUMNS (region);

SDK de Python

Para obtener documentación completa, consulte Databricks SDK para Python documentación.

En este ejemplo se crea una directiva de filtro de fila que excluye filas con clientes europeos para analistas basados en ESTADOS Unidos:

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import (
    FunctionArgument,
    MatchColumn,
    PolicyInfo,
    PolicyType,
    RowFilterOptions,
    SecurableType,
)

w = WorkspaceClient()

w.policies.create_policy(PolicyInfo(
    name="hide_eu_customers",
    comment="Exclude rows with European customers from sensitive tables",
    on_securable_type=SecurableType.SCHEMA,
    on_securable_fullname="prod.customers",
    for_securable_type=SecurableType.TABLE,
    policy_type=PolicyType.POLICY_TYPE_ROW_FILTER,
    to_principals=["us_analysts"],
    match_columns=[
        MatchColumn(condition="has_tag('geo_region')", alias="region"),
    ],
    row_filter=RowFilterOptions(
        function_name="prod.customers.non_eu_region",
        using=[FunctionArgument(alias="region")],
    ),
))

En este ejemplo se crea una directiva de máscara de columna que enmascara los números de seguridad social para los analistas de EE. UU., excepto aquellos en el grupo admins.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import (
    ColumnMaskOptions,
    FunctionArgument,
    MatchColumn,
    PolicyInfo,
    PolicyType,
    SecurableType,
)

w = WorkspaceClient()

w.policies.create_policy(PolicyInfo(
    name="mask_ssn",
    comment="Mask social security numbers",
    on_securable_type=SecurableType.SCHEMA,
    on_securable_fullname="prod.customers",
    for_securable_type=SecurableType.TABLE,
    policy_type=PolicyType.POLICY_TYPE_COLUMN_MASK,
    to_principals=["us_analysts"],
    except_principals=["admins"],
    match_columns=[
        MatchColumn(condition="has_tag_value('pii', 'ssn')", alias="ssn"),
    ],
    column_mask=ColumnMaskOptions(
        function_name="prod.customers.ssn_to_last_nr",
        on_column="ssn",
        using=[FunctionArgument(constant="4")],
    ),
))

Edición de una directiva

Explorador de catálogos

  1. En el área de trabajo de Azure Databricks, haga clic en Data icon.Catalog.
  2. Seleccione el objeto al que está asociada la directiva.
  3. Haga clic en la pestaña Directivas.
  4. Seleccione la directiva que desee editar.
  5. Actualice los campos que quiera cambiar. Puede modificar la descripción, los principios, el tipo de directiva, las condiciones y las asignaciones de entrada de función. No se puede editar el nombre de la directiva y el objeto protegible donde se aplica la directiva. Para obtener descripciones de campos, consulte Creación de una directiva.
  6. Haz clic en Actualizar directiva.

SQL

CREATE OR REPLACE POLICY reemplaza toda la definición de directiva. Especifique todas las cláusulas, no solo los campos que desea cambiar. La política de reemplazo debe tener el mismo nombre y estar en el mismo objeto securizable.

CREATE OR REPLACE POLICY mask_ssn
ON SCHEMA prod.customers
COLUMN MASK ssn_to_last_nr
TO us_analysts EXCEPT admins, compliance_team
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'ssn') AS ssn
ON COLUMN ssn
USING COLUMNS (4);

SDK de Python

A diferencia de CREATE OR REPLACE POLICY en SQL, update_policy admite actualizaciones parciales. Use el update_mask parámetro para especificar los campos que se van a cambiar. Solo se actualizan esos campos. Si update_mask es "*" o está vacío, se aplican todos los campos de policy_info.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import PolicyInfo

w = WorkspaceClient()

w.policies.update_policy(
    on_securable_type="SCHEMA",
    on_securable_fullname="prod.customers",
    name="mask_ssn",
    policy_info=PolicyInfo(
        except_principals=["admins", "compliance_team"],
    ),
    update_mask="except_principals",
)

Eliminar una directiva

Explorador de catálogos

  1. En el área de trabajo de Azure Databricks, haga clic en Data icon.Catalog.
  2. Seleccione el objeto al que está asociada la directiva.
  3. Haga clic en la pestaña Directivas.
  4. Seleccione la política.
  5. Haga clic en Eliminar directiva.

SQL

Use DROP POLICY para eliminar una directiva.

DROP POLICY policy_name ON { CATALOG | SCHEMA | TABLE } securable_name

Ejemplos:

DROP POLICY mask_ssn ON SCHEMA prod.customers;
DROP POLICY hide_eu_customers ON SCHEMA prod.customers;

SDK de Python

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

w.policies.delete_policy(
    on_securable_type="SCHEMA",
    on_securable_fullname="prod.customers",
    name="mask_ssn",
)

Mostrar directivas

Use SHOW POLICIES para enumerar las políticas definidas en un objeto securizable. Use SHOW EFFECTIVE POLICIES para incluir también directivas de ámbitos primarios, como directivas de nivel de catálogo que afectan a una tabla.

SHOW [EFFECTIVE] POLICIES ON { CATALOG | SCHEMA | TABLE } securable_name

El resultado incluye el nombre de directiva, el tipo de directiva y el catálogo, el esquema o la tabla donde se define cada directiva.

La visualización de directivas eficaces para una tabla no requiere permisos en el catálogo o esquema primarios. Esto permite a un administrador de la tabla ver las reglas que se aplican sin tener acceso de lectura a las políticas de tablas hermanas.

Ejemplo:

SHOW EFFECTIVE POLICIES ON SCHEMA prod.customers;
policy_name tipo_de_política catalog schema comment
ocultar_clientes_ue ROW FILTER prod clientes
mask_ssn COLUMN MÁSCARA prod clientes

Descripción de una directiva

Use DESCRIBE POLICY para ver los detalles de una directiva específica. Requiere MANAGE en el objeto asegurable o en la propiedad del objeto de destino.

{ DESC | DESCRIBE } POLICY policy_name ON { CATALOG | SCHEMA | TABLE } securable_name

El resultado muestra las propiedades de la directiva como pares clave-valor, incluyendo nombre, tipo de elemento protegible, nombre de elemento protegible, principales, condiciones, nombre de función y marcas de tiempo.

Ejemplo:

DESCRIBE POLICY hide_eu_customers ON SCHEMA prod.customers;
info_name info_value
Nombre ocultar_usuarios_eu
En Tipo Protegible SCHEMA
En seguridad producto.clientes
A responsables us_analysts
Para tipo asegurable TABLE
Emparejar columnas has_tag("geo_region") AS región
Tipo de directiva FILTRO DE FILAS
Nombre de la función prod.customers.non_eu_region
Uso de columnas region

Registro de auditoría

Azure Databricks registra las operaciones relacionadas con etiquetas gobernadas y políticas ABAC en la tabla de sistema del registro de auditoría. A continuación se muestran consultas de ejemplo. Para más información, consulte Registros de auditoría.

-- All tag assignment and deletion events from the audit log
SELECT
  event_time,
  action_name,
  user_identity.email AS actor,
  request_params.workspace_id,
  request_params.metastore_id,
  request_params.tag_assignment,
  response.status_code,
  source_ip_address
FROM system.access.audit
WHERE service_name = 'unityCatalog'
  AND action_name IN (
    'createEntityTagAssignment',
    'deleteEntityTagAssignment'
  )
ORDER BY event_time DESC;

-- All ABAC policy CRUD operations
SELECT
  event_time,
  action_name,
  user_identity.email AS actor,
  request_params.name AS policy_name,
  request_params.on_securable_type,
  request_params.on_securable_fullname,
  request_params.policy_info,
  response.status_code
FROM system.access.audit
WHERE service_name = 'unityCatalog'
  AND action_name IN ('createPolicy', 'deletePolicy', 'getPolicy', 'listPolicies')
ORDER BY event_time DESC;

Más información