Accedere ad Azure Data Lake Storage usando il pass-through delle credenziali di Microsoft Entra ID (legacy)
Importante
Questa documentazione è stata ritirata e potrebbe non essere aggiornata.
Il pass-through delle credenziali è deprecato a partire da Databricks Runtime 15.0 e verrà rimosso nelle versioni future di Databricks Runtime. Databricks consiglia di eseguire l'aggiornamento a Unity Catalog. Unity Catalog semplifica la sicurezza e la governance dei dati fornendo una posizione centrale per amministrare e controllare l'accesso ai dati in più aree di lavoro nell'account. Vedere Cos'è Unity Catalog?.
Per il comportamento di sicurezza e governance più alto, contattare il team dell'account Azure Databricks per disabilitare il pass-through delle credenziali nell'account Azure Databricks.
Nota
Questo articolo contiene riferimenti al termine elenco elementi consentiti, che Azure Databricks non usa. Quando il termine verrà rimosso dal software, verrà rimosso anche dall'articolo.
È possibile eseguire l'autenticazione automaticamente per accedere ad Azure Data Lake Storage Gen1 da Azure Databricks (ADLS Gen1) e ADLS Gen2 dai cluster Azure Databricks usando la stessa identità di Microsoft Entra ID usata per accedere ad Azure Databricks. Quando si usa un cluster con il pass-through delle credenzialiAzure Data Lake Storage abilitato, i comandi eseguiti in tale cluster sono in grado di leggere e scrivere i dati in Azure Data Lake Storage senza che sia necessario configurare le credenziali dell'entità servizio per l'accesso all'archiviazione.
Il pass-through delle credenziali di Azure Data Lake Storage è supportato solo con Azure Data Lake Storage Gen1 e Gen2. Archiviazione BLOB di Azure non supporta il pass-through delle credenziali.
Questo articolo tratta:
- Abilitazione del pass-through delle credenziali per cluster standard e con concorrenza elevata.
- Configurazione del pass-through delle credenziali e inizializzazione delle risorse di archiviazione negli account ADLS.
- Accesso diretto alle risorse ADLS quando è abilitato il pass-through delle credenziali.
- Accesso alle risorse ADLS tramite un punto di montaggio quando è abilitato il pass-through delle credenziali.
- Funzionalità supportate e limitazioni quando si usa il pass-through delle credenziali.
I Notebook sono inclusi per fornire esempi di uso del pass-through delle credenziali con gli account di archiviazione ADLS Gen1 e ADLS Gen2.
Requisiti
- Piano Premium. Per informazioni dettagliate sull'aggiornamento di un piano Standard a un piano Premium, vedere Effettuare l'aggiornamento o il downgrade di un'area di lavoro di Azure Databricks.
- Un account di archiviazione di Azure Data Lake Storage Gen 1 o Gen2. Gli account di archiviazione di Azure Data Lake Storage Gen2 devono usare lo spazio dei nomi gerarchico per utilizzare il pass-through delle credenziali di Azure Data Lake Storage. Per istruzioni sulla creazione di un nuovo account ADLS Gen2 e sull'abilitazione dello spazio dei nomi gerarchico, vedere Creare un account di archiviazione.
- Autorizzazioni utente configurate correttamente per Azure Data Lake Storage. L'amministratore di Azure Databricks deve assicurarsi che gli utenti abbiano i ruoli corretti, ad esempio Contributore di archiviazione dati BLOB, per leggere e scrivere i dati archiviati in Azure Data Lake Storage. Vedere Usare il portale di Azure per assegnare un ruolo di Azure per l'accesso ai dati BLOB e di accodamento.
- Comprendere i privilegi degli amministratori dell'area di lavoro nelle aree di lavoro abilitate per il pass-through ed esaminare le assegnazioni di amministratore dell'area di lavoro esistenti. Gli amministratori dell'area di lavoro possono gestire le operazioni per l'area di lavoro, tra cui l'aggiunta di utenti e entità servizio, la creazione di cluster e la delega di altri utenti come amministratori dell'area di lavoro. I task di gestione dell'area di lavoro, ad esempio la gestione della proprietà dei processi e la visualizzazione dei Notebook, possono concedere l'accesso indiretto ai dati registrati in Azure Data Lake Storage. Quello di amministratore dell’area di lavoro è un ruolo privilegiato che deve essere distribuito con cautela.
- Non è possibile usare un cluster configurato con le credenziali ADLS, ad esempio le credenziali dell'entità servizio, con pass-through delle credenziali.
Importante
Non è possibile eseguire l'autenticazione in Azure Data Lake Storage con le credenziali di Microsoft Entra ID se si è protetti da un firewall che non è stato configurato per consentire il traffico verso Microsoft Entra ID. Firewall di Azure blocca l'accesso ad Active Directory per impostazione predefinita. Per consentire l'accesso, configurare il tag del servizio AzureActiveDirectory. È possibile trovare informazioni equivalenti per le appliance virtuali di rete nel tag AzureActiveDirectory nel file JSON per gli intervalli IP e i tag del servizio di Azure. Per altre informazioni, vedere Tag del servizio Firewall di Azure.
Consigli per l'impostazione del log
È possibile registrare le identità passate all'archiviazione ADLS nei log di diagnostica dell'archiviazione di Azure. La registrazione delle identità consente di collegare le richieste ADLS ai singoli utenti dai cluster di Azure Databricks. Abilitare la registrazione diagnostica nell'account di archiviazione per iniziare a ricevere questi log:
- Azure Data Lake Storage Gen1: seguire le istruzioni in Abilitare la registrazione diagnostica per l'account Data Lake Storage Gen1.
- Azure Data Lake Storage Gen2: configurare con PowerShell con il comando
Set-AzStorageServiceLoggingProperty
. Specificare 2.0 come versione, perché il formato della voce di log 2.0 include il nome dell'entità utente nella richiesta.
Abilitare il pass-through delle credenziali di Azure Data Lake Storage per un cluster a concorrenza elevata
I cluster a concorrenza elevata possono essere condivisi da più utenti. Supportano solo Python e SQL con il pass-through delle credenziali di Azure Data Lake Storage.
Importante
L'abilitazione del pass-through delle credenziali di Azure Data Lake Storage per un cluster a concorrenza elevata blocca tutte le porte nel cluster, ad eccezione delle porte 44, 53 e 80.
- Quando si crea un cluster, impostare la Modalità cluster su Concorrenza elevata.
- In Opzioni avanzate, selezionare Abilita il passthrough delle credenziali per l'accesso ai dati a livello utente e consenti solo comandi Python e SQL.
Abilitare il passthrough di credenziali di Azure Data Lake Storage per un cluster standard
I cluster standard con pass-through delle credenziali sono limitati a un singolo utente. I cluster standard supportano Python, SQL, Scala e R. In Databricks Runtime 10.4 LTS e versioni successive è supportato sparklyr.
È necessario assegnare un utente alla creazione del cluster, ma questo può essere modificato da un utente con autorizzazioni CAN MANAGE in qualsiasi momento per sostituire l'utente originale.
Importante
L'utente assegnato al cluster deve disporre almeno dell'autorizzazione CAN ATTACH TO per eseguire i comandi nel cluster. Gli amministratori dell'area di lavoro e l'autore del cluster dispongono delle autorizzazioni CAN MANAGE, ma non possono eseguire comandi nel cluster a meno che non siano l'utente del cluster designato.
- Quando si crea un cluster, impostare la modalità cluster su Standard.
- In Opzioni avanzate selezionare Abilita pass-through delle credenziali per l'accesso ai dati a livello di utente e selezionare il nome utente dall'elenco a discesa Accesso utente singolo.
Creare un contenitore
I contenitori consentono di organizzare gli oggetti in un account di archiviazione di Azure.
Accedere ad Azure Data Lake Storage con il pass-through delle credenziali
Dopo aver configurato il pass-through delle credenziali di Azure Data Lake Storage e aver creato contenitori di archiviazione, è possibile accedere ai dati direttamente in Azure Data Lake Storage Gen1 usando un percorso adl://
e Azure Data Lake Storage Gen2 usando un percorso abfss://
.
Azure Data Lake Storage Gen1
Python
spark.read.format("csv").load("adl://<storage-account-name>.azuredatalakestore.net/MyData.csv").collect()
R
# SparkR
library(SparkR)
sparkR.session()
collect(read.df("adl://<storage-account-name>.azuredatalakestore.net/MyData.csv", source = "csv"))
# sparklyr
library(sparklyr)
sc <- spark_connect(method = "databricks")
sc %>% spark_read_csv("adl://<storage-account-name>.azuredatalakestore.net/MyData.csv") %>% sdf_collect()
- Sostituire
<storage-account-name>
con il nome per l'account di archiviazione ADLS Gen1.
Azure Data Lake Storage Gen2
Python
spark.read.format("csv").load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/MyData.csv").collect()
R
# SparkR
library(SparkR)
sparkR.session()
collect(read.df("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/MyData.csv", source = "csv"))
# sparklyr
library(sparklyr)
sc <- spark_connect(method = "databricks")
sc %>% spark_read_csv("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/MyData.csv") %>% sdf_collect()
- Sostituire
<container-name>
con il nome di un contenitore presente nell’account di archiviazione ADLS Gen2. - Sostituire
<storage-account-name>
con il nome per l'account di archiviazione ADLS Gen2.
Montare Azure Data Lake Storage in DBFS usando il pass-through delle credenziali
È possibile montare un account di Azure Data Lake Storage o una cartella al suo interno in Cos’è DBFS? Il montaggio è un puntatore a Data Lake Store, quindi i dati non vengono mai sincronizzati in locale.
Quando si montano dati usando un cluster abilitato con il pass-through delle credenziali di Azure Data Lake Storage, qualsiasi lettura o scrittura nel punto di montaggio usa le credenziali di Microsoft Entra ID. Questo punto di montaggio sarà visibile ad altri utenti, ma gli unici che avranno accesso in lettura e scrittura sono quelli che:
- Hanno accesso all'account di archiviazione di Azure Data Lake Storage sottostante
- Usano un cluster abilitato per il pass-through delle credenziali di Azure Data Lake Storage
Azure Data Lake Storage Gen1
Per montare una risorsa di Azure Data Lake Storage Gen1 o una cartella al suo interno, usare i comandi seguenti:
Python
configs = {
"fs.adl.oauth2.access.token.provider.type": "CustomAccessTokenProvider",
"fs.adl.oauth2.access.token.custom.provider": spark.conf.get("spark.databricks.passthrough.adls.tokenProviderClassName")
}
# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
source = "adl://<storage-account-name>.azuredatalakestore.net/<directory-name>",
mount_point = "/mnt/<mount-name>",
extra_configs = configs)
Scala
val configs = Map(
"fs.adl.oauth2.access.token.provider.type" -> "CustomAccessTokenProvider",
"fs.adl.oauth2.access.token.custom.provider" -> spark.conf.get("spark.databricks.passthrough.adls.tokenProviderClassName")
)
// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
source = "adl://<storage-account-name>.azuredatalakestore.net/<directory-name>",
mountPoint = "/mnt/<mount-name>",
extraConfigs = configs)
- Sostituire
<storage-account-name>
con il nome per l'account di archiviazione ADLS Gen2. - Sostituire
<mount-name>
con il nome del punto di montaggio previsto in DBFS.
Azure Data Lake Storage Gen2
Per montare un file system di Azure Data Lake Storage Gen2 o una cartella al suo interno, usare i comandi seguenti:
Python
configs = {
"fs.azure.account.auth.type": "CustomAccessToken",
"fs.azure.account.custom.token.provider.class": spark.conf.get("spark.databricks.passthrough.adls.gen2.tokenProviderClassName")
}
# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
mount_point = "/mnt/<mount-name>",
extra_configs = configs)
Scala
val configs = Map(
"fs.azure.account.auth.type" -> "CustomAccessToken",
"fs.azure.account.custom.token.provider.class" -> spark.conf.get("spark.databricks.passthrough.adls.gen2.tokenProviderClassName")
)
// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
mountPoint = "/mnt/<mount-name>",
extraConfigs = configs)
- Sostituire
<container-name>
con il nome di un contenitore presente nell’account di archiviazione ADLS Gen2. - Sostituire
<storage-account-name>
con il nome per l'account di archiviazione ADLS Gen2. - Sostituire
<mount-name>
con il nome del punto di montaggio previsto in DBFS.
Avviso
Non fornire le chiavi di accesso dell'account di archiviazione o le credenziali dell'entità servizio per l'autenticazione al punto di montaggio. Ciò consentirebbe ad altri utenti di accedere al file system usando tali credenziali. Lo scopo del pass-through delle credenziali di Azure Data Lake Storage è impedire l'uso di tali credenziali e garantire che l'accesso al file system sia limitato agli utenti che hanno accesso all'account azure Data Lake Storage sottostante.
Sicurezza
È sicuro condividere cluster pass-through delle credenziali di Azure Data Lake Storage con altri utenti. Si sarà isolati l'uno dall'altro e non sarà in grado di leggere o usare le credenziali dell'altro.
Funzionalità supportate
Funzionalità | Versione minima di Databricks Runtime | Note |
---|---|---|
Python e SQL | 5.5 | |
Azure Data Lake Storage Gen1 | 5.5 | |
%run |
5.5 | |
DBFS | 5.5 | Le credenziali vengono passate solo se il percorso DBFS viene risolto in una posizione in Azure Data Lake Storage Gen1 o Gen2. Per i percorsi DBFS che si risolvono in altri sistemi di archiviazione, specificare le credenziali con un metodo diverso. |
Azure Data Lake Storage Gen2 | 5.5 | |
memorizzazione nella cache del disco | 5.5 | |
API ML PySpark | 5.5 | Le seguenti classi ML non sono supportate: - org/apache/spark/ml/classification/RandomForestClassifier - org/apache/spark/ml/clustering/BisectingKMeans - org/apache/spark/ml/clustering/GaussianMixture - org/spark/ml/clustering/KMeans - org/spark/ml/clustering/LDA - org/spark/ml/evaluation/ClusteringEvaluator - org/spark/ml/feature/HashingTF - org/spark/ml/feature/OneHotEncoder - org/spark/ml/feature/StopWordsRemover - org/spark/ml/feature/VectorIndexer - org/spark/ml/feature/VectorSizeHint - org/spark/ml/regression/IsotonicRegression - org/spark/ml/regression/RandomForestRegressor - org/spark/ml/util/DatasetUtils |
Variabili di trasmissione | 5.5 | All'interno di PySpark è previsto un limite per le dimensioni delle funzioni definite dall'utente Python che è possibile costruire, poiché le funzioni definite dall'utente di grandi dimensioni vengono inviate come variabili di trasmissione. |
Librerie con ambito Notebook | 5.5 | |
Scala | 5.5 | |
SparkR | 6.0 | |
sparklyr | 10.1 | |
Eseguire un Notebook di Databricks da un altro Notebook | 6.1 | |
API ML PySpark | 6.1 | Tutte le classi di ML PySpark supportate. |
Metriche del cluster | 6.1 | |
Databricks Connect | 7.3 | Il pass-through è supportato nei cluster standard. |
Limitazioni
Le funzionalità seguenti non sono supportate con il pass-through delle credenziali di Azure Data Lake Storage:
%fs
Usare invece il comando dbutils.fs equivalente.- Processi Databricks.
- Le informazioni di riferimento sull'API REST di Databricks.
- Unity Catalog.
- Controllo di accesso a tabelle. Le autorizzazioni concesse dal pass-through delle credenziali di Azure Data Lake Storage possono essere usate per bypassare le autorizzazioni con granularità fine degli ACL di tabella, mentre le restrizioni aggiuntive degli ACL di tabella vincolano alcuni dei vantaggi offerti dal pass-through delle credenziali. In particolare:
- Se si dispone dell'autorizzazione Microsoft Entra ID per accedere ai file di dati sottostanti a una determinata tabella, si avranno le autorizzazioni complete per tale tabella tramite l'API RDD, indipendentemente dalle restrizioni applicate tramite gli ACL di tabella.
- Le autorizzazioni ACL della tabella vengono vincolate solo quando si usa l'API DataFrame. Se si tenta di leggere i file direttamente con l'API DataFrame, verranno visualizzati avvisi relativi alla mancata autorizzazione
SELECT
per qualsiasi file, anche se è possibile leggere tali file direttamente tramite l'API RDD. - Non sarà possibile leggere da tabelle supportate da file system diversi da Azure Data Lake Storage, anche se si dispone dell'autorizzazione ACL di tabella per leggere le tabelle.
- I metodi seguenti negli oggetti SparkContext (
sc
) e SparkSession (spark
):- Metodi deprecati.
- Metodi come
addFile()
eaddJar()
, che consentono agli utenti non amministratori di richiamare il codice Scala. - Qualsiasi metodo che accede a un file system diverso da Azure Data Lake Storage Gen1 o Gen2 (per accedere ad altri file system in un cluster con il pass-through delle credenziali di Azure Data Lake Storage abilitato, usare un metodo diverso per specificare le credenziali e vedere la sezione relativa ai file system attendibili in Risoluzione dei problemi).
- Le API Hadoop precedenti (
hadoopFile()
ehadoopRDD()
). - Le API di streaming, poiché le credenziali passate scadevano mentre il flusso era ancora in esecuzione.
- I montaggi DBFS (
/dbfs
) sono disponibili solo in Databricks Runtime 7.3 LTS e versioni successive. I punti di montaggio con pass-through delle credenziali configurati non sono supportati tramite questo percorso. - Azure Data Factory.
- MLflow nei cluster a concorrenza elevata.
- Pacchetto Python azureml-sdk in cluster a concorrenza elevata.
- Non è possibile estendere la durata dei token pass-through di Microsoft Entra ID usando i criteri di durata del token di Microsoft Entra ID. Di conseguenza, se si invia un comando al cluster che richiede più di un'ora, l'operazione avrà esito negativo se si accede a una risorsa di Azure Data Lake Storage dopo l'intervallo di 1 ora.
- Quando si usa Hive 2.3 e versioni successive, non è possibile aggiungere una partizione in un cluster con pass-through delle credenziali abilitato. Per altre informazioni, vedere la relativa sezione Risoluzione dei problemi.
Notebook di esempio
I Notebook seguenti illustrano il pass-through delle credenziali di Azure Data Lake Storage per Azure Data Lake Storage Gen1 e Gen2.
Notebook pass-through di Azure Data Lake Storage Gen1
Notebook pass-through di Azure Data Lake Storage Gen2
Risoluzione dei problemi
py4j.security.Py4JSecurityException: … non è incluso nell'elenco elementi consentiti
Questa eccezione viene generata quando si accede a un metodo che Azure Databricks non ha contrassegnato esplicitamente come sicuro per i cluster con pass-through delle credenziali di Azure Data Lake Storage. Nella maggior parte dei casi, significa che il metodo potrebbe consentire a un utente in un cluster con passthrough delle credenziali di Azure Data Lake Storage di accedere alle credenziali di un altro utente.
org.apache.spark.api.python.PythonSecurityException: il percorso … usa un file system non attendibile
Questa eccezione viene generata quando si è tentato di accedere a un file system che il cluster con pass-through delle credenziali di Azure Data Lake Storage non riconosce come sicuro. L'uso di un file system non attendibile potrebbe consentire a un utente di un cluster Azure Data Lake Storage di accedere alle credenziali di un altro utente, pertanto non è consentito l'uso di tutti i file system di cui non si è certi che possano essere utilizzati in modo sicuro.
Per configurare il set di file system attendibili in un cluster con pass-through delle credenziali di Azure Data Lake Storage, impostare la chiave di configurazione di Spark spark.databricks.pyspark.trustedFilesystems
nel cluster sotto forma di elenco delimitato da virgole dei nomi di classe che sono implementazioni attendibili di org.apache.hadoop.fs.FileSystem
.
L'aggiunta di una partizione non riesce con AzureCredentialNotFoundException
quando è abilitato il pass-through delle credenziali
Quando si usa Hive 2.3-3.1, se si tenta di aggiungere una partizione in un cluster con pass-through delle credenziali abilitato, si verifica l'eccezione seguente:
org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:com.databricks.backend.daemon.data.client.adl.AzureCredentialNotFoundException: Could not find ADLS Gen2 Token
Per risolvere temporaneamente questo problema, aggiungere le partizioni in un cluster senza pass-through delle credenziali abilitato.