Valutazione delle politiche e comportamento di runtime

Questa pagina illustra il modo in cui i criteri ABAC (controllo degli accessi basato su attributi) vengono valutati al tempo di esecuzione della query, tra cui:

  • Modalità di gestione dei conflitti tra più criteri
  • Funzionamento del casting dei tipi per le maschere di colonna
  • Quali misure di sicurezza impediscono l'esposizione dei dati quando vengono eliminati tag o funzioni da cui dipende un criterio

Valutazione e applicazione dei criteri

Quando un utente esegue query su una tabella, la valutazione ABAC procede in due fasi: valutazione dei criteri in Unity Catalog e applicazione dei criteri in Databricks Runtime.

Diversi utenti possono visualizzare risultati diversi dalla stessa query perché la valutazione dei criteri dipende dall'identità dell'utente, dalle appartenenze ai gruppi e dai tag sui dati a cui accedono. Le modifiche apportate alle assegnazioni di appartenenza ai gruppi o ai tag modificano dinamicamente i criteri effettivi in fase di query.

Valutazione dei criteri (catalogo Unity)

Unity Catalog esegue i seguenti passaggi utilizzando i metadati dell'oggetto proteggibile (ad esempio, le assegnazioni di tag governati) e l'identità dell'utente e le appartenenze ai gruppi:

  1. Identifica tutte le politiche il cui ambito copre la tabella interrogata.
  2. Per ognuno di questi criteri, controlla se l'utente che esegue query si trova nell'elenco TO e non nell'elenco EXCEPT .
  3. Per ogni criterio, valuta le condizioni di tabella e colonna rispetto ai tag nell'oggetto sottoposto a query, inclusi i tag ereditati. Le condizioni delle colonne devono corrispondere almeno a una colonna.
  4. Se il criterio viene applicato, determina il filtro di riga o la maschera di colonna effettiva e la invia al runtime di Databricks come parte dei metadati della tabella.

Applicazione dei criteri (Databricks Runtime)

"Il Databricks Runtime Query Planner traduce il filtro di riga o la maschera di colonna effettivi in una vista sicura sopra le scansioni delle tabelle che applicano il filtraggio e la mascheratura durante l'esecuzione della query." Si tratta dello stesso meccanismo di imposizione usato per i filtri di riga a livello di tabella e le maschere di colonna.

Progettazione a chiusura in caso di guasto

ABAC segue un modello di chiusura sicura, in cui l'impostazione predefinita di Azure Databricks nega l'accesso se non è in grado di verificare le condizioni di sicurezza. Azure Databricks consente l'accesso alle tabelle protette dal controllo degli accessi basato sugli attributi solo quando può applicare in modo sicuro tutti i criteri applicabili. Questo vale per le versioni di calcolo non supportate, le operazioni specifiche sui dati della tabella sottostanti e le situazioni in cui sono state rimosse le dipendenze di un criterio (tag o funzioni).

Versioni di calcolo non supportate

I criteri di controllo degli accessi basato su attributi richiedono Databricks Runtime 16.4 o versione successiva o un'elaborazione serverless. Se un utente tenta di accedere a una tabella protetta dal controllo degli accessi basato su attributi (ABAC) da una versione non supportata, la query viene bloccata (l'accesso viene negato) per impedire l'esposizione non protetta dei dati.

Nella modalità di accesso dedicata, Azure Databricks delega alla computazione serverless l'applicazione dei controlli per garantire che vengano applicati controlli di accesso con granularità fine. Per consentire agli utenti su runtime meno recenti di accedere a queste tabelle, è necessario esentarli esplicitamente dalle politiche.

Operazioni non supportate sui dati protetti

Alcune operazioni non sono compatibili con i filtri di riga o le maschere di colonna. Queste operazioni falliscono invece di aggirare le normative. Per eseguirli, l'entità deve essere elencata nella EXCEPT clausola di ogni criterio ABAC applicabile alla tabella. I principali esentati non sono soggetti ai criteri, pertanto Azure Databricks non deve applicarli e può consentire in sicurezza l'operazione.

