Criar e gerenciar políticas ABAC

Esta página descreve como criar, editar, visualizar e eliminar políticas ABAC no Catálogo Unity. Para uma visão geral dos conceitos de políticas, veja Conceitos Centrais para ABAC.

Requirements

Todas as operações de política (criar, editar, eliminar, mostrar, descrever) requerem MANAGE sobre o objeto seguro ou sua posse. Criar uma apólice também exige:

  • Databricks Runtime 16.4 ou superior, ou computação sem servidor. Ver Requisitos de computação.
  • Para a lógica de filtragem ou máscara, uma função definida pelo utilizador (UDF) no Unity Catalog que tens EXECUTE ativada, ou uma função SQL que defines inline ao criar a política.
  • Etiquetas governadas aplicadas a objetos-alvo. Consulte Etiquetas geridas.

Criar uma política

Pode criar uma política usando a interface do Catalog Explorer, a instrução SQL CREATE POLICY, ou as APIs Azure Databricks REST, SDKs e Terraform.

Para criar uma política, deve ter MANAGE no securable onde a política está anexada (catálogo, esquema ou tabela) ou possuir o securable, e EXECUTE no UDF que implementa a lógica de filtragem ou mascaramento.

Explorador de Catálogos

  1. No seu espaço de trabalho Azure Databricks, clique em Data icon.Catalog.

  2. Selecione o objeto que determina o escopo da política, como um catálogo, esquema ou tabela.

  3. Clique na guia Políticas .

  4. Clique em Nova política.

  5. Preencha a secção de identificação da política . A tabela seguinte resume cada campo:

    Campo Description Exemplo
    Nome Um nome para a apólice. Deve ser único entre todas as apólices definidas no mesmo seguro. hide_eu_customers, mask_ssn
    Descrição Opcional. Uma descrição da apólice. Aparece nos registos de auditoria e ajuda os administradores a compreender a intenção da política. Restrict EU customer rows from US analysts, Mask SSN for all account users
  6. Complete a secção de Princípios e Âmbito . A tabela seguinte resume cada campo:

    Campo Description Exemplo
    Aplicado a... Os utilizadores, grupos ou principais de serviço sujeitos à política. Quando estes principais consultam tabelas no seu âmbito, aplica-se o filtro de linha ou máscara de coluna. Para aplicar a política a todos os principais da conta, selecione All account users. us_analysts, All account users
    Exceto por Os diretores estão isentos da apólice. As entidades isentas não estão sujeitas a filtragem ou mascaramento e vêem os dados completos e não modificados. admins, compliance_team
    Scope O seguro onde a apólice está anexada. A política avalia todas as tabelas no âmbito selecionado. Selecione um catálogo, esquema ou tabela. O Azure Databricks recomenda anexar políticas ao nível mais alto aplicável. Selecione catálogo prod, depois selecione esquema customers.
    Condição da tabela Determina a que tabelas dentro do âmbito a política se aplica. Sem condição: Aplica a política a todas as tabelas do âmbito. Tabelas que correspondam a qualquer uma destas etiquetas: Aplica a política à lista especificada de chaves de etiquetas ou pares chave-valor de etiqueta. As tabelas que têm qualquer uma destas correspondem à política. Tabelas que correspondem a uma expressão personalizada: Pode construir uma expressão booleana usando has_tag e has_tag_value, combinadas com AND, OR, e NOT para uma lógica de correspondência mais complexa. Aplica a política a tabelas onde a expressão é avaliada como TRUE e corresponde à política. Se uma tabela no âmbito não corresponder à condição, a política não se aplica a essa tabela. Selecione Tabelas que correspondam a qualquer uma destas etiquetas, depois escolha a chave sensitivity de etiquetas com valor high para restringir a política apenas a tabelas sensíveis.

    Exemplos de definições de políticas ABAC para a secção de Princípios e âmbito.

  7. Para o tipo de Política, escolha o tipo de controlo de acesso a aplicar:

    Option Description Utilizar quando
    Filtro de linha Cria uma política de filtro de linhas. A UDF avalia cada linha e devolve um booleano. As linhas onde o UDF devolve FALSE são excluídas dos resultados das consultas. O acesso depende dos valores em cada linha, como filtrar pelos valores numa coluna que contém regiões geográficas.
    Máscara de coluna Cria uma política de máscara de coluna. O UDF recebe o valor da coluna como entrada e devolve o original ou uma versão mascarada. O tipo de retorno deve ser convertível para o tipo de dados da coluna de destino. É necessário anonimizar campos sensíveis, como números de segurança social, números de telefone ou endereços de email, permitindo que o principal consulte a tabela.
  8. As secções seguintes dependem do tipo de apólice que escolher. Expanda a secção que corresponda à sua escolha:

    Filtro de linha

    Na secção da função de filtro de linha , escolha como especificar a função de filtro de linha:

    • Selecione o existente: Selecione um UDF já definido no Catálogo Unity. A UDF avalia cada linha e devolve um booleano. As linhas onde a função devolve FALSE são excluídas dos resultados da consulta. Deve ter EXECUTE na UDF.
    • Criar: Defina uma função SQL para usar como lógica de filtro de linha.

    Exemplos de configurações de política de filtro de linha ABAC para a secção de função de filtro de linha.

    Na secção de entradas de função , forneça um valor para cada parâmetro da função. Cada entrada pode ser uma coluna correspondida por etiquetas, uma coluna correspondida por uma expressão personalizada ou um valor constante.

    Exemplos de definições ABAC para a secção de entradas de funções.

    Máscara de coluna

    Na secção Condições da coluna , escolha como identificar as colunas a mascarar:

    • Colunas que correspondem a qualquer uma destas etiquetas: Especifique uma lista de chaves de etiquetas ou pares chave-valor de etiquetas. As colunas que tenham algum destes elementos estão mascaradas pela política.
    • Colunas que correspondem a uma expressão personalizada: Construa uma expressão booleana usando has_tag e has_tag_value, combinado com AND, OR, e NOT para uma lógica de correspondência mais complexa. As colunas em que a expressão resulta em TRUE são mascaradas.

    Exemplos de definições da política de máscara da coluna ABAC para a secção Condições da coluna.

    Depois, escolha a função Mascaração para aplicar às colunas correspondentes:

    • Selecione o existente: Selecione um UDF já definido no Catálogo Unity. A função UDF devolve o valor original ou o valor ocultado. O tipo de retorno deve ser compatível com o tipo de dados da coluna de destino. Deve ter EXECUTE na UDF.
    • Criar: Defina uma função SQL para usar como lógica de mascaramento de colunas.

    Exemplo de definições da política de máscara da coluna ABAC para a secção da função de Mascaramento.

    Na secção de entradas de funções , forneça um valor para cada parâmetro adicional da função. Cada entrada pode ser uma coluna correspondida por etiquetas, uma coluna correspondida por uma expressão personalizada ou um valor constante.

    Este exemplo utiliza um valor constante de 4 para mostrar os últimos 4 caracteres do SSN.

    Exemplos de definições de políticas de máscaras de coluna ABAC para a secção de entradas das funções.

  9. Clique em Criar política.

