Erstellen und Verwalten von ABAC-Richtlinien

Auf dieser Seite wird beschrieben, wie Sie ABAC-Richtlinien im Unity-Katalog erstellen, bearbeiten, anzeigen und löschen. Eine Übersicht über Richtlinienkonzepte finden Sie unter "Kernkonzepte für ABAC".

Anforderungen

Alle Richtlinienvorgänge (Erstellen, Bearbeiten, Löschen, Anzeigen, Beschreiben) erfordern MANAGE Zugriff auf das sicherbare Objekt oder den Objektbesitz. Das Erstellen einer Richtlinie erfordert außerdem Folgendes:

  • Databricks Runtime 16.4 oder höher oder serverloses Computing. Siehe Computeanforderungen.
  • Für die Filter- oder Maskierungslogik können Sie entweder eine benutzerdefinierte Funktion (UDF) im Unity-Katalog verwenden, die Sie EXECUTE aktiviert haben, oder eine SQL-Funktion, die Sie beim Erstellen der Richtlinie inline definieren.
  • Gesteuerte Tags, die auf Zielobjekte angewendet werden. Siehe "Geregelte Tags".

Erstellen einer Richtlinie

Sie können eine Richtlinie mithilfe der Katalog-Explorer-Benutzeroberfläche, der CREATE POLICY SQL-Anweisung oder der Azure Databricks REST-APIs, SDKs und Terraform erstellen.

Um eine Richtlinie zu erstellen, müssen Sie MANAGE über das sicherungsfähige Objekt verfügen, an das die Richtlinie angefügt ist (Katalog, Schema oder Tabelle), oder das Sicherungsobjekt besitzen, und EXECUTE an der UDF, die die Filter- oder Maskierungslogik implementiert.