Le operazioni che richiedono l'esenzione dell'entità di esecuzione includono aggiornamenti della pipeline, processi di backup e flussi di lavoro amministrativi come i seguenti:

  • Accesso alle tabelle protette da controllo degli accessi basato su attributi da sistemi di calcolo che eseguono versioni di Databricks Runtime precedenti alla 16.4
  • Query sullo spostamento cronologico
  • Clonazione profonda e superficiale
  • Delta Sharing, in cui il proprietario della condivisione deve essere esente dalla politica e disporre delle autorizzazioni Delta Sharing necessarie. Si noti che i criteri non regolano l'accesso del destinatario.
  • Creazione e sincronizzazione dell'indice di ricerca vettoriale

Per altre informazioni su queste e altre limitazioni, vedere Requisiti, quote e limitazioni del controllo degli accessi basato su attributi.

Dipendenze dei criteri rimosse

Le politiche ABAC dipendono da tag gestiti e funzioni definite dall'utente. Se una di queste dipendenze viene rimossa mentre un criterio li fa ancora riferimento, le query sulle tabelle nell'ambito del criterio hanno esito negativo.

Eliminazione di tag regolamentata

Se si elimina un tag regolamentato a cui fa riferimento un criterio ABAC, tutte le query sull'oggetto in cui è associato il criterio e i relativi oggetti figlio hanno esito negativo con un INVALID_PARAMETER_VALUE.UC_ABAC_UNKNOWN_TAG_POLICY errore. Ciò si verifica anche se il tag non è stato applicato alle tabelle sottoposte a query.

Quando un tag regolamentato viene eliminato, diventa un tag non governativo. Le restrizioni relative ai valori consentiti vengono rimosse e tutti gli utenti con APPLY TAG possono modificare i valori senza privilegi ASSIGN .

Avvertimento

L'interfaccia utente e l'API non impediscono l'eliminazione di un tag regolamentato a cui viene fatto riferimento in un criterio di controllo degli accessi in base al ruolo. Prima di eliminare un tag governato, verificare che nessuna politica ABAC lo riferisca.

Per risolvere l'errore, ripristinare il tag eliminato o aggiornare o eliminare il criterio che vi fa riferimento. Vedere Creare e gestire tag regolamentati.

Eliminazione di una colonna contrassegnata

Azure Databricks impedisce l'eliminazione di una colonna con un tag regolamentato applicato. Per eliminare la colonna, un utente con ASSIGN sul tag e APPLY TAG sull'oggetto deve prima rimuovere il tag, quindi la colonna può essere eliminata.

Questo è rilevante per le pipeline dichiarative e altri flussi di lavoro automatizzati che modificano gli schemi di tabella. Se una pipeline tenta di eliminare una colonna con tag, l'operazione non riesce. Per sbloccare la pipeline, un utente con le autorizzazioni di tag necessarie deve rimuovere il tag, eseguire la pipeline in modo che la modifica dello schema abbia esito positivo e quindi riapplicare il tag alle colonne pertinenti. Se il tag non viene riapplicato, le query sui dati avranno esito negativo perché il criterio è ancora nell'ambito, ma il tag previsto non è più presente nell'oggetto.

Eliminazione delle funzioni a cui fanno riferimento le politiche

Se una funzione definita dall'utente facente riferimento a una policy viene eliminata mentre è ancora applicata, le query sulle tabelle in quell'ambito falliscono con UC_DEPENDENCY_DOES_NOT_EXIST. Per risolvere il problema, ripristinare la funzione oppure aggiornare le impostazioni per fare riferimento a una diversa funzione definita dall'utente (UDF).

Regole per più filtri e maschere

È possibile applicare un solo filtro di riga distinto in fase di query per una determinata tabella e utente. Analogamente, solo una maschera di colonna distinta per colonna può essere risolta in fase di esecuzione per una determinata colonna e un determinato utente. In questo modo si evitano risultati ambigui.

Se più filtri o maschere distinti si applicano allo stesso utente e alla stessa tabella (o colonna), Azure Databricks blocca l'accesso e restituisce un errore. Per esempio:

  • Un filtro a livello di tabella o maschera è in conflitto con un criterio ABAC. Una tabella o una colonna che dispone già di un filtro di riga applicato manualmente o maschera di colonna entra in conflitto con qualsiasi filtro o maschera definiti da ABAC per lo stesso obiettivo.
  • La clausola di un filtro di USING COLUMNS riga fa riferimento a un MATCH COLUMNS alias che corrisponde a più colonne. La USING COLUMNS clausola passa i valori di colonna alla funzione definita dall'utente (UDF). Se un MATCH COLUMNS alias nella USING COLUMNS clausola corrisponde a più di una colonna, il motore non può determinare quale colonna passare alla UDF e la query ha esito negativo con un errore.
  • Viene fatta menzione a una colonna mascherata nella clausola USING COLUMNS di un'altra policy. Se una colonna è mascherata da un criterio, non può essere usata come argomento di input nella USING COLUMNS clausola di un altro criterio.