SQL

Para documentação completa, consulte CRIAR POLÍTICA.

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

Corpo do filtro de linha:

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

Corpo da máscara de coluna:

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

Parâmetros:

  • policy_name: Um nome para a apólice. Deve ser único entre todas as apólices definidas no mesmo seguro.
  • ON { CATALOG | SCHEMA | TABLE }: O âmbito onde a apólice está anexada. A política avalia todas as tabelas que são descendentes deste elemento seguro.
  • function_name: O nome totalmente qualificado da UDF que implementa a lógica de filtragem ou mascaramento.
  • TO principal [, ...]: Os utilizadores, grupos ou principais de serviço a que a política se aplica.
  • EXCEPT principal [, ...]: Os principais responsáveis estão isentos da política. Os diretores isentos não estão sujeitos a filtragem ou mascaramento.
  • FOR TABLES: Especifica que a política tem como alvo tabelas. Atualmente, as tabelas são o único tipo seguro suportado, incluindo tabelas de streaming e visualizações materializadas.
  • WHEN condition: Uma expressão booleana que determina a que tabelas a política se aplica, com base nas suas etiquetas. Utiliza funções has_tag('tag_name') incorporadas e has_tag_value('tag_name', 'tag_value'). Se for omitido, define-se por TRUE (aplica-se a todas as tabelas no âmbito).
  • MATCH COLUMNS condition [[AS] alias] [, ...]: Condições de coluna que identificam quais as colunas que a política tem como alvo. Cada condição é uma expressão booleana construída a partir de has_tag('tag_name') e has_tag_value('tag_name', 'tag_value'), opcionalmente combinadas com AND, OR, e NOT. Cada condição pode ser atribuída a um alias para uso em ON COLUMN e USING COLUMNS. Uma política pode incluir até 3 MATCH COLUMNS expressões, e todas devem coincidir para que a política se aplique.
  • ON COLUMN alias: Para políticas de máscara de coluna, especifica a coluna correspondente à mascarar, referenciada pelo alias de MATCH COLUMNS.
  • USING COLUMNS (function_arg [, ...]): Os argumentos passaram para a UDF. Cada argumento pode ser um alias de MATCH COLUMNS ou um literal constante.

