ABAC-beleid maken en beheren

Op deze pagina wordt beschreven hoe u ABAC-beleid maakt, bewerkt, bekijkt en verwijdert in Unity Catalog. Zie Basisconcepten voor ABAC voor een overzicht van beleidsconcepten.

Requirements

Alle beleidsbewerkingen (maken, bewerken, verwijderen, weergeven, beschrijven) vereisen MANAGE op het beveiligbare object of eigendom van het object. Voor het maken van een beleid is ook het volgende vereist:

  • Databricks Runtime 16.4 of hoger of serverloze berekeningen. Zie Compute-vereisten.
  • Voor de filter- of maskeringslogica is er een door de gebruiker gedefinieerde functie (UDF) in Unity Catalog ingeschakeld, of definieert u inline een SQL-functie bij het opstellen van het beleid.
  • Beheerde tags die zijn toegepast op doelobjecten. Zie Geregelde tags.

Een beleid maken

U kunt een beleid maken met behulp van de gebruikersinterface van Catalog Explorer, de CREATE POLICY SQL-instructie of de Azure Databricks REST API's, SDK's en Terraform.

Als u een beleid wilt maken, moet MANAGE u beschikken over rechten op het beveiligbare object waaraan het beleid is gekoppeld (catalogus, schema of tabel), of de eigenaar ervan zijn, en EXECUTE op de UDF waarmee de filter- of maskeringslogica wordt geïmplementeerd.