Katalog-Explorer

  1. Klicken Sie in Ihrem Azure Databricks Arbeitsbereich auf Datensymbol.Catalog.

  2. Wählen Sie das Objekt aus, das den Richtlinienbereich bestimmt, z. B. einen Katalog, ein Schema oder eine Tabelle.

  3. Klicken Sie auf die Registerkarte Richtlinien.

  4. Klicken Sie auf Neue Richtlinie.

  5. Füllen Sie den Abschnitt "Richtlinienidentifikation " aus. In der folgenden Tabelle sind die einzelnen Felder zusammengefasst:

    Feld Description Beispiel
    Name Ein Name für die Richtlinie. Muss unter allen Richtlinien eindeutig sein, die auf demselben sicherbarem Element definiert sind. hide_eu_customers, mask_ssn
    Beschreibung Wahlfrei. Eine Beschreibung für die Richtlinie. Wird in Überwachungsprotokollen angezeigt und hilft Administratoren, richtlinienabsichten zu verstehen. Restrict EU customer rows from US analysts, Mask SSN for all account users
  6. Füllen Sie den Abschnitt "Prinzipale und Bereich" aus . In der folgenden Tabelle sind die einzelnen Felder zusammengefasst:

    Feld Description Beispiel
    Angewendet auf... Die Benutzer, Gruppen oder Dienstprinzipale, die der Richtlinie unterliegen. Wenn diese Principals Tabellen innerhalb des Geltungsbereichs abfragen, wird der Zeilenfilter oder die Spaltenmaske angewendet. Um die Richtlinie auf alle Prinzipale im Konto anzuwenden, wählen Sie All account users. us_analysts, All account users
    Außer für Leitungspersonen sind von der Richtlinie befreit. Ausgenommene Personen unterliegen nicht dem Filtern oder Maskieren und sehen die vollständigen, unveränderten Daten. admins, compliance_team
    Umfang Die sicherungsfähige Stelle, an der die Richtlinie angefügt ist. Die Richtlinie wird für alle Tabellen innerhalb des ausgewählten Bereichs ausgewertet. Wählen Sie einen Katalog, ein Schema oder eine Tabelle aus. Azure Databricks empfiehlt das Anfügen von Richtlinien auf der höchsten anwendbaren Ebene. Wählen Sie "Katalog prod" und dann "Schema customers" aus.
    Tabellenzustand Bestimmt, auf welche Tabellen innerhalb des Bereichs die Richtlinie angewendet wird. Keine Bedingung: Wendet die Richtlinie auf alle Tabellen im Bereich an. Tabellen, die einem dieser Tags entsprechen: Wendet die Richtlinie auf die angegebene Liste von Tagschlüsseln oder Tagschlüssel-Wert-Paaren an. Tabellen mit einer dieser Übereinstimmungen entsprechen der Richtlinie. Tabellen, die einem benutzerdefinierten Ausdruck entsprechen: Sie können einen booleschen Ausdruck mit has_taghas_tag_valueund , kombiniert mit AND, ORund NOT für komplexere Abgleichslogik erstellen. Wendet die Richtlinie auf Tabellen an, in denen der Ausdruck zu TRUE ausgewertet wird und mit der Richtlinie übereinstimmt. Wenn eine Tabelle im Geltungsbereich nicht die Bedingung erfüllt, gilt die Richtlinie nicht für diese Tabelle. Wählen Sie "Tabellen" aus, die einem dieser Tags entsprechen, und wählen Sie dann den Tagschlüssel sensitivity mit dem Wert high aus, um die Richtlinie nur auf vertrauliche Tabellen einzuschränken.

    Beispielhafte ABAC-Richtlinieneinstellungen für den Abschnitt

  7. Wählen Sie für den Richtlinientyp den Typ der Zugriffssteuerung aus, um Folgendes zu erzwingen:

    Auswahl Description Verwenden Sie, wenn
    Zeilenfilter Erstellt eine Zeilenfilterrichtlinie. Die UDF wertet jede Zeile aus und gibt einen booleschen Wert zurück. Zeilen, bei denen die UDF FALSE zurückgibt, werden aus den Abfrageergebnissen ausgeschlossen. Der Zugriff hängt von den Werten in jeder Zeile ab, z. B. durch Filtern nach den Werten in einer Spalte, die geografische Regionen enthält.
    Spaltenmaske Erstellt eine Spaltenmaskenrichtlinie. Die UDF verwendet den Spaltenwert als Eingabe und gibt die ursprüngliche oder maskierte Version zurück. Der Rückgabetyp muss in den Datentyp der Zielspalte konvertierbar sein. Sie müssen vertrauliche Felder, wie z. B. Sozialversicherungsnummern, Telefonnummern oder E-Mail-Adressen, schwärzen, während Sie weiterhin ermöglichen, dass die Hauptperson die Tabelle abfragen kann.
  8. Die nächsten Abschnitte hängen von Ihrer Richtlinientyp-Auswahl ab. Erweitern Sie den Abschnitt, der Ihrer Auswahl entspricht:

    Zeilenfilter

    Wählen Sie im Abschnitt " Zeilenfilterfunktion " aus, wie die Zeilenfilterfunktion angegeben werden soll:

    • Vorhandene auswählen: Wählen Sie eine UDF aus, die bereits im Unity-Katalog definiert ist. Die UDF wertet jede Zeile aus und gibt einen booleschen Wert zurück. Zeilen, bei denen die Funktion FALSE zurückgibt, werden von den Abfrageergebnissen ausgeschlossen. Sie müssen EXECUTE auf der UDF haben.
    • Create: Definieren Sie eine SQL-Funktion zur Verwendung als Zeilenfilterlogik.

    Beispiel für ABAC-Zeilenfilterrichtlinieneinstellungen für den Abschnitt

    Geben Sie im Abschnitt "Funktionseingaben " einen Wert für jeden Funktionsparameter an. Jede Eingabe kann eine Spalte sein, die mit Tags übereinstimmt, eine Spalte, die mit einem benutzerdefinierten Ausdruck übereinstimmt, oder ein konstanter Wert.

    Beispiel-ABAC-Einstellungen für den Abschnitt

    Spaltenformat

    Wählen Sie im Abschnitt "Spaltenbedingungen " aus, wie die zu maskierenden Spalten identifiziert werden sollen:

    • Spalten, die einem dieser Tags entsprechen: Geben Sie eine Liste von Tagschlüsseln oder Tagschlüssel-Wert-Paaren an. Spalten, die eine dieser Eigenschaften aufweisen, werden von der Richtlinie maskiert.
    • Spalten, die einem benutzerdefinierten Ausdruck entsprechen: Erstellen Sie einen booleschen Ausdruck mithilfe has_tag und has_tag_valuekombiniert mit AND, ORund NOT für komplexere Abgleichslogik. Spalten, in denen der Ausdruck zu TRUE ausgewertet wird, werden maskiert.

    Beispiel für ABAC-Spaltenmaskenrichtlinieneinstellungen für den Abschnitt „Spaltenbedingungen“.

    Wählen Sie dann die Maskierungsfunktion aus, die auf die übereinstimmenden Spalten angewendet werden soll:

    • Vorhandene auswählen: Wählen Sie eine bereits im Unity-Katalog definierte UDF aus. Die UDF gibt den ursprünglichen oder maskierten Wert zurück. Der Rückgabetyp muss in den Datentyp der Zielspalte konvertierbar sein. Sie müssen EXECUTE in der UDF haben.
    • Create: Definieren Sie eine SQL-Funktion, die als Logik für die Spaltenmaskierung verwendet werden soll.

    Beispiel für ABAC-Spaltenmaskierungsrichtlinieneinstellungen im Abschnitt

    Geben Sie im Abschnitt "Funktionseingaben " einen Wert für jeden zusätzlichen Funktionsparameter an. Jede Eingabe kann eine Spalte sein, die mit Tags übereinstimmt, eine Spalte, die mit einem benutzerdefinierten Ausdruck übereinstimmt, oder ein konstanter Wert.

    In diesem Beispiel wird ein konstanter Wert von 4 verwendet, um die letzten 4 Ziffern der Sozialversicherungsnummer anzuzeigen.

    Beispiel für ABAC-Spaltenmaskenrichtlinieneinstellungen für den Abschnitt

  9. Klicken Sie auf Create policy.

