Freigeben über


Erstellen und Verwalten von Attributbasierten Zugriffssteuerungsrichtlinien (ABAC)

Von Bedeutung

Dieses Feature befindet sich in der Public Preview.

Auf dieser Seite wird beschrieben, wie Sie Zeilenfilter- und Spaltenformatrichtlinien im Unity-Katalog konfigurieren. Weitere Informationen zur attributbasierten Zugriffssteuerung (ABAC) und Richtlinien finden Sie unter "Unity Catalog"-attributbasierte Zugriffssteuerung (ABAC). Informationen zum Anwenden von Tags auf Objekte finden Sie unter "Governed tags " und "Apply tags to Unity Catalog securable objects".

Computeanforderungen

Um ABAC-Richtlinien zu verwenden, müssen Sie eine der folgenden Computekonfigurationen verwenden:

Standardmäßige und dedizierte Rechenknoten, die ältere Runtime-Versionen ausführen, können nicht auf Tabellen zugreifen, die durch ABAC geschützt sind. Als temporäre Problemumgehung können Sie ABAC so konfigurieren, dass sie nur auf eine bestimmte Gruppe angewendet wird. Fügen Sie die Benutzer hinzu, die Sie auf diese Gruppe beschränken möchten. Benutzer, die sich nicht in der Gruppe befinden, können weiterhin auf die Tabellen zugreifen.

Richtlinienkontingente

Im Folgenden werden die Anzahl der ABAC-Richtlinien aufgeführt, die Sie für verschiedene sicherungsfähige Objekte erstellen können:

  • Katalog: 10 Richtlinien pro Katalog
  • Schema: 10 Richtlinien pro Schema
  • Tabelle: 5 Richtlinien pro Tabelle

Erstellen einer Richtlinie für ein Objekt

Um eine Zeilenfilter- oder Spaltenformatrichtlinie zu erstellen, müssen Sie folgendes haben:

  • Eine vorhandene benutzerdefinierte Funktion (UDF) im Unity Catalog, für die Sie die EXECUTE Berechtigung haben, die die Logik zur Zeilenfilterung oder Spaltenmaskierung implementiert, die Sie durchsetzen möchten.
    Bewährte Methoden, Einschränkungen und Beispiel-UDFs finden Sie unter UDFs für bewährte Methoden für ABAC-Richtlinien.
  • MANAGE für das Objekt oder den Besitz des Objekts.

Computeanforderungen

  • Sie müssen Rechenressourcen auf Databricks Runtime 16.4 oder höher oder serverlose Rechenressourcen verwenden.

Die Berechnung älterer Runtimes kann nicht auf tabellen zugreifen, die durch ABAC gesichert sind. Als temporäre Problemumgehung können Sie ABAC so konfigurieren, dass sie nur auf eine bestimmte Gruppe angewendet wird. Fügen Sie die Benutzer hinzu, die Sie auf diese Gruppe beschränken möchten. Benutzer, die sich nicht in der Gruppe befinden, können weiterhin auf die Tabellen zugreifen.

Katalog-Explorer

  1. Klicken Sie im Azure Databricks-Arbeitsbereich auf das Datensymbol.Katalog.

  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. Im Allgemeinen:

    • Geben Sie unter "Name" einen Namen für Ihre Richtlinie ein.
    • Geben Sie eine Beschreibung für das Feld Description Ihrer Richtlinie ein.
    • Suchen und wählen Sie die Prinzipale aus, auf die die Richtlinie angewendet wird, für Angewendet auf....
    • Fügen Sie mit Ausnahme von ...alle Prinzipale hinzu, die Sie aus der Richtlinie ausschließen möchten.
    • Wählen Sie für "Bereich" den Katalog, die Schemas und Tabellen aus, auf die die Richtlinie angewendet werden soll.

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

  6. Wählen Sie für "Zweck" aus, ob Sie Spalten maskieren oder Zeilen ausblenden möchten.

  7. Konfigurieren Sie in den Abschnitten Bedingungen und Funktionsparametern , wie die Richtlinie Spalten maskieren oder Zeilen ausblenden soll. Dazu geben Sie eine Maskierungsfunktion zusammen mit den Bedingungen an, unter denen die Funktion angewendet werden soll.

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

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

  8. Klicken Sie auf Create policy.

SQL

Im Folgenden sehen Sie die allgemeine Syntax zum Erstellen einer Richtlinie:

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>, ...];

Wenn Sie BedingungenMATCH COLUMNS auf Tabellenebene () definieren, gilt die Richtlinie nur dann für die Tabelle, wenn jede Bedingung mindestens einer Spalte entspricht. Wenn eine Bedingung keiner Spalte in der Tabelle entspricht, gilt die Richtlinie nicht für die Tabelle, und Azure Databricks überspringt alle Zeilenfilterung oder Spaltenmasken.

Wenn eine Richtlinie zum Beispiel MATCH COLUMNS condition1, condition2, condition3 definiert, wird die Richtlinie nur dann wirksam, wenn jede der drei Bedingungen mindestens einer Spalte der Tabelle zugeordnet werden kann.

