Partilhar via


Tutorial: Configurar o ABAC

Importante

Este recurso está no Public Preview.

Este tutorial introduz a configuração de políticas de controlo de acesso baseadas em atributos (ABAC) que aplicam filtro de linha e máscara de coluna no Unity Catalog.

Neste exemplo, uma equipa de análise dos EUA não deve poder aceder a registos de clientes da UE ou a SSN. No entanto, devem poder aceder a outros clientes e aos dados dos clientes no mesmo quadro. Este tutorial inclui as seguintes etapas:

  1. Criar uma tag controlada
  2. Cria um catálogo no Unity Catalog, esquema e tabela
  3. Aplicar tags controladas a colunas
  4. Criar uma UDF para ocultar os dados dos membros da UE
  5. Criar uma política de filtro de linha
  6. Criar um UDF para ocultar SSNs
  7. Criar uma política de máscara de coluna
  8. Selecione a sua tabela usando as políticas

Para obter uma demonstração da configuração do ABAC, consulte Discover Attribute-Based Access Control (ABAC) with Unity Catalog.

Requisitos de computação

  • Você deve usar a computação no Databricks Runtime 16.4 ou superior.
  • A computação sem servidor sempre funciona com ABAC.

A computação que executa tempos de execução mais antigos não pode acessar tabelas protegidas pelo ABAC. Como uma solução temporária, você pode configurar o ABAC para se 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.

Etapa 1: criar uma tag controlada

Para criar uma tag governada, você deve ter a permissão CREATE da tag governada no nível da conta. Os administradores de conta e espaço de trabalho têm CREATE por padrão.

  1. No seu espaço de trabalho do Azure Databricks, clique no ícone Dados.Catálogo.

  2. Clique no botão Governadas Etiquetas>.

  3. Clique em Criar tag governada.

  4. Introduza a chave da etiqueta pii.

  5. Insira uma descrição para a tag governada.

  6. Insira os valores permitidos para a tag : ssn e address. Somente esses valores podem ser atribuídos a essa chave de tag.

    Tutorial: crie uma política de tags.

  7. Clique em Criar.

Advertência

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

Etapa 2: Criar a tabela de clientes

Para seguir estas etapas, você deve ter a CREATE CATALOG permissão no metastore do Catálogo Unity. Você também pode criar a tabela em um esquema no qual você tem a CREATE TABLE permissão.

  1. Na barra lateral, clique em +Novo>Notebook.
  2. Selecione SQL como idioma do seu bloco de notas.
  3. Clique em Conectar e anexe o bloco de anotações a um recurso de computação.
  4. Adicione os seguintes comandos ao bloco de notas e execute-os:
-- Create catalog (if not already exists)
CREATE CATALOG IF NOT EXISTS abac;
USE CATALOG abac;

-- Create schema
CREATE SCHEMA IF NOT EXISTS customers;
USE SCHEMA customers;

-- Create table
CREATE TABLE IF NOT EXISTS profiles (
    First_Name STRING,
    Last_Name STRING,
    Phone_Number STRING,
    Address STRING,
    SSN STRING
)
USING DELTA;

-- Insert data
INSERT INTO profiles (First_Name, Last_Name, Phone_Number, Address, SSN)
VALUES
('John', 'Doe', '123-456-7890', '123 Main St, NY', '123-45-6789'),
('Jane', 'Smith', '234-567-8901', '456 Oak St, CA', '234-56-7890'),
('Alice', 'Johnson', '345-678-9012', '789 Pine St, TX', '345-67-8901'),
('Bob', 'Brown', '456-789-0123', '321 Maple St, FL', '456-78-9012'),
('Charlie', 'Davis', '567-890-1234', '654 Cedar St, IL', '567-89-0123'),
('Emily', 'White', '678-901-2345', '987 Birch St, WA', '678-90-1234'),
('Frank', 'Miller', '789-012-3456', '741 Spruce St, WA', '789-01-2345'),
('Grace', 'Wilson', '890-123-4567', '852 Elm St, NV', '890-12-3456'),
('Hank', 'Moore', '901-234-5678', '963 Walnut St, CO', '901-23-4567'),
('Ivy', 'Taylor', '012-345-6789', '159 Aspen St, AZ', '012-34-5678'),
('Liam', 'Connor', '111-222-3333', '12 Abbey Street, Dublin, Ireland EU', '111-22-3333'),
('Sophie', 'Dubois', '222-333-4444', '45 Rue de Rivoli, Paris, France Europe', '222-33-4444'),
('Hans', 'Müller', '333-444-5555', '78 Berliner Str., Berlin, Germany E.U.', '333-44-5555'),
('Elena', 'Rossi', '444-555-6666', '23 Via Roma, Milan, Italy Europe', '444-55-6666'),
('Johan', 'Andersson', '555-666-7777', '56 Drottninggatan, Stockholm, Sweden EU', '555-66-7777');