SQL

Eine vollständige Dokumentation finden Sie unter 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 }

Zeilenfilterkörper:

ROW FILTER function_name
TO principal [, ...]
[EXCEPT principal [, ...]]
FOR TABLES
[WHEN condition]
[MATCH COLUMNS condition [[AS] alias] [, ...]]
[USING COLUMNS (function_arg [, ...])]

Spaltenmaskenkörper

COLUMN MASK function_name
TO principal [, ...]
[EXCEPT principal [, ...]]
FOR TABLES
[WHEN condition]
[MATCH COLUMNS condition [[AS] alias] [, ...]]
ON COLUMN alias
[USING COLUMNS (function_arg [, ...])]

Parameters:

  • policy_name: Ein Name für die Richtlinie. Muss unter allen Richtlinien eindeutig sein, die auf demselben sicherbarem Element definiert sind.
  • ON { CATALOG | SCHEMA | TABLE }: Der Bereich, in dem die Richtlinie anwendet wird. Die Richtlinie wird für alle Tabellen ausgewertet, die untergeordnete Elemente dieser sicherungsfähigen Daten sind.
  • function_name: Der vollqualifizierte Name der UDF, die die Filter- oder Maskierungslogik implementiert.
  • TO principal [, ...]: Die Benutzer, Gruppen oder Dienstprinzipale, für die die Richtlinie gilt.
  • EXCEPT principal [, ...]: Verantwortliche, die von der Richtlinie ausgenommen sind. Hauptverantwortliche, die ausgenommen sind, unterliegen nicht Filtern oder Maskieren.
  • FOR TABLES: Gibt an, dass die Richtlinie auf Tabellen abzielt. Tabellen sind derzeit der einzige unterstützte sichere Typ, einschließlich Streaming-Tabellen und materialisierter Ansichten.
  • WHEN condition: Ein boolescher Ausdruck, der bestimmt, für welche Tabellen die Richtlinie gilt, basierend auf ihren Tags. Verwendet integrierte Funktionen has_tag('tag_name') und has_tag_value('tag_name', 'tag_value'). Wenn dieser Wert nicht angegeben wird, wird standardmäßig TRUE festgelegt (gilt für alle Tabellen im Bereich).
  • MATCH COLUMNS condition [[AS] alias] [, ...]: Spaltenbedingungen, die angeben, auf welche Spalten sich die Richtlinie bezieht. Jede Bedingung ist ein boolescher Ausdruck, der aus has_tag('tag_name') und has_tag_value('tag_name', 'tag_value'), optional kombiniert mit AND, OR, und NOT. Jede Bedingung kann ein Alias für die Verwendung in ON COLUMN und USING COLUMNS erhalten. Eine Richtlinie kann bis zu 3 MATCH COLUMNS Ausdrücke enthalten, und alle müssen übereinstimmen, damit die Richtlinie angewendet wird.
  • ON COLUMN alias: Gibt für Spaltenmaskenrichtlinien die übereinstimmende Spalte an, die über ihren Alias von MATCH COLUMNS maskiert werden soll.
  • USING COLUMNS (function_arg [, ...]): Argumente, die an die UDF übergeben werden. Jedes Argument kann ein Alias aus MATCH COLUMNS oder ein konstantes Literal sein.