Eine Richtlinie kann bis zu drei Spaltenbedingungen in ihrer MATCH COLUMNS Klausel enthalten.

In diesem Beispiel wird eine Zeilenfilterrichtlinie definiert, die Zeilen für europäische Kunden von Abfragen durch US-basierte Analysten ausschließt:

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

In diesem Beispiel wird eine Spaltenmaskierungsrichtlinie definiert, die Sozialversicherungsnummern von US-Analysten ausblendet, mit Ausnahme derjenigen Analysten, die sich in der admins Gruppe befinden.

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;

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.

Bearbeiten einer Richtlinie

Erforderliche Berechtigungen:MANAGE auf dem Objekt oder dem Besitzer des Objekts.

Katalog-Explorer

  1. Klicken Sie im Azure Databricks-Arbeitsbereich auf das Datensymbol.Katalog.
  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. Wählen Sie die Richtlinie aus, und nehmen Sie Änderungen vor.
  5. Wähle Richtlinie aktualisieren aus.

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>, ...];

Löschen einer Richtlinie

Erforderliche Berechtigungen:MANAGE auf dem Objekt oder dem Besitzer des Objekts.

Katalog-Explorer

  1. Klicken Sie im Azure Databricks-Arbeitsbereich auf das Datensymbol.Katalog.
  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. Wählen Sie die Richtlinie aus.
  5. Klicken Sie auf "Richtlinie löschen".

SQL

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

Fehlerbehebung bei mehreren Filtern oder Masken

Wenn ein Benutzer eine Tabelle abfragt, die von ABAC gesteuert wird, kann für jeden Benutzer nur ein eindeutiger Zeilenfilter pro Tabelle aufgelöst werden. Darüber hinaus kann für jeden Benutzer nur eine einzelne Spaltenmaske pro Spalte zugewiesen werden. Sie können mehrere ABAC-Richtlinien für eine Tabelle definieren, sofern sie diese Einschränkungen einhalten. Dies verhindert mehrdeutige Ergebnisse, wenn mehrere unterschiedliche Filter oder Masken für denselben Benutzer gelten.

Wenn Azure Databricks während der Richtlinienauswertung für einen bestimmten Benutzer mehrere unterschiedliche Filter oder Masken erkennt, löst es einen INVALID_PARAMETER_VALUE.UC_ABAC_MULTIPLE_ROW_FILTERS oder COLUMN_MASKS_FEATURE_NOT_SUPPORTED.MULTIPLE_MASKS Fehler aus. Dieses Verhalten ist so gewollt und blockiert den Zugriff auf die Tabelle, bis der Konflikt gelöst wird.

Grundlegendes dazu, wie mehrere Zeilenfilter oder -masken auftreten

Mehrere Filter oder Masken können auf verschiedene Arten auftreten:

  • Eine einzelne Richtlinie generiert mehrere Filter oder Masken.
    Dies kann passieren, wenn mehrere Spalten den Richtlinienbedingungen entsprechen. Die folgende Richtlinie definiert beispielsweise einen Zeilenfilter, der auf mit region=EMEA markierten Spalten basiert:

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

    Wenn die customer_data-Tabelle mehrere mit region=EMEA markierte Spalten hat, generiert diese Richtlinie einen Zeilenfilter pro übereinstimmende Spalte. Wenn Azure Databricks die Richtlinie auswertet, erkennt es mehrere Zeilenfilter und löst den Fehler aus.

  • Mehrere Richtlinien definieren Filter oder Masken in derselben Tabelle oder Spalte. Wenn mehrere ABAC-Richtlinien für dieselbe Tabelle oder Spalte gelten, erkennt Azure Databricks mehrere effektive Filter oder Masken.

  • Eine Tabelle oder Spalte verfügt bereits über einen manuell angewendeten Filter oder eine Maske. Konflikte können auch auftreten, wenn eine Tabelle oder Spalte sowohl einen manuell angewendeten Zeilenfilter oder eine Spaltenmaske (nicht ABAC) als auch mindestens einen ABAC-definierten Filter oder eine Maske enthält.

Behebung des Fehlers

Sie können den Fehler "Mehrere Zeilenfilter" mit einem der folgenden Ansätze beheben:

  • Verfeinern Sie die Spaltenbestimmungen Ihrer Richtlinie: Aktualisieren Sie die MATCH COLUMNS Klausel so, dass sie spezifischer ist, und stellen Sie sicher, dass sie nur einer Spalte entspricht. Kombinieren Sie beispielsweise mehrere Bedingungen, um die Übereinstimmung einzugrenzen.

  • Passen Sie die geregelten Tags an: Überprüfen Sie, welche Spalten die geregelten Tags enthalten, die die Richtlinie auslösen. Entfernen oder ändern Sie diese Tags, wenn sie nicht im Zeilenfilter enthalten sein sollen.

  • Strukturieren Sie Ihre Richtlinien neu: Anstatt auf Bedingungen zu vertrauen, die mit mehreren Spalten übereinstimmen können, sollten Sie separate Richtlinien mit expliziter Spaltenadressierung erstellen. Dadurch erhalten Sie mehr Kontrolle darüber, welche Spalten Zeilenfilter auslösen.