Creare e gestire criteri di controllo degli accessi basati su attributi

Questa pagina descrive come creare, modificare, visualizzare ed eliminare le politiche di controllo degli accessi basate sugli attributi in Unity Catalog. Per una panoramica dei concetti relativi alle politiche, vedere Concetti di base per il controllo accessi basato sugli attributi.

Requirements

Tutte le operazioni dei criteri (creazione, modifica, eliminazione, visualizzazione, descrizione) richiedono MANAGE la proprietà dell'entità a protezione diretta o dell'oggetto. La creazione di un criterio richiede anche:

  • Databricks Runtime 16.4 o versione successiva, oppure calcolo senza server. Vedere Requisiti di calcolo.
  • Per la logica di filtro o mascheramento, una funzione definita dall'utente (UDF) nel catalogo Unity che hai attivato EXECUTE o una funzione SQL definita direttamente durante la creazione della policy.
  • Tag regolati applicati agli oggetti di destinazione. Consulta Tag governati.

Creare un criterio

È possibile creare un criterio usando l'interfaccia utente di Esplora cataloghi, l'istruzione SQL CREATE POLICY o le API REST Azure Databricks, gli SDK e Terraform.

Per creare un criterio, è necessario disporre MANAGE delle autorizzazioni sull'entità a protezione diretta a cui è allegato il criterio (catalogo, schema o tabella) o essere il proprietario dell'entità stessa, e EXECUTE sull'UDF che implementa la logica di filtro o mascheramento.

Esploratore di cataloghi

  1. Nell'area di lavoro Azure Databricks fare clic su IconaData.Catalog.

  2. Selezionare l'oggetto che determina l'ambito dei criteri, ad esempio un catalogo, uno schema o una tabella.

  3. Fare clic sulla scheda Politiche.

  4. Fare clic su Nuovo criterio.

  5. Completare la sezione Identificazione della politica. La tabella seguente riepiloga ogni campo:

    Campo Description Esempio
    Nome Un nome per la policy. Deve essere univoco tra tutti i criteri definiti nello stesso oggetto protetto. hide_eu_customers, mask_ssn
    Descrizione Opzionale. Descrizione del criterio. Viene visualizzato nei log di controllo e consente agli amministratori di comprendere la finalità dei criteri. Restrict EU customer rows from US analysts, Mask SSN for all account users
  6. Completare la sezione Principali e ambito. La tabella seguente riepiloga ogni campo:

    Campo Description Esempio
    Applicato a... Gli utenti, i gruppi o le entità del servizio soggetti ai criteri. Quando queste entità eseguono query sulle tabelle nell'ambito, viene applicato il filtro di riga o la maschera di colonna. Per applicare la politica a tutti i principali nell'account, selezionare All account users. us_analysts, All account users
    Ad eccezione di I dirigenti esentati dai criteri. Le entità esentate non sono soggette a filtri o maschera e visualizzano i dati completi e non modificati. admins, compliance_team
    Scope Oggetto securizzabile al quale è associata la policy. La policy viene valutata rispetto a tutte le tabelle all'interno dell'ambito selezionato. Selezionare un catalogo, uno schema o una tabella. Azure Databricks consiglia di allegare criteri al livello più alto applicabile. Selezionare catalogo prod, quindi selezionare schema customers.
    Condizione della tabella Determina le tabelle all'interno dell'ambito a cui si applicano i criteri. Nessuna condizione: applica i criteri a tutte le tabelle nell'ambito. Tabelle corrispondenti a uno di questi tag: applica i criteri all'elenco specificato di chiavi tag o coppie chiave-valore tag. Le tabelle con una di queste corrispondenze con i criteri. Tabelle che corrispondono a un'espressione personalizzata: è possibile compilare un'espressione booleana usando has_tag e has_tag_value, in combinazione con AND, ORe NOT per una logica di corrispondenza più complessa. Applica i criteri alle tabelle in cui l'espressione restituisce TRUE e corrisponde ai criteri. Se una tabella nell'ambito non corrisponde alla condizione, i criteri non si applicano a tale tabella. Selezionare Tabelle corrispondenti a uno di questi tag, quindi scegliere chiave sensitivity tag con valore high per limitare i criteri solo alle tabelle sensibili.

    Impostazioni dei criteri ABAC di esempio per la sezione Soggetti e ambito.

  7. Per Tipo di criteri scegliere il tipo di controllo di accesso da applicare:

    Opzione Description Usare quando
    Filtro di riga Crea un criterio di filtro di riga. La funzione definita dall'utente (UDF) valuta ogni riga e restituisce un valore booleano. Le righe in cui la funzione definita dall'utente restituisce FALSE sono escluse dai risultati della query. L'accesso dipende dai valori di ogni riga, ad esempio filtrando in base ai valori di una colonna che contiene aree geografiche.
    Maschera di colonna Crea un criterio della maschera di colonna. La funzione definita dall'utente accetta il valore della colonna come input e restituisce la versione originale o mascherata. Il tipo restituito deve essere convertibile al tipo di dati della colonna di destinazione. È necessario oscurare campi sensibili, ad esempio numeri di previdenza sociale, numeri di telefono o indirizzi di posta elettronica, pur consentendo al principale di eseguire query sulla tabella.
  8. Le sezioni successive dipendono dalla selezione del tipo di criterio . Espandere la sezione corrispondente alla selezione:

    Filtro di riga

    Nella sezione Funzione filtro riga, è possibile scegliere come specificare la funzione di filtro di riga:

    • Seleziona esistente: seleziona una funzione definita dall'utente già presente nel Catalogo di Unity. La funzione definita dall'utente (UDF) esamina ogni riga e restituisce un valore booleano. Le righe in cui la funzione restituisce FALSE vengono escluse dai risultati della query. È necessario avere EXECUTE sulla UDF.
    • Crea: definire una funzione SQL da usare come logica di filtro di riga.

    Esempio di impostazioni dei criteri di filtro delle righe ABAC per la sezione Funzione di filtro delle righe.

    Nella sezione Input funzione specificare un valore per ogni parametro di funzione. Ogni input può essere una colonna corrispondente a tag, una colonna corrispondente a un'espressione personalizzata o un valore costante.

    Impostazioni di controllo degli accessi basato sugli attributi di esempio per la sezione Ingressi delle funzioni.

    Maschera di colonna

    Nella sezione Condizioni colonna scegliere come identificare le colonne da mascherare:

    • Colonne corrispondenti a uno di questi tag: specificare un elenco di chiavi di tag o coppie chiave-valore di tag. Le colonne che hanno alcuna di queste sono mascherate dalla politica.
    • Colonne corrispondenti a un'espressione personalizzata: creare un'espressione booleana usando has_tag e has_tag_value, combinate con AND, ORe NOT per una logica di corrispondenza più complessa. Colonne in cui l'espressione valuta come TRUE vengono mascherate.

    Impostazioni dei criteri della maschera di colonna ABAC di esempio per la sezione Condizioni colonna.

    Scegliere quindi la funzione Maschera da applicare alle colonne corrispondenti:

    • Seleziona esistente: seleziona una funzione definita dall'utente già presente nel Unity Catalog. La funzione definita dall'utente restituisce il valore originale o mascherato. Il tipo restituito deve essere convertibile al tipo di dati della colonna obiettivo. È necessario avere EXECUTE sull'UDF.
    • Crea: definire una funzione SQL da usare come logica di mascheratura per la colonna.

    Impostazioni esempio della politica di mascheramento delle colonne ABAC per la sezione della funzione di mascheramento.

    Nella sezione Input funzione specificare un valore per ogni parametro di funzione aggiuntivo. Ogni input può essere una colonna corrispondente a tag, una colonna corrispondente a un'espressione personalizzata o un valore costante.

    In questo esempio viene utilizzato un valore costante di 4 per visualizzare gli ultimi 4 caratteri del nome SSN.

    Impostazioni dei criteri della maschera di colonna ABAC di esempio per la sezione della funzione Input.

  9. Fare clic su Crea criterio.