Catalogusverkenner

  1. Klik in uw Azure Databricks werkruimte op Gegevenspictogram.Catalog.

  2. Selecteer het object dat het beleidsbereik bepaalt, zoals een catalogus, schema of tabel.

  3. Klik op het tabblad Beleid .

  4. Klik op Nieuw beleid.

  5. Voltooi de sectie Beleidsidentificatie. De volgende tabel bevat een overzicht van elk veld:

    Veld Beschrijving Example
    Naam Een naam voor het beleid. Moet uniek zijn onder alle beleidsregels die zijn gedefinieerd op hetzelfde beveiligbare object. hide_eu_customers, mask_ssn
    Beschrijving Optioneel. Een beschrijving voor het beleid. Wordt weergegeven in auditlogboeken en helpt beheerders inzicht te krijgen in de beleidsintentie. Restrict EU customer rows from US analysts, Mask SSN for all account users
  6. Voltooi de sectie Principals en het bereik . De volgende tabel bevat een overzicht van elk veld:

    Veld Beschrijving Example
    Toegepast op... De gebruikers, groepen of service-principals zijn onderhevig aan het beleid. Wanneer deze principals query-tabellen binnen het bereik vallen, wordt het rijfilter of kolommasker toegepast. Als u het beleid wilt toepassen op alle principals in het account, selecteert u All account users. us_analysts, All account users
    Behalve voor Principals die zijn vrijgesteld van het beleid. Vrijgestelde principals zijn niet onderworpen aan filteren of maskeren en zien de volledige, ongewijzigde gegevens. admins, compliance_team
    Scope Het beveiligbaar waar het beleid is gekoppeld. Het beleid evalueert op basis van alle tabellen binnen het geselecteerde bereik. Selecteer een catalogus, schema of tabel. Azure Databricks adviseert om beleidsregels toe te voegen op het hoogste toepasselijke niveau. Selecteer catalogus proden selecteer vervolgens schema customers.
    Tabelvoorwaarde Bepaalt op welke tabellen binnen welk bereik het beleid van toepassing is. Geen voorwaarde: het beleid wordt toegepast op alle tabellen binnen het bereik. Tabellen die overeenkomen met een van deze tags: past het beleid toe op de opgegeven lijst met tagsleutels of tagsleutel-waardeparen. Tabellen die een van deze tabellen bevatten, komen overeen met het beleid. Tabellen die overeenkomen met een aangepaste expressie: u kunt een Boole-expressie maken met behulp van has_tag en has_tag_value, gecombineerd met AND, ORen NOT voor complexere vergelijkingslogica. Het beleid wordt toegepast op tabellen waarin de expressie wordt geëvalueerd tot TRUE en overeenkomt met het beleid. Als een tabel in het bereik niet overeenkomt met de voorwaarde, is het beleid niet van toepassing op die tabel. Selecteer Tabellen die overeenkomen met een van deze tags en kies vervolgens tagsleutel sensitivity met waarde high om het beleid alleen te beperken tot gevoelige tabellen.

    Voorbeeld van ABAC-beleidsinstellingen voor de sectie Principals en scope.

  7. Kies voor beleidstype het type toegangsbeheer dat u wilt afdwingen:

    Option Beschrijving Gebruik wanneer
    Rijfilter Hiermee maakt u een rijfilterbeleid. De UDF evalueert elke rij en retourneert een Booleaanse waarde. Rijen waarin de UDF, FALSE retourneert, worden uitgesloten van queryresultaten. Access is afhankelijk van de waarden in elke rij, zoals filteren op de waarden in een kolom die geografische regio's bevat.
    Kolommasker Maakt een beleid voor kolommaskers aan. De UDF neemt de kolomwaarde als invoer en retourneert de oorspronkelijke of een gemaskeerde versie. Het retourtype moet worden gecast naar het gegevenstype van de doelkolom. U moet gevoelige velden, zoals SSN's, telefoonnummers of e-mailadressen, redacteren, terwijl de principal nog steeds een query kan uitvoeren op de tabel.
  8. De volgende secties zijn afhankelijk van uw beleidstypeselectie . Vouw de sectie uit die overeenkomt met uw selectie:

    Rijfilter

    Kies in de sectie Rijfilterfunctie hoe u de functie rijfilter opgeeft:

    • Bestaande selecteren: Selecteer een UDF die al is gedefinieerd in Unity Catalog. De UDF evalueert elke rij en retourneert een Booleaanse waarde. Rijen waarvoor de functie FALSE retourneert, worden uitgesloten van de queryresultaten. U moet EXECUTE hebben op de UDF.
    • Maken: Definieer een SQL-functie die moet worden gebruikt als rijfilterlogica.

    Voorbeeld van beleidsinstellingen voor ABAC-rijfilters voor de sectie Functie Rijfilter.

    Geef in de sectie Functie-invoer een waarde op voor elke functieparameter. Elke invoer kan een kolom zijn die overeenkomt met tags, een kolom die overeenkomt met een aangepaste expressie of een constante waarde.

    Voorbeeld van ABAC-instellingen voor de sectie Functie-invoer.

    Kolommasker

    Kies in de sectie Kolomvoorwaarden hoe u de kolommen kunt identificeren die moeten worden gemaskeerd:

    • Kolommen die overeenkomen met een van deze tags: geef een lijst met tagsleutels of tagsleutel-waardeparen op. Kolommen met een van deze kolommen worden gemaskeerd door het beleid.
    • Kolommen die overeenkomen met een aangepaste expressie: bouw een Boole-expressie met behulp van has_tag en has_tag_value, gecombineerd met AND, ORen NOT voor complexere overeenkomende logica. Kolommen waarin de expressie naar TRUE evalueert, worden gemaskeerd.

    Voorbeeld van ABAC-beleidsinstellingen voor kolommaskers in de sectie Kolomvoorwaarden.

    Kies vervolgens de functie Maskering die u wilt toepassen op de overeenkomende kolommen:

    • Bestaande selecteren: Selecteer een UDF die al is gedefinieerd in Unity Catalog. De UDF retourneert de oorspronkelijke of gemaskeerde waarde. Het retourtype moet worden gecast naar het gegevenstype van de doelkolom. Je moet EXECUTE op de UDF hebben.
    • Maken: Definieer een SQL-functie die moet worden gebruikt als de logica voor kolommaskering.

    Voorbeeld van beleidsinstellingen voor ABAC-kolommasker voor de sectie Maskeringsfunctie.

    Geef in de sectie Functie-invoer een waarde op voor elke extra functieparameter. Elke invoer kan een kolom zijn die overeenkomt met tags, een kolom die overeenkomt met een aangepaste expressie of een constante waarde.

    In dit voorbeeld wordt een constante waarde gebruikt om 4 de laatste 4 tekens van de SSN weer te geven.

    Voorbeeldinstellingen voor het ABAC-kolommaskerbeleid in de sectie Functie-invoer.

  9. Klik op Create policy (Beleid maken).

