Criar e gerenciar políticas ABAC

Esta página descreve como criar, editar, exibir e excluir políticas ABAC no Catálogo do Unity. Para obter uma visão geral dos conceitos de política, consulte os conceitos principais para ABAC.

Requisitos

Todas as operações de política (criar, editar, excluir, mostrar, descrever) exigem MANAGE na propriedade protegível ou de objeto. A criação de uma política também requer:

  • Databricks Runtime 16.4 ou superior, ou computação sem servidor. Consulte os requisitos de computação.
  • Para a lógica de filtragem ou máscara, utilize uma UDF (função definida pelo usuário) no Catálogo do Unity que já esteja EXECUTE, ou uma função SQL definida em linha ao criar a política.
  • Etiquetas governadas aplicadas a objetos alvo. Consulte tags governadas.

Criar uma política

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

Para criar uma política, você deve ter MANAGE no objeto seguro onde a política está anexada (catálogo, esquema ou tabela) ou ser o proprietário do objeto seguro, e EXECUTE na UDF que implementa a lógica de filtragem ou mascaramento.

Gerenciador de Catálogos

  1. No workspace Azure Databricks, clique em Data icon.Catalog.

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

  3. Clique na guia Políticas.

  4. Clique em Nova política.

  5. Conclua a seção Identificação da política. A tabela a seguir resume cada campo:

    Campo Descrição Exemplo
    Nome Um nome para a política. Deve ser único entre todas as políticas definidas no mesmo segurável. hide_eu_customers, mask_ssn
    Descrição Opcional. Uma descrição para a política. Aparece nos logs de auditoria e ajuda os administradores a entender a intenção de política. Restrict EU customer rows from US analysts, Mask SSN for all account users
  6. Conclua a seção Principais e escopo. A tabela a seguir resume cada campo:

    Campo Descrição Exemplo
    Aplicado a... Os usuários, grupos ou entidades de serviço sujeitos à política. Quando essas entidades de segurança consultam as tabelas dentro do escopo, o filtro de linha ou máscara de coluna é aplicado. Para aplicar a política a todas as principais na conta, selecione All account users. us_analysts, All account users
    Exceto por Entidades principais isentas da política. Responsáveis isentos não estão sujeitos a filtragem ou mascaramento e veem os dados completos e sem alterações. admins, compliance_team
    Âmbito O elemento securitizável ao qual a política está anexada. A política é avaliada em relação a todas as tabelas dentro do escopo selecionado. Selecione um catálogo, um esquema ou uma tabela. Azure Databricks recomenda anexar políticas no nível mais alto aplicável. Selecione o catálogo prode selecione o esquema customers.
    Condição da tabela Determina a quais tabelas dentro do escopo a política se aplica. Nenhuma condição: Aplica a política a todas as tabelas no escopo. Tabelas que correspondem a qualquer uma destas tags: Aplica a política à lista especificada de chaves de tag ou pares chave-valor de tag. Tabelas que têm qualquer uma delas estão em conformidade com a política. Tabelas que correspondem a uma expressão personalizada: você pode criar uma expressão booliana usando has_tag e has_tag_value, combinada com AND, ORe 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 escopo não corresponder à condição, a política não se aplicará a essa tabela. Selecione Tabelas que correspondem a qualquer uma dessas tags, em seguida, escolha a chave de tag sensitivity com valor high para restringir a política apenas a tabelas confidenciais.

    Exemplo de configurações de política ABAC para a seção Principais e escopo.

  7. Para o tipo de política, escolha o tipo de controle de acesso a ser aplicado:

    Opção Descrição Usar quando
    Filtro de linha Cria uma política de filtro de linha. A UDF avalia cada linha e retorna um booliano. As linhas em que a UDF retorna FALSE são excluídas dos resultados da consulta. O acesso depende dos valores em cada linha, como filtragem pelos valores em uma coluna que contém regiões geográficas.
    Máscara de coluna Cria uma política de máscara de coluna. A UDF usa o valor da coluna como entrada e retorna a versão original ou mascarada. O tipo de retorno deve ser convertível para o tipo de dados da coluna de destino. Você precisa redigir campos confidenciais, como SSNs, números de telefone ou endereços de email, enquanto ainda permite que o principal consulte a tabela.
  8. As próximas seções dependem da seleção de tipo de política . Expanda a seção que corresponde à sua seleção:

    Filtro de linha

    Na seção Função de filtro de linha, escolha como especificar a função de filtro de linha:

    • Selecione existente: selecione um UDF já definido no Catálogo do Unity. A UDF avalia cada linha e retorna um booliano. As linhas em que a função retorna FALSE são excluídas dos resultados da consulta. Você deve ter EXECUTE na UDF.
    • Criar: defina uma função SQL a ser usada como a lógica de filtro de linha.

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

    Na seção Entradas de função , forneça um valor para cada parâmetro de função. Cada entrada pode ser uma coluna correspondente a tags, uma coluna correspondente a uma expressão personalizada ou um valor constante.

    Exemplo de configurações ABAC para a seção de Entradas de Função.

    Máscara de coluna

    Na seção Condições de coluna , escolha como identificar as colunas a serem mascaradas:

    • Colunas que correspondem a qualquer uma dessas tags: especifique uma lista de chaves de tags ou pares chave-valor de tags. As colunas que possuem qualquer uma dessas são mascaradas pela política.
    • Colunas que correspondem a uma expressão personalizada: crie uma expressão booliana usando has_tag e has_tag_value, combinada com AND, ORe NOT para uma lógica de correspondência mais complexa. Colunas nas quais a expressão é avaliada para TRUE são mascaradas.

    Exemplo de configurações de política de máscara de coluna ABAC para a seção condições de coluna.

    Em seguida, escolha a função Mascaramento para aplicar às colunas correspondentes:

    • Selecione existente: selecione um UDF já definido no Catálogo do Unity. A função UDF retorna o valor original ou mascarado. O tipo de retorno deve ser convertível para o tipo de dados da coluna de destino. Você deve ter EXECUTE na UDF.
    • Criar: defina uma função SQL a ser usada como a lógica de mascaramento de coluna.

    Exemplo de configurações de política de mascaramento de coluna ABAC para a seção de função de mascaramento.

    Na seção de entradas de função , forneça um valor para cada parâmetro de função adicional. Cada entrada pode ser uma coluna correspondente a tags, uma coluna correspondente a uma expressão personalizada ou um valor constante.

    Este exemplo usa um valor constante de 4 para mostrar os últimos 4 caracteres do Número de Seguro Social (SSN).

    Exemplo de configurações de política de máscara de coluna ABAC para a seção de entradas de função.

  9. Clique em Criar política.