Beispiel: Spaltenmaskierungsrichtlinie. Maskieren Sie alle Spalten im prod.customers-Schema, die mit pii:ssn gekennzeichnet sind, wobei nur die letzten 4 Zeichen angezeigt werden. Die Richtlinie gilt für us_analysts, außer 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);

Beispiel: Zeilenfilterrichtlinie. Schließen Sie Zeilen mit europäischen Kunden aus Tabellen, die mit sensitivity:high im prod.customers Schema markiert wurden, aus. Die Richtlinie gilt für us_analysts und filtert Zeilen basierend auf einer geo_region-Spalte.

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

Python SDK

Eine vollständige Dokumentation finden Sie im Databricks SDK für Python Dokumentation.

In diesem Beispiel wird eine Zeilenfilterrichtlinie erstellt, die Zeilen mit europäischen Kunden für US-basierte Analysten ausschließt:

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")],
    ),
))

In diesem Beispiel wird eine Spaltenmaskenrichtlinie erstellt, die Sozialversicherungsnummern von US-Analysten maskiert, außer für diejenigen in der admins Gruppe.

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")],
    ),
))

Bearbeiten einer Richtlinie

Katalog-Explorer

  1. Klicken Sie in Ihrem Azure Databricks Arbeitsbereich auf Datensymbol.Catalog.
  2. Wählen Sie das Objekt aus, an das die Richtlinie angefügt ist.
  3. Klicken Sie auf die Registerkarte Richtlinien.
  4. Wählen Sie die Richtlinie aus, die Sie bearbeiten möchten.
  5. Aktualisieren Sie alle Felder, die Sie ändern möchten. Sie können die Beschreibung, Prinzipale, Richtlinientyp, Bedingungen und Funktionseingabezuordnungen ändern. Der Richtlinienname und das sicherungsfähige Objekt, auf das die Richtlinie angewendet wird, kann nicht bearbeitet werden. Feldbeschreibungen finden Sie unter Erstellen einer Richtlinie.
  6. Wähle Richtlinie aktualisieren aus.

SQL

CREATE OR REPLACE POLICY ersetzt die gesamte Richtliniendefinition. Geben Sie alle Klauseln an, nicht nur die Felder, die Sie ändern möchten. Die Ersetzungsrichtlinie muss denselben Namen haben und sich auf demselben sicherbaren Objekt befinden.

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

Python SDK

