Compartilhar via


Criar e gerenciar políticas de ABAC (controle de acesso baseado em atributo)

Importante

Esse recurso está em Visualização Pública.

Esta página descreve como configurar políticas de filtro de linha e máscara de coluna no Catálogo do Unity. Para obter mais informações sobre o controle de acesso baseado em atributo (ABAC) e políticas, consulte ABAC (controle de acesso baseado em atributo) do Catálogo do Unity. Para aplicar marcas a objetos, consulte marcas governadas e aplicar marcas a objetos protegíveis do Catálogo do Unity.

Requisitos de computação

Para usar políticas abac, você deve usar uma das seguintes configurações de computação:

A computação padrão e dedicada que executa runtimes mais antigos não pode acessar tabelas protegidas pelo ABAC. Como uma solução alternativa temporária, você pode configurar o ABAC para aplicar somente a um grupo específico. Adicione os usuários que você deseja restringir a esse grupo. Os usuários que não estão no grupo ainda podem acessar as tabelas.

Cotas de política

O seguinte lista o número de políticas ABAC que você pode criar em diferentes objetos protegíveis:

  • Catálogo: 10 políticas por catálogo
  • Esquema: 10 políticas por esquema
  • Tabela: 5 políticas por tabela

Criar uma política em um objeto

Para criar um filtro de linha ou uma política de máscara de coluna, você deve ter:

  • Uma função definida pelo usuário (UDF) existente no Catálogo do Unity sobre a qual você tem o EXECUTE privilégio que implementa a lógica de filtro de linha ou máscara de coluna que você deseja impor.
    Para melhores práticas, limitações e UDFs de exemplo, consulte UDFs para práticas recomendadas de políticas do ABAC.
  • MANAGE no objeto ou propriedade do objeto.

Requisitos de computação

  • Você deve usar a computação no Databricks Runtime 16.4 ou superior ou computação sem servidor.

A computação que executa runtimes mais antigos não pode acessar tabelas protegidas pelo ABAC. Como uma solução alternativa temporária, você pode configurar o ABAC para aplicar somente a um grupo específico. Adicione os usuários que você deseja restringir a esse grupo. Os usuários que não estão no grupo ainda podem acessar as tabelas.

Gerenciador de Catálogos

  1. No workspace do Azure Databricks, clique no ícone Dados.Catálogo.

  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. Em geral:

    • Para Nome, insira um nome para sua política.
    • Para Descrição, insira uma descrição para sua política.
    • Para Aplicado a..., pesquise e selecione os usuários ou identidades de usuário aos quais a política se aplica.
    • Exceto para ..., adicione quaisquer principais que você queira excluir da política.
    • Para Escopo, escolha o catálogo, os esquemas e as tabelas às quais você deseja que a política se aplique.

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

  6. Para Objetivo, decida se deseja mascarar colunas ou ocultar linhas.

  7. Nas seções condições e parâmetros de função , configure como você deseja que a política mascara colunas ou oculte linhas. Você faz isso especificando uma função de mascaramento, juntamente com as condições para aplicar a função.

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

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

  8. Clique em Criar política.

SQL

Veja a seguir a sintaxe geral para criar uma política:

CREATE POLICY <policy_name>
ON <securable_type> <securable_name>
COMMENT '<policy_description>'
-- One of the following:
  ROW FILTER <udf_name>
  | COLUMN MASK <udf_name> ON COLUMN <target_column>
TO `<principal_name>`[, `<principal_name>`, ...]
[EXCEPT `<principal_name>`[, `<principal_name>`, ...]]
FOR TABLES
[WHEN hasTag('<key>') OR hasTagValue('<key>', '<value>')]
MATCH COLUMNS hasTag('<key>') OR hasTagValue('<key>', '<value>') AS <alias>
USING COLUMNS <alias>[, <alias>, ...];

Quando você define condições de nível de tabela (MATCH COLUMNS), a política se aplica à tabela somente se cada condição corresponder a pelo menos uma coluna. Se uma condição não corresponder a nenhuma coluna na tabela, a política não se aplicará à tabela e o Azure Databricks ignorará qualquer filtragem de linha ou máscara de coluna.

Por exemplo, se uma política for definida MATCH COLUMNS condition1, condition2, condition3, a política entrará em vigor somente se cada uma das três condições corresponder a pelo menos uma coluna na tabela.

Uma política pode incluir até três condições de coluna em sua MATCH COLUMNS cláusula.

Este exemplo define uma política de filtro de linha que exclui linhas para clientes europeus de consultas por analistas norte-americanos:

CREATE POLICY hide_eu_customers
ON SCHEMA prod.customers
COMMENT 'Hide rows with European customers from sensitive tables'
ROW FILTER non_eu_region
TO `us_analysts`
FOR TABLES
MATCH COLUMNS
  hasTag('geo_region') AS region
USING COLUMNS (region);

Este exemplo define uma política de máscara de coluna que oculta os números de seguridade social de analistas norte-americanos, exceto para aqueles do grupo admins.