Etapa 3: Adicionar tags controladas às colunas PII

  1. Adicione o seguinte comando ao bloco de anotações e execute-o:
-- Add the governed tag to ssn column
ALTER TABLE abac.customers.profiles
ALTER COLUMN SSN
SET TAGS ('pii' = 'ssn');

-- Add governed tag to address column
ALTER TABLE abac.customers.profiles
ALTER COLUMN Address
SET TAGS ('pii' = 'address');

Etapa 4: Criar uma UDF para encontrar endereços da UE

  1. Adicione o seguinte comando ao bloco de anotações e execute-o:
-- Determine if an address is not in the EU
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
);

Este UDF verifica se uma determinada cadeia de caracteres não parece fazer referência à Europa ou à UE. Se qualquer uma dessas substrings for encontrada, ela retornará FALSE (o que significa que é um endereço da UE). Se nenhuma das substrings for encontrada, ela retornará TRUE (o que significa que não é um endereço da UE).

Etapa 5: Criar uma política de filtro de linha

Para criar uma política em um objeto, você deve ter MANAGE sobre o objeto ou propriedade do objeto. Para adicionar um UDF a uma política, você deve ter EXECUTE no UDF e ele deve estar no Unity Catalog.

  1. Clique no ícone Dados.Catálogo.

  2. Clique no abac catálogo criado anteriormente.

  3. Clique na guia Políticas .

  4. Clique em Nova política.

  5. Em geral:

    • Em Nome, digite hide_eu_customers.
    • Em Descrição, insira uma descrição para sua política.
    • Em Aplicado a..., pesquise e selecione as entidades às quais a política se aplica. Neste exemplo, você pode usar o grupo Todos os usuários da conta.
    • Deixe Exceto para... em branco.
    • Em Escopo, escolha o catálogo abac e Todos os esquemas.

    Exemplo de configurações de políticas de filtro de linha do ABAC para a Seção Geral.

  6. Para Finalidade, escolha Ocultar linhas da tabela.

  7. Em Condições, clique em Selecionar existente. Em seguida, clique no ícone Função.Selecione a função.

  8. No menu Selecionar uma função , clique no abac catálogo, no customers esquema e, em seguida, na is_not_eu_address função criada anteriormente.

  9. Clique em Selecionar.

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

  10. Opcionalmente, você pode testar sua função de mascaramento expandindo a função Test e fornecendo uma entrada. Por exemplo, inserir 78 Berliner Str., Berlin, Germany E.U. e clicar em Executar teste corretamente retorna FALSE (Hide row).

    Exemplo de teste de função de mascaramento de filtro de linha ABAC.

  11. Em parâmetros de função:

    • Escolha Mapear coluna para parâmetro se ela tiver uma tag específica.
    • Procurar pii. Selecione pii : address.

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

  12. Clique em Criar política.

Etapa 6: Testar sua política

  1. Regresse ao seu bloco de notas e execute o seguinte comando:
SELECT DISTINCT * FROM abac.customers.profiles

Apenas as linhas correspondentes a residentes de fora da UE são devolvidas.

