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 atualize para o Unity Catalog. O Unity Catalog simplifica a segurança e a governança de seus dados, ao fornecer um local central para administrar e auditar o acesso aos dados em vários espaços de trabalho na sua conta. Veja O que é o 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 removê-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 as credenciais da entidade 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 credenciais ADLS, por exemplo, credenciais da entidade de serviço, com passagem de credenciais.
Importante
Você não pode se autenticar no Armazenamento do Azure Data Lake com suas credenciais de ID do Microsoft Entra se estiver atrás de um firewall que não tenha sido configurado para permitir o tráfego para o 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.
- Ao criar um cluster, defina o Modo de Cluster como Alta Simultaneidade.
- Em Opções Avançadas, selecione Habilitar 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.
- Ao criar um cluster, defina o Modo de Cluster como Padrão.
- Em Opções Avançadas, selecione Habilitar passagem de credenciais para acesso a dados no nível do usuário e selecione 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 você monta dados usando um cluster habilitado com passagem de credenciais do Armazenamento do Azure Data Lake, qualquer leitura ou gravação no ponto de montagem usa suas credenciais de ID do Microsoft Entra. 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 as credenciais da entidade de serviço para autenticar no ponto de montagem. Isso daria a outros usuários acesso ao sistema de arquivos usando essas credenciais. O objetivo da passagem de credenciais do Armazenamento do Azure Data Lake é evitar que você precise usar essas credenciais e garantir que o acesso ao sistema de arquivos seja restrito aos usuários 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 poderão ler ou usar as credenciais uns dos outros.
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 | As credenciais são passadas somente se o caminho DBFS for resolvido para um local no Azure Data Lake Storage Gen1 ou Gen2. Para caminhos DBFS que são resolvidos para outros sistemas de armazenamento, use um método diferente para especificar suas credenciais. |
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á um limite no 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 | |
Executar um bloco de notas Databricks a partir de outro bloco de notas | 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.
- Catálogo Unity.
- Controlo de acesso a tabelas. As permissões concedidas pela passagem de credenciais do Armazenamento do Azure Data Lake podem ser usadas para ignorar as permissões refinadas das ACLs de tabela, enquanto as restrições extras das ACLs de tabela restringirão alguns dos benefícios que você obtém da passagem de credenciais. Em especial:
- Se você tiver permissão de ID do Microsoft Entra para acessar os arquivos de dados subjacentes a uma tabela específica, você terá permissões totais nessa tabela por meio da API RDD, independentemente das restrições colocadas sobre eles por meio de ACLs de tabela.
- Você será restringido por permissões de ACLs de tabela somente ao usar a API DataFrame. Você verá avisos sobre não ter permissão
SELECT
em nenhum arquivo se tentar ler arquivos diretamente com a API DataFrame, mesmo que possa ler esses arquivos diretamente por meio da API RDD. - Você não poderá ler tabelas com suporte de sistemas de arquivos diferentes do Armazenamento Azure Data Lake, mesmo que tenha permissão de ACL de tabela para ler as tabelas.
- 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 acesse um sistema de arquivos diferente do Azure Data Lake Storage Gen1 ou Gen2 (para acessar outros sistemas de arquivos em um cluster com a passagem de credenciais do Armazenamento do Azure Data Lake habilitada, use um método diferente para especificar suas credenciais e consulte a seção sobre sistemas de arquivos confiáveis em Solução de problemas).
- As antigas APIs do Hadoop (
hadoopFile()
ehadoopRDD()
). - APIs de streaming, uma vez que as credenciais passadas expirariam 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 uma partição 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 dos casos, isto significa que o método pode permitir que um utilizador num cluster de pass-through de credenciais do Azure Data Lake Storage aceda às credenciais de outro utilizador.
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. Usar um sistema de arquivos não confiável pode permitir que um usuário em um cluster de passagem de credenciais do Armazenamento do Azure Data Lake acesse as credenciais de outro usuário, portanto, não permitimos que todos os sistemas de arquivos que não temos certeza de que estão sendo usados com segurança.
Para configurar o conjunto de sistemas de ficheiros fidedignos num cluster do pass-through de credenciais do Azure Data Lake Storage, defina a chave de configuração spark.databricks.pyspark.trustedFilesystems
do Apache Spark nesse cluster para ser uma lista de nomes de classes separada por vírgulas que são implementações fidedignas de org.apache.hadoop.fs.FileSystem
.
Adicionar uma partição falha quando AzureCredentialNotFoundException
a passagem de credenciais está habilitada
Ao utilizar o Hive 2.3-3.1, se tentar adicionar uma partição num cluster com o pass-through de credenciais ativado, 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.