CREATE POLICY mask_SSN
ON SCHEMA prod.customers
COMMENT 'Mask social security numbers'
COLUMN MASK mask_SSN
TO `us_analysts`
EXCEPT `admins`
FOR TABLES
MATCH COLUMNS
  hasTagValue('pii', 'ssn') AS ssn
ON COLUMN ssn;

Aviso

Os dados da marca são armazenados como texto sem formatação e podem ser replicados globalmente. Não use nomes de marca, valores ou descritores que possam comprometer a segurança de seus recursos. Por exemplo, não use nomes de marca, valores ou descritores que contenham informações pessoais ou confidenciais.

Editar uma política

Permissões necessárias:MANAGE no objeto ou no proprietário do objeto.

Gerenciador de Catálogos

  1. No workspace do Azure Databricks, clique no ícone Dados.Catálogo.
  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. Selecione a política e faça edições.
  5. Clique em Atualizar política.

SQL

CREATE OR REPLACE POLICY <policy_name>
ON <securable_type> <securable_name>
COMMENT '<policy_description>'
-- One of the following:
  ROW FILTER <udf_name>
  | COLUMN MASK <udf_name> ON COLUMN <target_column>
TO `<principal_name>`[, `<principal_name>`, ...]
[EXCEPT `<principal_name>`[, `<principal_name>`, ...]]
FOR TABLES
[WHEN hasTag('<key>') OR hasTagValue('<key>', '<value>')]
MATCH COLUMNS hasTag('<key>') OR hasTagValue('<key>', '<value>') AS <alias>
USING COLUMNS <alias>[, <alias>, ...];

Excluir uma política

Permissões necessárias:MANAGE no objeto ou no proprietário do objeto.

Gerenciador de Catálogos

  1. No workspace do Azure Databricks, clique no ícone Dados.Catálogo.
  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. Selecione a política.
  5. Clique em Excluir política.

SQL

DROP POLICY <policy_name> ON <securable_type> <securable_name>

Solução de problemas de vários filtros ou máscaras

Quando um usuário consulta uma tabela regida pelo ABAC, apenas um filtro de linha distinto por tabela pode ser resolvido para cada usuário. Além disso, apenas uma máscara de coluna distinta por coluna pode ser resolvida para cada usuário. Você pode definir várias políticas ABAC em uma tabela desde que elas estejam em conformidade com essas restrições. Isso impede resultados ambíguos quando vários filtros ou máscaras distintos se aplicam ao mesmo usuário.

Quando o Azure Databricks detecta vários filtros ou máscaras distintos durante a avaliação da política para um determinado usuário, ele lança um erro INVALID_PARAMETER_VALUE.UC_ABAC_MULTIPLE_ROW_FILTERS ou COLUMN_MASKS_FEATURE_NOT_SUPPORTED.MULTIPLE_MASKS. Esse comportamento é por design e bloqueia o acesso à tabela até que o conflito seja resolvido.

Compreendendo como surgem múltiplos filtros de linha ou máscaras

Vários filtros ou máscaras podem surgir de várias maneiras:

  • Uma única política gera vários filtros ou máscaras.
    Isso pode acontecer quando várias colunas correspondem às condições da política. Por exemplo, a política a seguir define um filtro de linha com base em colunas marcadas com region=EMEA:

    CREATE OR REPLACE POLICY region_filter_policy
    ON TABLE my_catalog.my_schema.customer_data
    ROW FILTER my_catalog.my_schema.filter_by_region
    TO `account users`
    FOR TABLES
    MATCH COLUMNS
      hasTagValue('region', 'EMEA') AS region_cols
    USING COLUMNS (region_cols);
    

    Se a tabela customer_data tiver várias colunas marcadas com region=EMEA, essa única política gerará um filtro de linha por coluna correspondente. Quando o Azure Databricks avalia a política, ele detecta vários filtros de linha e gera um erro.

  • Várias políticas definem filtros ou máscaras na mesma tabela ou coluna. Se mais de uma política ABAC se aplicar à mesma tabela ou coluna, o Azure Databricks detectará vários filtros ou máscaras eficazes.

  • Uma tabela ou coluna já tem um filtro ou máscara aplicado manualmente. Conflitos também podem ocorrer quando uma tabela ou coluna inclui um filtro de linha ou máscara de coluna (não ABAC) aplicado manualmente e um ou mais filtros ou máscaras definidos pelo ABAC.

Como resolver o erro

Você pode resolver o erro de filtros de várias linhas com qualquer uma das seguintes abordagens:

  • Refinar as correspondências de coluna da política: Atualize a cláusula MATCH COLUMNS para ser mais específica, garantindo que corresponda apenas a uma coluna. Por exemplo, combine várias condições para estreitar a correspondência.

  • Ajuste suas tags governadas: revise quais colunas têm as tags governadas que acionam a política. Remova ou modifique essas marcas se elas não devem ser incluídas no filtro de linha.

  • Reestruturar suas políticas: em vez de depender de condições que possam corresponder a várias colunas, considere criar políticas separadas com direcionamento de coluna explícito. Isso oferece mais controle sobre quais colunas disparam filtros de linha.