SQL

Zie CREATE POLICY voor volledige documentatie.

CREATE [OR REPLACE] POLICY policy_name
ON { CATALOG catalog_name | SCHEMA schema_name | TABLE table_name }
[COMMENT description]
{ row_filter_body | column_mask_body }

Hoofdtekst van rijfilter:

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

Hoofdtekst van kolommasker:

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: Een naam voor het beleid. Moet uniek zijn voor alle beleidsregels die zijn gedefinieerd op hetzelfde beveiligbare object.
  • ON { CATALOG | SCHEMA | TABLE }: Het bereik waaraan het beleid is gekoppeld. Het beleid evalueert alle tabellen die afstammelingen zijn van dit beveiligbare object.
  • function_name: De volledig gekwalificeerde naam van de UDF waarmee de filter- of maskeringslogica wordt geïmplementeerd.
  • TO principal [, ...]: De gebruikers, groepen of service-principals waarop het beleid van toepassing is.
  • EXCEPT principal [, ...]: Principals die zijn vrijgesteld van het beleid. Vrijgestelde principals zijn niet onderworpen aan filteren of maskeren.
  • FOR TABLES: Hiermee geeft u op dat het beleid is gericht op tabellen. Tabellen zijn momenteel het enige ondersteunde beveiligbare type en dat omvat streamingtabellen en gerealiseerde weergaven.
  • WHEN condition: Een Booleaanse expressie waarmee wordt bepaald op welke tabellen het beleid van toepassing is, op basis van hun tags. Maakt gebruik van ingebouwde functies has_tag('tag_name') en has_tag_value('tag_name', 'tag_value'). Als er niets wordt opgegeven, is de standaardwaarde TRUE (geldt voor alle tabellen binnen de scope).
  • MATCH COLUMNS condition [[AS] alias] [, ...]: Kolomvoorwaarden die identificeren welke kolommen het beleid doelwitten. Elke voorwaarde is een Booleaanse expressie die is opgebouwd uit has_tag('tag_name') en has_tag_value('tag_name', 'tag_value'), optioneel gecombineerd met AND, ORen NOT. Aan elke voorwaarde kan een alias worden toegewezen voor gebruik in ON COLUMN en USING COLUMNS. Een beleid kan maximaal 3 MATCH COLUMNS expressies bevatten en alle beleidsregels moeten overeenkomen om het beleid toe te passen.
  • ON COLUMN alias: Voor beleid voor kolommasker specificeert u de overeenkomende kolom die gemaskeerd moet worden, aangeduid door de alias van MATCH COLUMNS.
  • USING COLUMNS (function_arg [, ...]): Argumenten doorgegeven aan de UDF. Elk argument kan een alias zijn van MATCH COLUMNS of een constante letterlijke waarde.

Voorbeeld: beleid voor kolommasker. Masker alle kolommen die pii:ssn in het prod.customers schema zijn getagd, waarbij alleen de laatste vier tekens worden weergegeven. Het beleid is van toepassing op us_analysts uitzondering 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);

Voorbeeld: beleid voor rijfilters. Sluit rijen van Europese klanten uit van tabellen die sensitivity:high zijn getagd in het prod.customers schema. Het beleid is van toepassing op us_analysts en filtert rijen op basis van een geo_region kolom.

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

Zie de Databricks SDK voor Python documentatie voor volledige documentatie.

In dit voorbeeld wordt een beleid voor rijfilters gemaakt waarmee rijen met Europese klanten voor amerikaanse analisten worden uitgesloten:

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 dit voorbeeld wordt een kolommaskerbeleid gemaakt waarmee burgerservicenummers voor Amerikaanse analisten worden gemaskeerd, met uitzondering van die in de admins groep:

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

