Samouczek: konfigurowanie usługi ABAC

W tym samouczku pokazano, jak skonfigurować zasady kontroli dostępu opartego na atrybutach (ABAC) dla filtrowania wierszy i maskowania kolumn w Unity Catalog przy użyciu interfejsu użytkownika Catalog Explorer. Aby uzyskać w pełni opartą na języku SQL wersję, która obejmuje również warunkowe maskowanie wiadomości e-mail, zobacz Samouczek: konfigurowanie usługi ABAC przy użyciu języka SQL.

W tym przykładzie amerykański zespół analityczny nie powinien mieć dostępu do rekordów klientów z UE ani sieci SSN. Powinny jednak mieć dostęp do innych klientów i danych klientów w tej samej tabeli. Ten samouczek obejmuje następujące kroki:

  1. Tworzenie tagu zarządzanego
  2. Utwórz katalog Unity Catalog, schemat i tabelę.
  3. Nakładanie tagów na kolumny podlegające reglamentacji
  4. Utworzenie UDF do identyfikacji danych klientów UE
  5. Utwórz zasady filtrowania wierszy
  6. Stwórz FZPU do maskowania numerów ubezpieczenia społecznego.
  7. Tworzenie zasad maski kolumn
  8. Wybierz swoją tabelę według zasad

Aby zapoznać się z pokazem konfigurowania Kontroli dostępu opartej na atrybutach (ABAC), zobacz Odkryj Kontrolę dostępu opartą na atrybutach (ABAC) z użyciem Katalogu Unity.

Wymagania wstępne

  • Środowisko Databricks Runtime w wersji 16.4 lub nowszej, lub obliczeń bezserwerowych.
  • Uprawnienia administratora konta lub administratora obszaru roboczego (aby utworzyć tagi zarządzane).
  • Aby zastosować tagi zarządzane do kolumn (krok 3): uprawnienie ASSIGN do tagu zarządzanego (administratorzy kont mają je domyślnie) oraz uprawnienie APPLY TAG do tabeli docelowej.
  • MANAGE uprawnienia do katalogu docelowego lub schematu.
  • EXECUTE w UDF.

Środowisko obliczeniowe ze starszymi środowiskami uruchomieniowymi nie może uzyskać dostępu do tabel zabezpieczonych przez usługę ABAC. Jako tymczasowe obejście można skonfigurować funkcję ABAC tak, aby miała zastosowanie tylko do określonej grupy. Dodaj użytkowników, których chcesz ograniczyć do tej grupy. Użytkownicy, którzy nie znajdują się w grupie, nadal mogą uzyskiwać dostęp do tabel.

Krok 1. Tworzenie tagu zarządzanego

Aby utworzyć zarządzany tag, musisz mieć uprawnienia do tworzenia zarządzanych tagów na poziomie konta. Administratorzy kont i obszarów roboczych domyślnie mają uprawnienia CREATE.

  1. W obszarze roboczym usługi Azure Databricks kliknij ikonę Dane.Wykaz.

  2. Kliknij ikonę Tarcza.Przycisk Zarządzaj .

  3. W menu rozwijanym kliknij pozycję Zarządzane tagi.

  4. Kliknij pozycję Utwórz tag zarządzany.

  5. Wprowadź klucz tagu pii.

  6. Wprowadź opis tagu zarządzanego.

  7. Wprowadź dozwolone wartości tagu: ssn i address. Do tego klucza tagu można przypisać tylko te wartości.

    Samouczek: tworzenie zasad tagów.

  8. Kliknij pozycję Utwórz.

Ostrzeżenie

Dane tagów są przechowywane jako zwykły tekst i mogą być replikowane globalnie. Nie używaj nazw tagów, wartości ani deskryptorów, które mogą naruszyć bezpieczeństwo zasobów. Na przykład nie należy używać nazw tagów, wartości ani deskryptorów zawierających informacje osobiste lub poufne.

Krok 2: Utwórz tabelę klientów

Aby wykonać te kroki, musisz mieć CREATE CATALOG uprawnienie do metastore katalogu Unity. Tabelę możesz również utworzyć w schemacie, do którego masz uprawnienia CREATE TABLE.

  1. Na pasku bocznym kliknij pozycję +Nowy>Notes.
  2. Wybierz SQL jako język notesu.
  3. Kliknij pozycję Połącz i dołącz notes do zasobu obliczeniowego.
  4. Dodaj następujące polecenia do notesu i uruchom je:
