Lernprogramm: Konfigurieren von ABAC mit SQL

In diesem Lernprogramm erfahren Sie, wie Sie ABAC-Richtlinien für Zeilenfilter und Spaltenmasken im Unity-Katalog mit SQL konfigurieren. Informationen zur UI-basierten Version des Katalog-Explorers finden Sie im Lernprogramm: Konfigurieren von ABAC.

In diesem Beispiel kann ein Analyseteam nicht auf EU-Kundendatensätze zugreifen, und SSNs sind immer maskiert. Kunden, die der Datenfreigabe zugestimmt haben, werden ihre vollständige E-Mail angezeigt. Andere sehen nur eine maskierte Version.

Dieses Lernprogramm enthält die folgenden Schritte:

  1. Erstellen von geregelten Tags
  2. Erstellen eines Unity-Katalogkatalogs, eines Schemas und einer Tabelle
  3. Anwenden geregelter Tags auf Spalten
  4. Erstellen einer UDF zum Erkennen von EU-Adressen
  5. Erstellen einer Zeilenfilterrichtlinie
  6. Testen des Zeilenfilters
  7. Erstellen einer UDF zum Maskieren von SSNs
  8. Erstellen einer Spaltenmaskenrichtlinie
  9. Testen der Spaltenmaske

Nach Abschluss dieser Schritte können Sie das Lernprogramm optional mit bedingter E-Mail-Maskierung erweitern (Schritte 10–12).

Voraussetzungen

  • Databricks Runtime 16.4 oder höher oder serverloses Computing.
  • Kontoadministrator- oder Arbeitsbereichsadministratorberechtigungen (zum Erstellen von geregelten Tags).
  • MANAGE Berechtigung für den Zielkatalog oder das Zielschema.
  • EXECUTE auf den UDFs.

Die Berechnung älterer Runtimes kann nicht auf tabellen zugreifen, die durch ABAC gesichert sind.

Schritt 1: Erstellen von gesteuerten Tags

Gesteuerte Tags sind Schlüssel-Wert-Paare, die auf Kontoebene definiert sind. ABAC-Richtlinien verwenden sie, um zu ermitteln, welche Spalten gefiltert oder maskiert werden sollen. In diesem Tutorial erstellen Sie zwei verwaltete Tags:

  • Ein pii Tag mit drei zulässigen Werten: ssn, address, und email
  • Ein schlüsselgeschütztes consent Tag (keine zulässigen Werte), um Zustimmungsspalten zu identifizieren

Um ein geregeltes Tag zu erstellen, müssen Sie über die CREATE-Berechtigung für das geregelte Tag auf der Kontoebene verfügen. Konto- und Arbeitsbereichsadministratoren verfügen standardmäßig über CREATE.

  1. Klicken Sie im Azure Databricks-Arbeitsbereich auf das Datensymbol.Katalog.
  2. Klicken Sie auf das Symbol Steuern-Schaltfläche.
  3. Klicken Sie im Dropdownmenü auf "Governed Tags".
  4. Klicken Sie auf " Gesteuertes Tag erstellen".
  5. Geben Sie pii für den Tagschlüssel ein.
  6. Geben Sie eine Beschreibung für das geregelte Tag ein.
  7. Geben Sie für zulässige Werte Folgendes ein: ssn, address, und email. Nur diese Werte können diesem Tagschlüssel zugewiesen werden.
  8. Klicken Sie auf Erstellen.
  9. Wiederholen Sie die Schritte 4 bis 8, um ein zweites geregeltes Tag mit dem Schlüssel consentzu erstellen. Lassen Sie die zulässigen Werte leer (nur Schlüssel-only-Tag).

Warnung

Tagdaten werden als Nur-Text gespeichert und können global repliziert werden. Verwenden Sie keine Tagnamen, Werte oder Deskriptoren, die die Sicherheit Ihrer Ressourcen gefährden könnten. Verwenden Sie beispielsweise keine Tagnamen, Werte oder Deskriptoren, die persönliche oder vertrauliche Informationen enthalten.

