Acessar o Armazenamento do Azure Data Lake usando a passagem de credenciais do Microsoft Entra ID (legado)
Importante
Esta documentação foi desativada e pode não ser atualizada.
A passagem de credenciais foi preterida a partir do Databricks Runtime 15.0 e será removida em versões futuras do Databricks Runtime. O Databricks recomenda que você atualize para o Unity Catalog. O Unity Catalog simplifica a segurança e a governança de seus dados, fornecendo um local central para administrar e auditar o acesso aos dados em vários espaços de trabalho em sua conta. Consulte O que é Unity Catalog?.
Para maior segurança e postura de governança, entre em contato com sua equipe de conta do Azure Databricks para desabilitar a passagem de credenciais em sua conta do Azure Databricks.
Nota
Este artigo contém referências ao termo whitelisted, um termo que o Azure Databricks não usa. Quando o termo for removido do software, iremos remove-lo deste artigo.
Pode autenticar-se automaticamente no Aceder ao Azure Data Lake Storage Gen1 a partir do Azure Databricks (ADLS Gen1) e no ADLS Gen2 a partir de clusters do Azure Databricks utilizando a mesma identidade de ID do Microsoft Entra que utiliza para iniciar sessão no Azure Databricks. Quando você habilita a passagem de credenciais do Armazenamento do Azure Data Lake para seu cluster, os comandos executados nesse cluster podem ler e gravar dados no Armazenamento do Azure Data Lake sem exigir que você configure o credentials principal de serviço para acesso ao armazenamento.
O pass-through de credenciais do Azure Data Lake Storage só é suportado com o Azure Data Lake Storage Gen1 e Gen2. O Armazenamento de blobs do Azure não suporta o pass-through de credenciais.
Este artigo abrange:
- Habilitando a passagem de credenciais para clusters padrão e de alta simultaneidade.
- Configurando a passagem de credenciais e inicializando recursos de armazenamento em contas ADLS.
- Acessar recursos ADLS diretamente quando a passagem de credenciais está habilitada.
- Aceder a recursos ADLS através de um ponto de montagem quando a passagem de credenciais está ativada.
- Recursos e limitações suportados ao usar a passagem de credenciais.
Os blocos de anotações estão incluídos para fornecer exemplos de uso de passagem de credenciais com contas de armazenamento ADLS Gen1 e ADLS Gen2.
Requerimentos
- Plano Premium. Veja Atualizar ou Mudar uma Área de Trabalho do Azure Databricks para uma Versão Anterior para obter os detalhes sobre a atualização de um plano standard para um plano premium.
- Uma conta de armazenamento do Azure Data Lake Storage Gen1 ou Gen2. As contas de armazenamento do Azure Data Lake Storage Gen2 devem utilizar o espaço de nomes hierárquico para funcionarem com o pass-through de credenciais do Azure Data Lake Storage. Veja Criar uma conta de armazenamento para obter as instruções sobre a criação de uma nova conta do ADLS Gen2, incluindo como ativar o espaço de nomes hierárquico.
- Permissões dos utilizadores devidamente configuradas para o Azure Data Lake Storage. Um administrador do Azure Databricks precisa garantir que os usuários tenham as funções corretas, por exemplo, Colaborador de Dados de Blob de Armazenamento, para ler e gravar dados armazenados no Armazenamento do Azure Data Lake. Veja Utilizar o portal do Azure para atribuir uma função do Azure para aceder a dados de blobs e filas.
- Compreenda os privilégios dos administradores de espaço de trabalho em espaços de trabalho habilitados para passagem e revise suas atribuições de administrador de espaço de trabalho existentes. Os administradores de espaço de trabalho podem gerenciar operações para seu espaço de trabalho, incluindo a adição de usuários e entidades de serviço, a criação de clusters e a delegação de outros usuários para serem administradores de espaço de trabalho. As tarefas de gerenciamento de espaço de trabalho, como gerenciar a propriedade do trabalho e exibir blocos de anotações, podem dar acesso indireto aos dados registrados no Armazenamento do Azure Data Lake. O administrador do espaço de trabalho é uma função privilegiada que você deve distribuir com cuidado.
- Não é possível usar um cluster configurado com ADLS credentials, por exemplo, entidade de serviço credentials, com transferência de credenciais.
Importante
Não poderá autenticar-se no Azure Data Lake Storage com a sua ID do Microsoft Entra credentials se estiver atrás de um firewall que não tenha sido configurado para permitir o tráfego para a ID do Microsoft Entra. O Azure Firewall bloqueia o acesso ao Ative Directory, por predefinição. Para permitir o acesso, configure a marca de serviço AzureActiveDirectory. Pode encontrar informações equivalentes para aplicações virtuais de rede na etiqueta AzureActiveDirectory no ficheiro JSON de Intervalos de IP e Etiquetas de Serviço do Azure. Para obter mais informações, consulte Tags de serviço do Firewall do Azure.
Recomendações de registo
Você pode registrar identidades passadas para o armazenamento ADLS nos logs de diagnóstico de armazenamento do Azure. As identidades de log permitem que as solicitações ADLS sejam vinculadas a usuários individuais de clusters do Azure Databricks. Ative o registo de diagnóstico na sua conta de armazenamento para começar a receber estes registos:
- Azure Data Lake Storage Gen1: Siga as instruções em Habilitar o log de diagnóstico para sua conta do Data Lake Storage Gen1.
- Azure Data Lake Storage Gen2: Configure usando o PowerShell com o
Set-AzStorageServiceLoggingProperty
comando. Especifique 2.0 como a versão, porque o formato de entrada de log 2.0 inclui o nome principal do usuário na solicitação.
Habilitar a passagem de credenciais do Armazenamento do Azure Data Lake para um cluster de alta simultaneidade
Clusters de alta simultaneidade podem ser compartilhados por vários usuários. Eles dão suporte apenas a Python e SQL com passagem de credenciais do Armazenamento do Azure Data Lake.
Importante
Habilitar a passagem de credenciais do Armazenamento do Azure Data Lake para um cluster de alta simultaneidade bloqueia todas as portas no cluster , exceto as portas 44, 53 e 80.
- Quando você criar um cluster, setModo de Cluster para de Simultaneidade Alta .
- Em Opções Avançadas, selectHabilitar passagem de credenciais para acesso a dados no nível do usuário e permitir apenas comandos Python e SQL.
Habilitar a passagem de credenciais do Armazenamento do Azure Data Lake para um cluster Standard
Os clusters padrão com passagem de credenciais são limitados a um único usuário. Os clusters padrão suportam Python, SQL, Scala e R. No Databricks Runtime 10.4 LTS e superior, o sparklyr é suportado.
Você deve atribuir um usuário na criação do cluster, mas o cluster pode ser editado por um usuário com permissões CAN MANAGE a qualquer momento para substituir o usuário original.
Importante
O usuário atribuído ao cluster deve ter pelo menos a permissão CAN ATTACH TO para o cluster para executar comandos no cluster. Os administradores do espaço de trabalho e o criador do cluster têm permissões CAN MANAGE, mas não podem executar comandos no cluster, a menos que sejam o usuário designado do cluster.
- Quando você criar um cluster, set o Modo de Cluster para Standard .
- Em Opções Avançadas , selectHabilitar passagem de credenciais para acesso a dados em nível de usuário e select o nome de usuário na lista suspensa Acesso de Usuário Único.
Criar um contêiner
Os contêineres fornecem uma maneira de organizar objetos em uma conta de armazenamento do Azure.
Acessar o Armazenamento do Azure Data Lake diretamente usando a passagem de credenciais
Depois de configurar a passagem de credenciais do Armazenamento do Azure Data Lake e criar contêineres de armazenamento, você pode acessar dados diretamente no Azure Data Lake Storage Gen1 usando um adl://
caminho e no Azure Data Lake Storage Gen2 usando um abfss://
caminho.
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()
- Substitua
<storage-account-name>
pelo nome da conta de armazenamento ADLS Gen1.
O Armazenamento do Azure Data Lake Ger2
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()
- Substitua
<container-name>
pelo nome de um contêiner na conta de armazenamento ADLS Gen2. - Substitua
<storage-account-name>
pelo nome da conta de armazenamento ADLS Gen2.
Monte o Armazenamento Data Lake do Azure para DBFS usando passagem de credenciais
Você pode montar uma conta do Armazenamento do Azure Data Lake ou uma pasta dentro dela em O que é DBFS?. A montagem é um ponteiro para um Data Lake Store, pelo que os dados nunca são sincronizados localmente.
Quando se monta dados usando um cluster ativado com a passagem de credenciais do Azure Data Lake Storage, qualquer leitura ou gravação no ponto de montagem usa o Microsoft Entra ID credentials. Esse ponto de montagem será visível para outros usuários, mas os únicos usuários que terão acesso de leitura e gravação são aqueles que:
- Ter acesso à conta de armazenamento subjacente do Armazenamento do Azure Data Lake
- Estão usando um cluster habilitado para a passagem de credenciais do Armazenamento do Azure Data Lake
Azure Data Lake Storage Gen1
Para montar um recurso do Azure Data Lake Storage Gen1 ou uma pasta dentro dele, use os seguintes comandos:
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)
- Substitua
<storage-account-name>
pelo nome da conta de armazenamento ADLS Gen2. - Substitua
<mount-name>
pelo nome do ponto de montagem pretendido no DBFS.
O Armazenamento do Azure Data Lake Ger2
Para montar um sistema de arquivos do Azure Data Lake Storage Gen2 ou uma pasta dentro dele, use os seguintes comandos:
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)
- Substitua
<container-name>
pelo nome de um contêiner na conta de armazenamento ADLS Gen2. - Substitua
<storage-account-name>
pelo nome da conta de armazenamento ADLS Gen2. - Substitua
<mount-name>
pelo nome do ponto de montagem pretendido no DBFS.
Aviso
Não forneça as chaves de acesso da conta de armazenamento ou credentials da entidade de serviço para autenticar no ponto de montagem. Isso permitiria que outros utilizadores tivessem acesso ao sistema de arquivos através desses credentials. O objetivo da passagem de credenciais do Armazenamento do Azure Data Lake é impedir que você having utilize esses credentials e garantir que o acesso ao sistema de ficheiros seja restrito aos utilizadores que têm acesso à conta subjacente do Armazenamento do Azure Data Lake.
Segurança
É seguro compartilhar clusters de passagem de credenciais do Armazenamento do Azure Data Lake com outros usuários. Vocês ficarão isolados uns dos outros e não serão capazes de ler ou usar o credentialsum do outro.
Funcionalidades suportadas
Caraterística | Versão mínima de tempo de execução do Databricks | Notas |
---|---|---|
Python e SQL | 5,5 | |
Armazenamento do Azure Data Lake Ger1 | 5,5 | |
%run |
5,5 | |
DBFS | 5,5 | Credentials são transmitidos apenas se o caminho DBFS for resolvido para um local no Azure Data Lake Storage Gen1 ou Gen2. Para caminhos DBFS que conduzem a outros sistemas de armazenamento, use um método diferente para especificar o seu credentials. |
Azure Data Lake Storage Gen2 | 5,5 | |
Cache de disco | 5,5 | |
PySpark ML API | 5,5 |
As seguintes classes de ML não são suportadas: - 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 |
Variáveis de transmissão | 5,5 | Dentro do PySpark, há uma limit sobre o tamanho das UDFs Python que você pode construir, uma vez que UDFs grandes são enviadas como variáveis de transmissão. |
Bibliotecas com escopo de bloco de anotações | 5,5 | |
Scala | 5,5 | |
SparkR | 6,0 | |
sparklyr | 10.1 | |
Orquestre notebooks e modularize código em notebooks | 6.1 | |
PySpark ML API | 6.1 | Todas as classes PySpark ML suportadas. |
Métricas de cluster | 6.1 | |
Databricks Connect | 7.3 | A passagem é suportada em clusters Standard. |
Limitações
Os seguintes recursos não são suportados com a passagem de credenciais do Armazenamento do Azure Data Lake:
-
%fs
(use o comando dbutils.fs equivalente em vez disso). - Trabalhos Databricks.
- A referência da API REST do Databricks.
- Unidade Catalog.
-
Table controle de acesso. As permissões concedidas pela passagem de credenciais do Armazenamento do Azure Data Lake podem ser usadas para ignorar as permissões refinadas de table ACLs, enquanto as restrições extras de ACLs table restringirão alguns dos benefícios que você get da passagem de credenciais. Em especial:
- Se você tiver permissão do Microsoft Entra ID para acessar os arquivos de dados subjacentes a uma table específica, você terá permissões totais nesse table por meio da API RDD, independentemente das restrições impostas a eles por meio de ACLs table.
- Você será restringido pelas permissões ACL table apenas ao utilizar a API DataFrame. Você verá avisos sobre a falta de permissão having
SELECT
em qualquer arquivo, se tentar ler os ficheiros diretamente com a API DataFrame, mesmo que possa lê-los diretamente através da API RDD. - Você não poderá ler a partir de tables apoiado por sistemas de ficheiros distintos do Armazenamento Azure Data Lake, mesmo que tenha permissão table ACL para ler o tables.
- Os seguintes métodos em objetos SparkContext (
sc
) e SparkSession (spark
):- Métodos preteridos.
- Métodos como
addFile()
eaddJar()
que permitiriam que usuários não administradores chamassem o código Scala. - Qualquer método que aceda a um sistema de ficheiros diferente do Azure Data Lake Storage Gen1 ou Gen2 (para aceder a outros sistemas de ficheiros num cluster com a passagem de credenciais habilitada para o Azure Data Lake Storage, utilize um método diferente para especificar o seu credentials e consulte a seção sobre sistemas de ficheiros confiáveis em Solução de Problemas).
- As antigas APIs do Hadoop (
hadoopFile()
ehadoopRDD()
). - APIs de streaming, uma vez que o credentials passado expiraria enquanto o fluxo ainda estivesse em execução.
-
As montagens DBFS (
/dbfs
) estão disponíveis apenas no Databricks Runtime 7.3 LTS e superior. Não há suporte para pontos de montagem com passagem de credenciais configurada por esse caminho. - Azure Data Factory.
- MLflow em clusters de alta simultaneidade.
- pacote azureml-sdk Python em clusters de alta simultaneidade.
- Não é possível estender o tempo de vida dos tokens de passagem do Microsoft Entra ID usando as políticas de tempo de vida do token do Microsoft Entra ID. Como consequência, se você enviar um comando para o cluster que leva mais de uma hora, ele falhará se um recurso do Armazenamento do Azure Data Lake for acessado após a marca de 1 hora.
- Ao usar o Hive 2.3 e superior, não é possível adicionar um partition em um cluster com a passagem de credenciais habilitada. Para obter mais informações, consulte a seção de solução de problemas relevante.
Exemplos de blocos de notas
Os blocos de anotações a seguir demonstram a passagem de credenciais do Armazenamento do Azure Data Lake para o Azure Data Lake Storage Gen1 e Gen2.
Bloco de anotações de passagem do Azure Data Lake Storage Gen1
Bloco de anotações de passagem do Azure Data Lake Storage Gen2
Resolução de Problemas
py4j.security.Py4JSecurityException: ... não está na lista de permissões
Esta exceção é emitida quando acede a um método que o Azure Databricks não marcou explicitamente como seguro para clusters de pass-through de credenciais do Azure Data Lake Storage. Na maioria das vezes, isso significa que o método pode permitir que um usuário num cluster de passagem de credenciais do Azure Data Lake Storage aceda à credentialsde outro usuário.
org.apache.spark.api.python.PythonSecurityException: Caminho ... usa um sistema de arquivos não confiável
Esta exceção é gerada quando tenta aceder a um sistema de ficheiros que não é reconhecido como seguro pelo cluster do pass-through de credenciais do Azure Data Lake Storage. O uso de um sistema de ficheiros não confiável pode permitir que um utilizador num cluster de passagem de credenciais do Armazenamento do Azure Data Lake aceda à credentialsde outro utilizador. Assim, proibimos todos os sistemas de ficheiros sobre os quais não temos confiança de que estão a ser utilizados de forma segura.
Para configurar o set de sistemas de arquivos confiáveis em um cluster de passagem de credenciais do Armazenamento Azure Data Lake, set que a chave conf do Spark spark.databricks.pyspark.trustedFilesystems
nesse cluster seja uma list separada por vírgulas dos nomes de classe que são implementações confiáveis de org.apache.hadoop.fs.FileSystem
.
A adição de um partition falha com AzureCredentialNotFoundException
quando a passagem de credenciais está habilitada
Ao usar o Hive 2.3-3.1, se você tentar adicionar um partition em um cluster com passagem de credenciais habilitada, ocorrerá a seguinte exceção:
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
Para contornar esse problema, adicione partições em um cluster sem passagem de credenciais habilitada.