Exemplo: política de máscara de coluna. Mascarar todas as colunas marcadas com pii:ssn no prod.customers esquema, mostrando apenas os últimos 4 caracteres. A política aplica-se a us_analysts exceto 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);

Exemplo: política de filtro de linhas. Exclua linhas com clientes europeus das tabelas marcadas com sensitivity:high no prod.customers esquema. A política aplica-se a us_analysts e filtra linhas com base numa coluna 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);

Python SDK

Para documentação completa, consulte a documentação do SDK Databricks para Python.

Este exemplo cria uma política de filtro de linhas que exclui linhas com clientes europeus para analistas sediados nos EUA:

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")],
    ),
))

Este exemplo cria uma política de máscara de coluna que oculta números de segurança social para analistas dos EUA, exceto para aqueles do 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")],
    ),
))

Editar uma política

Explorador de Catálogos

  1. No seu espaço de trabalho Azure Databricks, clique em Data icon.Catalog.
  2. Selecione o objeto ao qual a política está associada.
  3. Clique na guia Políticas .
  4. Selecione a política que quer editar.
  5. Atualize quaisquer campos que queira alterar. Pode modificar a descrição, os princípios, o tipo de política, as condições e os mapeamentos de entrada da função. O nome da apólice e o objeto seguro onde a apólice é aplicada não podem ser editados. Para descrições de campos, consulte Criar uma política.
  6. Clique em Atualizar política.

SQL

CREATE OR REPLACE POLICY substitui toda a definição da política. Especifique todas as cláusulas, não apenas os campos que quer alterar. A apólice de substituição deve ter o mesmo nome e estar no mesmo seguro garantido.

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);

Python SDK

Ao contrário do CREATE OR REPLACE POLICY SQL, update_policy suporta atualizações parciais. Use o update_mask parâmetro para especificar quais os campos a alterar. Só esses campos são atualizados. Se update_mask for "*" ou estiver vazio, todos os campos em policy_info são aplicados.

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 uma política

Explorador de Catálogos

  1. No seu espaço de trabalho Azure Databricks, clique em Data icon.Catalog.
  2. Selecione o objeto ao qual a política está associada.
  3. Clique na guia Políticas .
  4. Selecione a política.
  5. Clique em Excluir política.

SQL

Usar DROP POLICY para eliminar uma política.

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

Exemplos:

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

Python SDK

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

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

Mostrar políticas

Use SHOW POLICIES para listar as políticas definidas num securável. Utilize SHOW EFFECTIVE POLICIES também para incluir políticas de escopos superiores, como políticas ao nível de catálogo que afetam uma tabela.

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

O resultado inclui o nome da política, o tipo de política e o catálogo, esquema ou tabela onde cada política está definida.

Visualizar políticas eficazes para uma tabela não requer permissões no catálogo ou esquema pai. Isto permite que um administrador de tabelas veja as regras aplicáveis sem ter acesso de leitura às políticas das tabelas irmãs.

Exemplo:

SHOW EFFECTIVE POLICIES ON SCHEMA prod.customers;
nome_da_política tipo_de_política catálogo esquema comentário
ocultar_clientes_ue ROW FILTER PROD customers
mask_ssn COLUMN MÁSCARA PROD customers

Descreva uma política

Use DESCRIBE POLICY para consultar os detalhes de uma apólice específica. Requer MANAGE no alvo propriedade segurável ou posse do objeto.

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

O resultado mostra as propriedades da apólice como pares-chave-valor, incluindo nome, tipo de seguro, nome do seguro, principais, condições, nome da função e carimbos temporais.

Exemplo:

DESCRIBE POLICY hide_eu_customers ON SCHEMA prod.customers;
info_name info_value
Name ocultar_clientes_ue
No Tipo Securável SCHEMA
Sobre o Securable prod.clientes
Para os Diretores us_analysts
Para o Tipo Securável TABLE
Colunas de Jogos has_tag('geo_region') Região AS
Tipo de Política FILTRO_DE_LINHA
Nome da função prod.customers.non_eu_region
Utilização de Colunas região

Registo de auditoria

Os registos do Azure Databricks regiam as operações de etiquetas e políticas ABAC na tabela do sistema de registos de auditoria. Abaixo estão exemplos de consultas. Para obter mais informações, consulte Registos de auditoria.

-- 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;

Mais informações