Schritt 2: Erstellen der Kundentabelle

Erstellen Sie einen Katalog, ein Schema und eine Tabelle mit Kundenprofilen. Die has_consent Spalte wird später für die bedingte E-Mail-Maskierung verwendet. Kunden, die ihre Zustimmung erteilt haben (TRUE) haben ihre vollständige E-Mail angezeigt.

Führen Sie die folgenden Befehle in einem mit dem Compute verbundenen Notizbuch unter Databricks Runtime 16.4 oder höher aus.

-- Create catalog (if not already exists)
CREATE CATALOG IF NOT EXISTS abac_tutorial;
USE CATALOG abac_tutorial;

-- Create schema
CREATE SCHEMA IF NOT EXISTS customers;
USE SCHEMA customers;
CREATE OR REPLACE TABLE profiles (
    first_name STRING,
    last_name STRING,
    email STRING,
    phone_number STRING,
    home_address STRING,
    ssn_number STRING,
    has_consent BOOLEAN
);
INSERT INTO profiles (first_name, last_name, email, phone_number, home_address, ssn_number, has_consent)
VALUES
('John', 'Doe', 'john.doe@example.com', '123-456-7890', '123 Main St, NY', '123-45-6789', TRUE),
('Jane', 'Smith', 'jane.smith@example.com', '234-567-8901', '456 Oak St, CA', '234-56-7890', FALSE),
('Alice', 'Johnson', 'alice.j@example.com', '345-678-9012', '789 Pine St, TX', '345-67-8901', TRUE),
('Bob', 'Brown', 'bob.brown@example.com', '456-789-0123', '321 Maple St, FL', '456-78-9012', FALSE),
('Charlie', 'Davis', 'charlie.d@example.com', '567-890-1234', '654 Cedar St, IL', '567-89-0123', TRUE),
('Emily', 'White', 'emily.w@example.com', '678-901-2345', '987 Birch St, WA', '678-90-1234', FALSE),
('Frank', 'Miller', 'frank.m@example.com', '789-012-3456', '741 Spruce St, WA', '789-01-2345', TRUE),
('Grace', 'Wilson', 'grace.w@example.com', '890-123-4567', '852 Elm St, NV', '890-12-3456', TRUE),
('Hank', 'Moore', 'hank.moore@example.com', '901-234-5678', '963 Walnut St, CO', '901-23-4567', FALSE),
('Ivy', 'Taylor', 'ivy.taylor@example.com', '012-345-6789', '159 Aspen St, AZ', '012-34-5678', TRUE),
('Liam', 'Connor', 'liam.c@example.com', '111-222-3333', '12 Abbey Street, Dublin, Ireland EU', '111-22-3333', TRUE),
('Sophie', 'Dubois', 'sophie.d@example.com', '222-333-4444', '45 Rue de Rivoli, Paris, France Europe', '222-33-4444', FALSE),
('Hans', 'Müller', 'hans.m@example.com', '333-444-5555', '78 Berliner Str., Berlin, Germany E.U.', '333-44-5555', TRUE),
('Elena', 'Rossi', 'elena.r@example.com', '444-555-6666', '23 Via Roma, Milan, Italy Europe', '444-55-6666', FALSE),
('Johan', 'Andersson', 'johan.a@example.com', '555-666-7777', '56 Drottninggatan, Stockholm, Sweden EU', '555-66-7777', TRUE);

Schritt 3: Hinzufügen geregelter Tags zu Spalten

Markieren Sie die ssn_number, home_addressund email Spalten mit dem pii gesteuerten Tag. ABAC-Richtlinien ordnen Spalten anhand von Tags und nicht nach Namen zu.

Die has_consent Spalte wird mit dem consent governed-Tag markiert. Dies ist für die datenschutzbewusste Maskierungsrichtlinie in Schritt 11 erforderlich, wobei has_consent über USING COLUMNS an die UDF übergeben wird.

ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN ssn_number
SET TAGS ('pii' = 'ssn');

ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN home_address
SET TAGS ('pii' = 'address');

ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN email
SET TAGS ('pii' = 'email');

ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN has_consent
SET TAGS ('consent' = '');