SQL

Per la documentazione completa, vedere 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 }

Corpo del filtro di riga:

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

Corpo della maschera di colonna:

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

Parametri:

  • policy_name: nome del criterio. Deve essere univoco fra tutte le policy definite sullo stesso oggetto proteggibile.
  • ON { CATALOG | SCHEMA | TABLE }: l'ambito a cui è associata la politica. La politica valuta rispetto a tutte le tabelle discendenti di questo elemento securizzabile.
  • function_name: il nome completo della UDF che implementa la logica di filtro o di mascheramento.
  • TO principal [, ...]: gli utenti, i gruppi o le entità servizio a cui si applicano i criteri.
  • EXCEPT principal [, ...]: Principali esentati dai criteri. Le entità esentate non sono soggette a filtri o mascheramento.
  • FOR TABLES: specifica che i criteri hanno come destinazione le tabelle. Le tabelle sono attualmente l'unico tipo a protezione diretta supportata e che includono tabelle di streaming e viste materializzate.
  • WHEN condition: espressione booleana che determina le tabelle a cui si applicano i criteri in base ai relativi tag. Usa funzioni has_tag('tag_name') predefinite e has_tag_value('tag_name', 'tag_value'). Se omesso, il valore predefinito è TRUE (si applica a tutte le tabelle nell'ambito).
  • MATCH COLUMNS condition [[AS] alias] [, ...]: condizioni delle colonne che identificano quali colonne sono mirate dalla politica. Ogni condizione è un'espressione booleana compilata da has_tag('tag_name') e has_tag_value('tag_name', 'tag_value'), facoltativamente combinata con AND, ORe NOT. A ogni condizione può essere assegnato un alias da usare in ON COLUMN e USING COLUMNS. Un criterio può includere fino a 3 MATCH COLUMNS espressioni e tutti devono corrispondere al criterio da applicare.
  • ON COLUMN alias: Per le policy della maschera di colonna, specifica la colonna associata da mascherare, facente riferimento al relativo alias di MATCH COLUMNS.
  • USING COLUMNS (function_arg [, ...]): Argomenti passati alla UDF. Ogni argomento può essere un alias da MATCH COLUMNS o un valore letterale costante.

Esempio: criterio per la mascheratura delle colonne. Mascherare tutte le colonne contrassegnate con pii:ssn nello prod.customers schema, visualizzando solo gli ultimi 4 caratteri. Il criterio si applica a us_analysts tranne 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);