SQL

Para obter a documentação 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 }

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 política. Deve ser exclusivo entre todas as políticas definidas no mesmo recurso de segurança.
  • ON { CATALOG | SCHEMA | TABLE }: o escopo em que a política está anexada. A política é avaliada em relação a todas as tabelas descendentes desse elemento de segurança.
  • function_name: o nome totalmente qualificado da UDF que implementa a lógica de filtragem ou mascaramento.
  • TO principal [, ...]: os usuários, grupos ou entidades de serviço aos quais a política se aplica.
  • EXCEPT principal [, ...]: principais isentos da política. Principais 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 protegível com suporte e isso inclui tabelas de streaming e exibições materializadas.
  • WHEN condition: uma expressão booliana que determina a quais tabelas a política se aplica, com base em suas marcas. Usa funções internas has_tag('tag_name') e has_tag_value('tag_name', 'tag_value'). Caso seja omitido, o padrão será TRUE (aplica-se a todas as tabelas no escopo).
  • MATCH COLUMNS condition [[AS] alias] [, ...]: Condições de coluna que identificam as colunas às quais a política é direcionada. Cada condição é uma expressão booleana criada a partir de has_tag('tag_name') e has_tag_value('tag_name', 'tag_value'), opcionalmente combinada com AND, OR e NOT. Cada condição pode ser atribuída a um alias para uso dentro ON COLUMN e USING COLUMNS. Uma política pode incluir até três MATCH COLUMNS expressões e todas devem corresponder à política a ser aplicada.
  • ON COLUMN alias: Para as políticas de máscara de coluna, especifica a coluna correspondente a ser mascarada, referenciada a partir de seu alias em MATCH COLUMNS.
  • USING COLUMNS (function_arg [, ...]): argumentos passados 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 esquema prod.customers, mostrando apenas os últimos 4 caracteres. A política se aplica 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 linha. Exclua linhas de tabelas marcadas com sensitivity:high no esquema prod.customers com clientes europeus. A política se aplica a us_analysts e filtra linhas com base na 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);