Schritt 4: Erstellen einer UDF zum Erkennen von EU-Adressen

Der Wert jeder markierten pii = address Spalte wird in diese UDF übergeben und gibt Folgendes zurück:

  • FALSE wenn die Adresse EU, E.U. oder Europe enthält, wird die Zeile ausgeblendet.
  • TRUE andernfalls wird die Zeile angezeigt.
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
);

Note

Dies ist eine vereinfachte Überprüfung für Demonstrationszwecke. Verwenden Sie in der Produktion eine robustere Methode, z. B. eine Ländercodespalte oder eine Nachschlagetabelle, um die Region zu bestimmen.

Schritt 5: Erstellen einer Zeilenfilterrichtlinie

Zum Erstellen einer Richtlinie müssen Sie über das Objekt oder den Besitz des Objekts verfügen MANAGE . Um einer Richtlinie eine UDF hinzuzufügen, müssen Sie EXECUTE auf der UDF besitzen.

CREATE POLICY hide_eu_customers
ON SCHEMA abac_tutorial.customers
ROW FILTER is_not_eu_address
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'address') AS addr_col
USING COLUMNS (addr_col);

Sie können Richtlinien auch über die Katalog-Explorer-Benutzeroberfläche erstellen. Ausführliche Informationen finden Sie unter Erstellen und Verwalten von Zeilenfilter- und Spaltenformatrichtlinien .

Schritt 6: Testen des Zeilenfilters

Führen Sie die folgende Abfrage aus, um zu überprüfen, ob die Zeilenfilterrichtlinie funktioniert.

SELECT * FROM abac_tutorial.customers.profiles;

Nur die 10 Zeilen mit Nicht EU-Ansässigen werden zurückgegeben. Die fünf EU-Kunden (Liam, Sophie, Hans, Elena und Johan) sind verborgen.

Schritt 7: Erstellen einer UDF zum Maskieren von SSNs

Diese UDF gibt einen vollständig redigierten Platzhalter für jeden SSN-Wert zurück, der an ihn übergeben wird.

CREATE OR REPLACE FUNCTION redact_ssn(ssn STRING)
RETURNS STRING
RETURN '***-**-****';

Schritt 8: Erstellen einer Spaltenmaskierungsrichtlinie

Erstellen Sie eine Richtlinie, die auf alle Spalten ausgerichtet ist, die markiert sind pii = ssn , und wendet die redact_ssn Funktion auf die einzelnen Spalten an.

CREATE POLICY redact_ssn_policy
ON SCHEMA abac_tutorial.customers
COLUMN MASK redact_ssn
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'ssn') AS ssn_col
ON COLUMN ssn_col;

Schritt 9: Testen der Spaltenmaske

Führen Sie die folgende Abfrage aus, um sicherzustellen, dass sowohl der Zeilenfilter als auch die Spaltenmaske aktiv sind.

SELECT * FROM abac_tutorial.customers.profiles;

SSNs werden jetzt als ***-**-****zurückgegeben. Nur Nicht-EU-Einwohner werden zurückgegeben, da der Zeilenfilter ebenfalls aktiv ist.

Erweitern: Bedingte E-Mail-Maskierung

Mit den folgenden Schritten wird das Tutorial um die zustimmungs-bewusste E-Mail-Maskierung erweitert. Kunden, die sich angemeldet haben (has_consent = TRUE) haben ihre vollständige E-Mail angezeigt, andere sehen nur das erste Zeichen und die erste Domäne.

Diese UDF akzeptiert zwei Argumente:

  • email: der tatsächliche E-Mail-Wert aus der übereinstimmenen Spalte
  • consent: der Wert der has_consent Spalte in derselben Zeile