Esempio: criterio di filtro di riga. Escludere righe con clienti europei dalle tabelle contrassegnate con sensitivity:high nello prod.customers schema. La politica si applica a us_analysts e filtra le righe in base a una colonna geo_region.

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

Per la documentazione completa, vedere la documentazione del Databricks SDK per Python.

In questo esempio viene creata una politica di filtro delle righe che esclude le righe con clienti europei per gli analisti con sede negli Stati Uniti.

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 questo esempio viene creato un criterio di mascheramento delle colonne che nasconde i numeri di previdenza sociale per gli analisti degli Stati Uniti, eccetto quelli nel gruppo admins.

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

Modificare un criterio

Esploratore di cataloghi

  1. Nell'area di lavoro Azure Databricks fare clic su IconaData.Catalog.
  2. Selezionare l'oggetto a cui è associato il criterio.
  3. Fare clic sulla scheda Politiche.
  4. Seleziona il criterio da modificare.
  5. Aggiornare tutti i campi da modificare. È possibile modificare la descrizione, i principali, il tipo di policy, le condizioni e le mappature di input delle funzioni. Il nome del criterio e l'oggetto a protezione diretta in cui è applicato il criterio non possono essere modificati. Per le descrizioni dei campi, vedere Creare un criterio.
  6. Fare clic su Aggiorna criterio.

SQL

CREATE OR REPLACE POLICY sostituisce l'intera definizione dei criteri. Specificare tutte le clausole, non solo i campi da modificare. La politica di sostituzione deve avere lo stesso nome ed essere nello stesso oggetto proteggibile.

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

A differenza di CREATE OR REPLACE POLICY SQL, update_policy supporta gli aggiornamenti parziali. Usare il update_mask parametro per specificare i campi da modificare. Vengono aggiornati solo i campi. Se update_mask è "*" o vuoto, vengono applicati tutti i campi in policy_info .

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

Eliminare un criterio

Esploratore di cataloghi

  1. Nell'area di lavoro Azure Databricks fare clic su IconaData.Catalog.
  2. Selezionare l'oggetto a cui è associato il criterio.
  3. Fare clic sulla scheda Politiche.
  4. Selezionare la politica.
  5. Fare clic su Elimina criterio.

SQL

Usare DROP POLICY per eliminare un criterio.

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

Esempi:

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

Mostra criteri

Usare SHOW POLICIES per elencare i criteri definiti su un oggetto securizzabile. Usare SHOW EFFECTIVE POLICIES anche per includere criteri dai ambiti padre, come i criteri a livello di catalogo che influiscono su una tabella.

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

Il risultato include il nome dei criteri, il tipo di criterio e il catalogo, lo schema o la tabella in cui è definito ogni criterio.

La visualizzazione di criteri efficaci per una tabella non richiede autorizzazioni per il catalogo padre o lo schema. Ciò consente a un amministratore di tabelle di visualizzare le regole che si applicano senza avere accesso in lettura ai criteri delle tabelle di pari livello.

Esempio:

SHOW EFFECTIVE POLICIES ON SCHEMA prod.customers;
policy_name policy_type (tipo_di_politica) catalog schema commento
nascondi_clienti_ue ROW FILTER prod clienti
mask_ssn COLUMN MASCHERA prod clienti

Descrivere un criterio

Usare DESCRIBE POLICY per visualizzare i dettagli di un criterio specifico. Richiede MANAGE la proprietà dell'entità a protezione diretta o dell'oggetto di destinazione.

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

Il risultato mostra le proprietà della policy come coppie chiave-valore, tra cui nome, tipo di risorsa, nome della risorsa, entità, condizioni, nome della funzione e timestamp.

Esempio:

DESCRIBE POLICY hide_eu_customers ON SCHEMA prod.customers;
info_name info_value
Nome nascondi_clienti_eu
In Tipo a protezione diretta SCHEMA
Su Sicurizzabile prod.clienti
Ai Dirigenti us_analysts
Per tipo a protezione diretta TABLE
Corrispondenza colonne has_tag('geo_region') AS area
Tipo di criteri ROW_FILTER
Nome funzione prodotti.clienti.regione_non_ue
Utilizzo di colonne region

Registrazione della verifica

Azure Databricks registra le operazioni di tag regolati e dei criteri di controllo degli accessi basati su attributi nella tabella di sistema del log di controllo. Di seguito sono riportate query di esempio. Per ulteriori informazioni, consultare Log di controllo.

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

Altre informazioni