SDK do Python

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

Este exemplo cria uma política de filtro de linha que exclui linhas com clientes europeus para analistas baseados 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 mascara os números de segurança social para analistas dos EUA, exceto aqueles no admins grupo:

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

Gerenciador de Catálogos

  1. No workspace Azure Databricks, clique em Data icon.Catalog.
  2. Selecione o objeto ao qual a política está anexada.
  3. Clique na guia Políticas.
  4. Selecione a política que você deseja editar.
  5. Atualize todos os campos que você deseja alterar. Você pode modificar a descrição, os principais responsáveis, o tipo de política, as condições e os mapeamentos de entrada das funções. O nome da política e o objeto protegível em que a política é aplicada não podem ser editados. Para obter descrições de campo, consulte Criar uma política.
  6. Clique em Atualizar política.

SQL

CREATE OR REPLACE POLICY substitui toda a definição de política. Especifique todas as cláusulas, não apenas os campos que você deseja alterar. A política de substituição deve ter o mesmo nome e estar no mesmo recurso de segurança.

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 do Python

Ao contrário CREATE OR REPLACE POLICY do SQL, update_policy dá suporte a atualizações parciais. Use o update_mask parâmetro para especificar quais campos alterar. Somente esses campos são atualizados. Se update_mask está "*" ou 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",
)

Excluir uma política

Gerenciador de Catálogos

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

SQL

Use DROP POLICY para excluir 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;

SDK do 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 políticas

Use SHOW POLICIES para listar as políticas definidas em um protegível. Use SHOW EFFECTIVE POLICIES também para incluir políticas de escopos superiores, como políticas de 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, o esquema ou a tabela em que cada política é definida.

Exibir políticas efetivas para uma tabela não requer permissões no catálogo ou esquema pai. Isso permite que um administrador de tabelas veja as regras que se aplicam sem ter acesso de leitura às políticas das tabelas irmãos.

Exemplo:

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

Descrever uma política

Use DESCRIBE POLICY para exibir os detalhes de uma política específica. MANAGE Requer no destino protegível ou propriedade do objeto.

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

O resultado mostra as propriedades da política como pares chave-valor, incluindo nome, tipo de segurança, nome de segurança, princípios, condições, nome da função e marca temporal.

Exemplo:

DESCRIBE POLICY hide_eu_customers ON SCHEMA prod.customers;
info_name info_value
Nome ocultar_clientes_eu
Em Tipo Protegível SCHEMA
Em Securable prod.clientes
Para os Responsáveis us_analysts
Para Tipo Securável TABLE
Corresponder colunas has_tag('geo_region') AS região
Tipo de Política Filtro de linha
Nome da função prod.clientes.nao_regiao_ue
Usando colunas região

Log de auditoria

Azure Databricks registra operações de tags regulamentadas e de política ABAC na tabela do sistema de log de auditoria. Veja abaixo exemplos de consultas. Para obter mais informações, confira Logs 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