Anders als CREATE OR REPLACE POLICY in SQL unterstützt update_policy es partielle Updates. Verwenden Sie den update_mask Parameter, um anzugeben, welche Felder geändert werden sollen. Nur diese Felder werden aktualisiert. Wenn update_mask entweder "*" oder leer ist, werden alle Felder in policy_info angewendet.

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",
)

Löschen einer Richtlinie

Katalog-Explorer

  1. Klicken Sie in Ihrem Azure Databricks Arbeitsbereich auf Datensymbol.Catalog.
  2. Wählen Sie das Objekt aus, an das die Richtlinie angefügt ist.
  3. Klicken Sie auf die Registerkarte Richtlinien.
  4. Wählen Sie die Richtlinie aus.
  5. Klicken Sie auf "Richtlinie löschen".

SQL

Verwenden Sie DROP POLICY, um eine Richtlinie zu löschen.

DROP POLICY policy_name ON { CATALOG | SCHEMA | TABLE } securable_name

Beispiele:

DROP POLICY mask_ssn ON SCHEMA prod.customers;
DROP POLICY hide_eu_customers ON SCHEMA prod.customers;

Python SDK

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

w.policies.delete_policy(
    on_securable_type="SCHEMA",
    on_securable_fullname="prod.customers",
    name="mask_ssn",
)

Richtlinien anzeigen

Dient SHOW POLICIES zum Auflisten der richtlinien, die für ein sicherungsfähiges Element definiert sind. Verwenden Sie SHOW EFFECTIVE POLICIES, um auch Richtlinien aus übergeordneten Bereichen einzuschließen, wie z.B. Katalogrichtlinien, die sich auf eine Tabelle auswirken.

SHOW [EFFECTIVE] POLICIES ON { CATALOG | SCHEMA | TABLE } securable_name

Das Ergebnis umfasst Den Richtliniennamen, den Richtlinientyp und den Katalog, das Schema oder die Tabelle, in der jede Richtlinie definiert ist.

Das Anzeigen effektiver Richtlinien für eine Tabelle erfordert keine Berechtigungen für den übergeordneten Katalog oder das übergeordnete Schema. Dadurch kann ein Tabellenadministrator die Regeln anzeigen, die gelten, ohne lesezugriff auf die Richtlinien von gleichgeordneten Tabellen zu haben.

Beispiel:

SHOW EFFECTIVE POLICIES ON SCHEMA prod.customers;
Richtlinienname Richtlinienart catalog schema Kommentar
eu_kunden_verbergen ROW FILTER prod Debitoren
mask_ssn COLUMN MASKE prod Debitoren

Beschreiben einer Richtlinie

Verwenden Sie DESCRIBE POLICY, um die Details einer bestimmten Richtlinie anzuzeigen. Erfordert MANAGE den Sicherungs- oder Objektbesitz des Ziels.

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

Das Ergebnis zeigt die Eigenschaften der Richtlinie als Schlüsselwertpaare an, einschließlich Name, sicherungsfähiger Typ, sicherungsfähiger Name, Prinzipale, Bedingungen, Funktionsname und Zeitstempel.

Beispiel:

DESCRIBE POLICY hide_eu_customers ON SCHEMA prod.customers;
info_name info_value
Name eu_kunden_verbergen
Auf sicherbarem Typ SCHEMA
Auf Sicherungsfähigkeiten prod.customers
An Schulleitungen us_analysts
Für sicherbaren Typ TABLE
Spalten abgleichen has_tag('geo_region') AS-Region
Richtlinientyp ZEILENFILTER
Funktionsname prod.kunden.nicht_eu_region
Verwenden von Spalten region

Überwachungsprotokollierung

Azure Databricks protokolliert Vorgänge zu verwalteten Tags und ABAC-Richtlinien in der Prüfprotokollsystemtabelle. Nachfolgend finden Sie Beispielabfragen. Weitere Informationen finden Sie unter Überwachungsprotokolle.

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

Weitere Informationen