Nome_Primeiro Apelido Número de Telefone Endereço NSS
Graça Wilson 890-123-4567 Rua Elm, 852, NV 890-12-3456
Adriana Joaquim 345-678-9012 Rua dos Pinheiros, 789, TX 345-67-8901
Hera Taylor 012-345-6789 159 Aspen St, Nova Iorque 012-34-5678
Fábio Moleiro 789-012-3456 Rua Spruce, 741, WA 789-01-2345
Joana Silva 234-567-8901 456 Oak St, Califórnia 234-56-7890
John Doe 123-456-7890 123 Main St, Nova Iorque 123-45-6789
Carlinhos Davis 567-890-1234 Rua Cedro, 654, IL 567-89-0123
Emília Branco 678-901-2345 987 Birch St, WA 678-90-1234
Hank Márcia 901-234-5678 Rua Walnut, 963, Colorado 901-23-4567
Joaquim Castanho 456-789-0123 321 Maple St, Flórida 456-78-9012

Você pode continuar a criar uma política de máscara de coluna.

Etapa 7: Criar um UDF para mascarar SSNs

  1. Adicione o seguinte comando ao bloco de anotações e execute-o:
-- Masks any SSN input by returning a fully masked value
CREATE FUNCTION mask_SSN(ssn STRING)
RETURN '***-**-****' ;

Esta função UDF retorna uma cadeia de caracteres do SSN totalmente mascarada ('***-**-****')

Etapa 8: Criar uma política de máscara de coluna

Para criar uma política em um objeto, você deve ter MANAGE sobre o objeto ou propriedade do objeto. Para adicionar um UDF a uma política, você deve ter EXECUTE no UDF e ele deve estar no Unity Catalog.

  1. Clique no ícone Dados.Catálogo.

  2. Clique no abac catálogo criado anteriormente.

  3. Clique na guia Políticas .

  4. Clique em Nova política.

  5. Em geral:

    • Em Nome, digite mask_ssn.
    • Em Descrição, insira uma descrição para sua política.
    • Em Aplicado a..., pesquise e selecione as entidades às quais a política se aplica. Neste exemplo, você pode usar o grupo Todos os usuários da conta.
    • Deixe Exceto para... em branco.
    • Em Escopo, escolha o catálogo abac e Todos os esquemas.

    Exemplo de configurações de política de máscara de coluna ABAC na seção Geral.

  6. Em Finalidade, escolha Mascarar dados da coluna.

  7. Em condições:

    • Escolha Mascarar coluna se tiver uma tag específica. pii Procure e selecione pii : ssn.
    • Clique em Selecionar existente. Em seguida, clique no ícone Função.Selecione a função.
    • No menu Selecionar uma função , clique no abac catálogo, no customers esquema e, em seguida, na mask_ssn função criada anteriormente.
  8. Clique em Selecionar.

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

  9. Opcionalmente, você pode testar sua função de mascaramento expandindo a função Test e fornecendo uma entrada. Por exemplo, inserir 901-234-5678 e clicar em Executar teste corretamente retorna ***-**-****.

    Exemplo de teste de função da máscara de coluna ABAC.

  10. Clique em Criar política.

Etapa 9: Testar sua política

  1. Regresse ao seu bloco de notas e execute o seguinte comando:
SELECT * FROM abac.customers.profiles

Os SSNs agora retornam como ***-***-***. Apenas os residentes não pertencentes à UE são retornados porque a máscara de filtro de linha também está ativada.

Nome_Primeiro Apelido Número de Telefone Endereço NSS
Joana Silva 234-567-8901 456 Oak St, Califórnia ***-**-****
Adriana Joaquim 345-678-9012 Rua dos Pinheiros, 789, TX ***-**-****
Carlinhos Davis 567-890-1234 Rua Cedro, 654, IL ***-**-****
Graça Wilson 890-123-4567 Rua Elm, 852, NV ***-**-****
Joaquim Castanho 456-789-0123 321 Maple St, Flórida ***-**-****
Hank Márcia 901-234-5678 Rua Walnut, 963, Colorado ***-**-****
Hera Taylor 012-345-6789 159 Aspen St, Nova Iorque ***-**-****
Emília Branco 678-901-2345 987 Birch St, WA ***-**-****
Fábio Moleiro 789-012-3456 Rua Spruce, 741, WA ***-**-****
John Doe 123-456-7890 123 Main St, Nova Iorque ***-**-****