Een beleid bewerken

Catalogusverkenner

  1. Klik in uw Azure Databricks werkruimte op Gegevenspictogram.Catalog.
  2. Selecteer het object waaraan het beleid is gekoppeld.
  3. Klik op het tabblad Beleid .
  4. Selecteer het beleid dat u wilt bewerken.
  5. Werk de velden bij die u wilt wijzigen. U kunt de beschrijving, principals, beleidstype, voorwaarden en functie-invoertoewijzingen wijzigen. De beleidsnaam en het beveiligbare object waarop het beleid wordt toegepast, kunnen niet worden bewerkt. Zie Een beleid maken voor veldbeschrijvingen.
  6. Klik op Beleid bijwerken.

SQL

CREATE OR REPLACE POLICY vervangt de volledige beleidsdefinitie. Geef alle clausules op, niet alleen de velden die u wilt wijzigen. Het vervangingsbeleid moet dezelfde naam hebben en zich op hetzelfde beveiligde object bevinden.

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

In tegenstelling tot CREATE OR REPLACE POLICY sql ondersteunt update_policy gedeeltelijke updates. Gebruik de update_mask parameter om op te geven welke velden u wilt wijzigen. Alleen deze velden worden bijgewerkt. Als update_mask"*" is of leeg is, worden alle velden in policy_info toegepast.

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

Een beleid verwijderen

Catalogusverkenner

  1. Klik in uw Azure Databricks werkruimte op Gegevenspictogram.Catalog.
  2. Selecteer het object waaraan het beleid is gekoppeld.
  3. Klik op het tabblad Beleid .
  4. Selecteer het beleid.
  5. Klik op Beleid verwijderen.

SQL

Gebruik DROP POLICY dit om een beleid te verwijderen.

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

Voorbeelden:

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

Beleid weergeven

Gebruik SHOW POLICIES om de beleidsregels weer te geven die zijn gedefinieerd op een beveiligbaar object. Gebruik SHOW EFFECTIVE POLICIES om ook beleidsregels van bovenliggende scopes op te nemen, zoals beleidsregels op catalogusniveau die van invloed zijn op een tabel.

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

Het resultaat bevat de beleidsnaam, het beleidstype en de catalogus, het schema of de tabel waarin elk beleid is gedefinieerd.

Voor het weergeven van effectief beleid voor een tabel zijn geen machtigingen vereist voor de oudercatalogus of het ouderschema. Hierdoor kan een tabelbeheerder de regels zien die van toepassing zijn zonder leestoegang te hebben tot het beleid van de tabellen op hetzelfde niveau.

Voorbeeld:

SHOW EFFECTIVE POLICIES ON SCHEMA prod.customers;
policy_name beleidstype catalogus schema reactie
verberg_eu_klanten ROW FILTER prikkelen customers
mask_ssn COLUMN MASKER prikkelen customers

Een beleid beschrijven

Gebruik DESCRIBE POLICY dit om de details van een specifiek beleid weer te geven. Vereist MANAGE voor het beveiligbare doel of objecteigendom.

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

Het resultaat toont de eigenschappen van het beleid als sleutel-waardeparen, waaronder naam, beveiligbaar type, beveiligbare naam, principals, voorwaarden, functienaam en tijdstempels.

Voorbeeld:

DESCRIBE POLICY hide_eu_customers ON SCHEMA prod.customers;
info_naam info_value
Naam hide_eu_customers
Bij beveiligbaar type SCHEMA
Beveiligbaar prod.customers
Aan principals us_analysts
Voor beveiligbaar type TABLE
Overeenkomende kolommen has_tag('geo_region') AS-regio
Beleidstype Rijfilter
Functienaam product.klanten.niet_eu_regio
Het gebruik van kolommen region

Auditlogboek bijhouden

Azure Databricks registreert gereguleerde tag- en ABAC-beleidsbewerkingen in de systeemauditlogboektabel. Hieronder ziet u voorbeeldquery's. Zie Auditlogboeken voor meer informatie.

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

Meer informatie