-- 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');

Krok 3: Dodaj zarządzane tagi do kolumn PII

Dodaj następujące polecenie do notesu i uruchom je:

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

Krok 4: Utwórz funkcję zdefiniowaną przez użytkownika, aby znaleźć adresy UE

Dodaj następujące polecenie do notesu i uruchom je:

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

Ta funkcja UDF sprawdza, czy ten ciąg znaków nie wydaje się odnosić do Europy ani UE. Jeśli którykolwiek z tych podciągów zostanie znaleziony, funkcja zwraca wartość FALSE, co oznacza, że jest to adres w UE. Jeśli żaden z podciągów znaków nie zostanie znaleziony, zwraca wartość TRUE (co oznacza, że nie jest to adres w Unii Europejskiej).

Krok 5. Tworzenie zasad filtru wierszy

Aby utworzyć politykę na obiekcie, musisz mieć MANAGE na obiekcie lub być jego właścicielem. Aby dodać UDF do polityki, musisz mieć EXECUTE w UDF i musi znajdować się w katalogu Unity.

  1. Kliknij ikonę Dane.Wykaz.

  2. Kliknij katalog abac utworzony wcześniej.

  3. Kliknij kartę Zasady .

  4. Kliknij pozycję Nowe zasady.

  5. W obszarze identyfikacji zasad:

    • W polu Nazwa wprowadź hide_eu_customers.
    • W polu Opis wprowadź opis zasad.
  6. W typie polityki wybierz filtr wierszowy.

  7. W podmiotach odpowiedzialnych i zakresie:

    • W polu Zastosowano do... wyszukaj i wybierz uczestników, do których mają zastosowanie zasady. W tym przykładzie możesz użyć grupy Wszyscy użytkownicy konta.
    • Pozostaw z wyjątkiem... puste.
    • Dla Scope wybierz abac katalog i Wszystkie schematy.

    Przykładowe ustawienia polityki filtru wierszy ABAC dla sekcji Podmioty i zakres.

  8. W Condition wybierz tabele w zakresie, do których odnosi się zasada. W tym przykładzie możesz wybrać Brak warunku , aby polityka dotyczyła wszystkich tabel.

  9. W funkcji filtra wierszowego:

    • Kliknij ikonę funkcji.Wybierz funkcję.
    • W menu Wybierz funkcję kliknij katalog abac, schemat customers, a następnie funkcję, którą utworzyłeś wcześniej is_not_eu_address.
    • Kliknij opcję Wybierz.

    Przykładowe ustawienia zasad filtrowania wierszy ABAC dla sekcji funkcji filtrowania wierszy.

    • Opcjonalnie możesz przetestować swoją funkcję, rozszerzając funkcję testową i dostarczając dane wejściowe. Na przykład wprowadzenie 78 Berliner Str., Berlin, Germany E.U. i kliknięcie polecenia Uruchom test poprawnie zwraca wartość FALSE (Hide row).

    Przykładowy test funkcji filtra wierszowego ABAC.

  10. W parametrach funkcji Map:

    • Wybierz kolumny odpowiadające wybranym tagom.
    • Wyszukaj pii. Wybierz opcję pii : address.

    Przykładowe ustawienia polityki filtrów wierszowych ABAC dla sekcji parametrów funkcji Map.

  11. Kliknij pozycję Create policy (Utwórz zasady).

Krok 6. Testowanie zasad

Wróć do notesu i uruchom następujące polecenie:

SELECT DISTINCT * FROM abac.customers.profiles

Zwracane są tylko wiersze dotyczące rezydentów spoza UE.

First_Name Nazwisko Numer telefonu Adres numer ubezpieczenia społecznego (SSN)
Wdzięk Wilson 890-123-4567 852 Elm St, NV 890-12-3456
Alicja Johnson 345-678-9012 789 Pine St, TX 345-67-8901
Bluszcz Taylor 012-345-6789 159 Aspen St, AZ 012-34-5678
Frank Młynarz 789-012-3456 741 ul. Świerkowa, WA 789-01-2345
Jane Smith 234-567-8901 456 Oak St, CA 234-56-7890
John Łania 123-456-7890 123 Main St, NY 123-45-6789
Charlie Davis 567-890-1234 654 Cedar St, IL 567-89-0123
Emily Biała 678-901-2345 987 Birch St, WA 678-90-1234
Hank Moore 901-234-5678 963 Walnut ul., CO 901-23-4567
Robert Brązowy 456-789-0123 321 Maple St, FL 456-78-9012