CREATE OR REPLACE FUNCTION mask_email_by_consent(email STRING, consent BOOLEAN)
RETURNS STRING
RETURN CASE
  WHEN consent = TRUE THEN email
  ELSE CONCAT(LEFT(email, 1), '***@', SUBSTRING_INDEX(email, '@', -1))
END;

Schritt 11: Erstellen der Richtlinie für die bedingte E-Mail-Maskierung

Diese Richtlinie zielt auf die Spalten pii = email ab und übergibt die Spalte has_consent an die UDF.

Note

Die has_consent Spalte wurde mit dem consent verwalteten Tag in Schritt 3 markiert. Dies ist erforderlich, da USING COLUMNS nur Spalten referenziert werden können, die über MATCH COLUMNS. Auch wenn has_consent nicht maskiert wird, muss es markiert werden, damit die Richtlinie seinen Wert an die UDF übergeben kann.

CREATE POLICY mask_email_by_consent_policy
ON SCHEMA abac_tutorial.customers
COLUMN MASK mask_email_by_consent
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'email') AS email_col,
  has_tag('consent') AS consent_col
ON COLUMN email_col
USING COLUMNS (consent_col);

Schritt 12: Testen der bedingten E-Mail-Maskierung

Führen Sie die folgende Abfrage aus, um zu überprüfen, ob alle drei Richtlinien zusammenarbeiten.

SELECT * FROM abac_tutorial.customers.profiles;

Kunden mit has_consent = TRUE wird ihre vollständige E-Mail angezeigt. Kunden mit has_consent = FALSE sehen eine maskierte Version. SSNs bleiben vollständig maskiert, und nur Nicht-EU-Kunden werden zurückgegeben.

Vorname hat_zustimmung E-Mail Sozialversicherungsnummer
John WAHR john.doe@example.com ***-**-****
Jane FALSCH j***@example.com ***-**-****
Alina WAHR alice.j@example.com ***-**-****
Bob FALSCH b***@example.com ***-**-****
Charlie WAHR charlie.d@example.com ***-**-****
Emily FALSCH e***@example.com ***-**-****
Frank WAHR frank.m@example.com ***-**-****
Grace WAHR grace.w@example.com ***-**-****
Hank FALSCH h***@example.com ***-**-****
Ivy WAHR ivy.taylor@example.com ***-**-****

Zusammenfassung

In diesem Lernprogramm wurden drei ABAC-Muster veranschaulicht:

  • Zeilenfilterung: Ausblenden von Zeilen auf der Grundlage von Spaltenwerten, die mit den gesteuerten Tags übereinstimmen
  • Spaltenmaskierung: Maskieren von Spalten, die mit geregelten Tags übereinstimmen
  • Bedingte Maskierung: Maskieren Sie eine Spalte basierend auf dem Wert einer anderen Spalte in derselben Zeile, indem Sie die Kontextspalte markieren und sie an die UDF übergeben. USING COLUMNS

Aufräumen

Führen Sie das folgende aus, um alle in diesem Tutorial erstellten Objekte zu entfernen. Wenn Sie die Schritte zur bedingten E-Mail-Maskierung übersprungen haben, schlagen die DROP POLICY mask_email_by_consent_policy Anweisungen DROP FUNCTION mask_email_by_consent fehl, was zu erwarten ist.

DROP POLICY hide_eu_customers ON SCHEMA abac_tutorial.customers;
DROP POLICY redact_ssn_policy ON SCHEMA abac_tutorial.customers;
DROP POLICY mask_email_by_consent_policy ON SCHEMA abac_tutorial.customers;
DROP FUNCTION IF EXISTS abac_tutorial.customers.is_not_eu_address;
DROP FUNCTION IF EXISTS abac_tutorial.customers.redact_ssn;
DROP FUNCTION IF EXISTS abac_tutorial.customers.mask_email_by_consent;
DROP TABLE IF EXISTS abac_tutorial.customers.profiles;
DROP SCHEMA IF EXISTS abac_tutorial.customers CASCADE;

Verwenden Sie die Benutzeroberfläche des Katalog-Explorers, um die durch pii und consent gesteuerten Tags zu entfernen.