Più criteri di controllo degli accessi basati su attributi (ABAC) possono coesistere per la stessa tabella o colonna se producono lo stesso filtro o maschera effettiva. Ad esempio, due criteri che fanno riferimento alla stessa funzione definita dall'utente con gli stessi argomenti si risolvono nello stesso filtro o maschera e non sono in conflitto.

Risoluzione dei conflitti di criteri

Quando Azure Databricks rileva più filtri o maschere distinti durante la valutazione dei criteri per un determinato utente, genera un errore INVALID_PARAMETER_VALUE.UC_ABAC_MULTIPLE_ROW_FILTERS o COLUMN_MASKS_FEATURE_NOT_SUPPORTED.MULTIPLE_MASKS e blocca l'accesso alla tabella finché il conflitto non viene risolto.

Per diagnosticare e risolvere:

  1. Usare SHOW EFFECTIVE POLICIES per visualizzare tutti i criteri applicabili alla tabella.
  2. Controllare INFORMATION_SCHEMA.ROW_FILTERS e INFORMATION_SCHEMA.COLUMN_MASKS per identificare eventuali filtri di riga a livello di tabella o maschere di colonna che possono essere in conflitto.
  3. Controllare quali criteri si sovrappongono nelle relative TO/EXCEPT entità e WHEN/MATCH COLUMNS condizioni.
  4. Risolvere in base a:
    • Affinamento delle condizioni delle policy. Aggiornare WHEN o MATCH COLUMNS clausole per essere più specifiche in modo che i criteri distinti siano destinati a tabelle o colonne diverse.
    • Regolazione dei tag gestiti. Esaminare le assegnazioni di tag nelle colonne o nelle tabelle che attivano corrispondenze di criteri indesiderate e rimuoverle o aggiornarle.
    • Regolazione dei principali. Aggiornare le clausole TO/EXCEPT in modo da coprire ogni utente con al massimo una politica per tabella (per i filtri di riga) o per colonna (per le maschere di colonna).
    • Politiche di ristrutturazione. Consolidare i criteri sovrapposti in un singolo criterio o suddividere i criteri generali in criteri separati e mirati in modo esplicito.

Conversione automatica dei tipi per le maschere di colonna

Azure Databricks esegue automaticamente il cast sia dell'input che dell'output delle funzioni maschera di colonna risolte dai criteri di controllo degli accessi basati su attributi. Viene eseguito il cast del valore della colonna di input in modo che corrisponda al tipo di parametro della funzione mask e viene eseguito il cast dell'output della funzione in modo che corrisponda al tipo di dati della colonna di destinazione. Ciò garantisce la coerenza dei tipi e il comportamento affidabile delle query durante il mascheramento delle colonne. Il cast automatico funziona come segue:

  1. Esecuzione della funzione maschera: quando la valutazione dei criteri determina che la maschera viene applicata, la funzione di maschera viene eseguita sui valori di colonna corrispondenti.
  2. Automatic type casting: Azure Databricks esegue il cast del valore della colonna di input in modo che corrisponda al tipo di parametro della funzione ed esegue il cast dell'output della funzione in modo che corrisponda al tipo di dati della colonna di destinazione.
  3. Risultato restituito: il risultato digitato correttamente viene restituito alla query.

Se i tipi di input o output non sono compatibili, il cast ha esito negativo e la query restituisce un errore di runtime. Il cast segue gli standard SQL ANSI per le operazioni CAST (dettagli di compatibilità completi), con un'aggiunta: in Databricks Runtime 18.1 e versioni successive, i criteri della maschera di colonna ABAC possono eseguire il cast di struct a VARIANT, che non è supportato nel SQL generale.

È necessario assicurarsi che le funzioni di mascheramento restituiscano tipi compatibili con le colonne di destinazione. Vedere Funzioni di mascheramento compatibili con il casting per esempi e l'approccio VARIANT per un mascheramento flessibile tra i tipi di colonne.