Możesz nadal tworzyć zasady maski kolumn.

Krok 7: Utwórz funkcję zdefiniowaną przez użytkownika w celu maskowania numerów SSN

Dodaj następujące polecenie do notesu i uruchom je:

-- Masks any SSN input by returning a fully masked value
CREATE FUNCTION mask_ssn(ssn STRING)
RETURN '***-**-****' ;

Ta funkcja UDF zwraca w pełni ukryty ciąg SSN ('***-**-****').

Krok 8. Tworzenie zasad maski kolumn

Aby utworzyć politykę na obiekcie, musisz mieć MANAGE na obiekcie lub być jego właścicielem. Aby dodać UDF do polityki, musisz mieć EXECUTE w UDF i musi znajdować się w katalogu Unity.

  1. Kliknij ikonę Dane.Wykaz.

  2. Kliknij katalog abac utworzony wcześniej.

  3. Kliknij kartę Zasady .

  4. Kliknij pozycję Nowe zasady.

  5. W identyfikacji zasad:

    • W polu Nazwa wprowadź mask_ssn.
    • W polu Opis wprowadź opis zasad.
  6. W Typ zasad wybierz Maska kolumn.

  7. W głównych podmiotach i zakresie:

    • W polu Zastosowano do... wyszukaj i wybierz uczestników, do których mają zastosowanie zasady. W tym przykładzie możesz użyć grupy Wszyscy użytkownicy konta.
    • Pozostaw z wyjątkiem... puste.
    • Dla zakresu wybierz abac katalog i Wszystkie schematy.

    Przykładowe ustawienia zasad maskowania kolumn ABAC dla sekcji Principals i zakresu.

  8. W trybie Warunek wybierz tabele w zakresie, do którego odnosi się zasada. W tym przykładzie możesz wybrać Brak warunku , aby polityka dotyczyła wszystkich tabel.

  9. W warunkach kolumny:

    • Wybierz kolumny odpowiadające wybranym tagom.
    • Wyszukaj pii. Wybierz opcję pii : ssn.

    Przykład ustawień zasad maski kolumn ABAC dla sekcji warunków kolumn.

  10. W funkcji maskowania:

    • Kliknij ikonę funkcji.Wybierz funkcję.
    • W menu Wybierz funkcję kliknij katalog abac, schemat customers, a następnie funkcję, którą utworzyłeś wcześniej mask_ssn.
    • Kliknij opcję Wybierz.

    Przykład ustawienia zasad maski kolumn ABAC dla sekcji Funkcja maskowania.

    • Opcjonalnie możesz przetestować funkcję maskowania, rozwijając pozycję Funkcja Test i podając dane wejściowe. Na przykład wprowadzenie 901-234-5678 i kliknięcie polecenia Uruchom test poprawnie zwraca wartość ***-**-****.

    Przykładowy test funkcji maski kolumny ABAC.

  11. Kliknij pozycję Create policy (Utwórz zasady).

Krok 9. Testowanie zasad

Wróć do notesu i uruchom następujące polecenie:

SELECT * FROM abac.customers.profiles

Numery SSN są teraz zwracane jako ***-**-****. Zwracane są tylko osoby spoza UE, ponieważ polityka filtrowania wierszy jest również włączona.

First_Name Nazwisko Numer telefonu Adres numer ubezpieczenia społecznego (SSN)
Jane Smith 234-567-8901 456 Oak St, CA ***-**-****
Alicja Johnson 345-678-9012 789 Pine St, TX ***-**-****
Charlie Davis 567-890-1234 654 Cedar St, IL ***-**-****
Wdzięk Wilson 890-123-4567 852 Elm St, NV ***-**-****
Robert Brązowy 456-789-0123 321 Maple St, FL ***-**-****
Hank Moore 901-234-5678 963 Walnut ul., CO ***-**-****
Bluszcz Taylor 012-345-6789 159 Aspen St, AZ ***-**-****
Emily Biała 678-901-2345 987 Birch St, WA ***-**-****
Frank Młynarz 789-012-3456 741 ul. Świerkowa, WA ***-**-****
John Łania 123-456-7890 Main St 123, NY ***-**-****