Use as credenciais do serviço Unity Catalog para se conectar a serviços de nuvem externos

Este artigo descreve como usar uma credencial de serviço no Unity Catalog para se conectar a serviços de nuvem externos. Um objeto de credencial de serviço no Unity Catalog encapsula uma credencial de nuvem de longo prazo que fornece acesso a um serviço de nuvem externo ao qual os usuários precisam se conectar a partir do Azure Databricks.

Consulte também:

Requisitos

Antes de poder usar uma credencial de serviço para se conectar a um serviço de nuvem externo, você deve ter:

  • Um espaço de trabalho do Azure Databricks habilitado para o Catálogo Unity.

  • Um recurso de computação que está no Databricks Runtime 16.2 ou superior.

    Os armazéns SQL não suportam a utilização direta de credenciais de serviço. Veja Usar uma credencial de serviço num UDF Python.

    A versão Public Preview das credenciais de serviço está disponível no Databricks Runtime 15.4 LTS e superior, com suporte a Python mas sem suporte a Scala.

  • Uma credencial de serviço criada em seu metastore do Unity Catalog que dá acesso ao serviço de nuvem.

  • O privilégio ACCESS sobre a credencial de serviço ou a propriedade da credencial de serviço.

Use uma credencial de serviço no seu código

Esta seção fornece exemplos de uso de credenciais de serviço em um bloco de anotações. Substitua os valores do marcador de posição. Esses exemplos não mostram necessariamente a instalação das bibliotecas necessárias, que dependem do serviço cliente que você deseja acessar.

Só é suportado Python.

Use uma credencial de serviço num UDF Python

Em UDFs, use databricks.service_credentials.getServiceCredentialsProvider() para acessar credenciais de serviço. A dbutils.credentials.getServiceCredentialsProvider() função usada em notebooks não está disponível em contextos de execução UDF.

Os requisitos dependem do tipo de UDF:

Tipo UDF Requisitos
UDF escalar de âmbito de sessão do PySpark Databricks Runtime 17.1 ou superior em compute clássico, ou um bloco de notas sem servidor ou uma sessão de tarefa a executar a versão 3 do ambiente ou superior.
Catálogo Batch Unity Python UDF Databricks Runtime 16.3 ou superior em processamento clássico; processamento serverless; armazéns de dados SQL Pro e serverless. A versão 6 do ambiente não é obrigatória.
Catálogo Scalar Unity Python UDF Databricks Runtime 18.1 ou superior em computação clássica. Em processamento sem servidor e em SQL warehouses Pro e Serverless, defina explicitamente o environment_version da UDF como 6 ou superior. Omitir toda a cláusula ENVIRONMENT ou definir environment_version = 'None' não ativa esta funcionalidade nestes tipos de computação. A computação clássica não requer a versão 6 do ambiente.

Para fazer chamadas de saída a partir de uma UDF Python escalar ou em lote do Unity Catalog num armazém SQL sem servidor, ative a pré-visualização pública Enable networking for isolated workloads in Serverless SQL Warehouses na página Pré-visualizações da sua área de trabalho. Os armazéns Pro SQL não exigem esta pré-visualização.

Para criar uma UDF do Unity Catalog que declare uma credencial de serviço, o criador da função deve ter ACCESS na credencial. Na computação sem servidor, nos armazéns de dados SQL Pro e sem servidor e na computação em modo de acesso padrão, os autores das chamadas precisam dos privilégios de função habituais, incluindo EXECUTE, mas não precisam de ACCESS na credencial. No modo de computação de acesso dedicado, os autores das chamadas também têm de ter ACCESS.

Os UDFs com âmbito de sessão PySpark utilizam as permissões do chamador. Quem faz a chamada tem de ter ACCESS na credencial de serviço; no modo de computação de acesso dedicado, quem faz a chamada tem de ter MANAGE.

Ver versões do ambiente e requisitos de dependências personalizadas.

exemplo Python: configurar um cliente SDK do Azure para usar uma credencial de serviço específica

from azure.keyvault.secrets import SecretClient # example Azure SDK client

credential = dbutils.credentials.getServiceCredentialsProvider('your-service-credential')
vault_url = "https://your-keyvault-name.vault.azure.net/"
client = SecretClient(vault_url=vault_url, credential=credential)

Especificar uma credencial de serviço padrão para um recurso de computação

Opcionalmente, você pode especificar uma credencial de serviço padrão para um cluster de computação para todos os fins ou trabalhos definindo uma variável de ambiente. Por padrão, o SDK usa essa credencial de serviço se nenhuma autenticação for fornecida. Os utilizadores continuam a necessitar de ACCESS nessa credencial de serviço para se ligarem ao serviço externo na nuvem. O Databricks não recomenda essa abordagem, porque torna seu código menos portátil do que nomear a credencial de serviço em seu código.

Nota

A computação sem servidor e os armazéns SQL não oferecem suporte a variáveis de ambiente e, portanto, não oferecem suporte a credenciais de serviço padrão.

  1. Abra a página de edição do cluster.

    Consulte Gerenciar computação clássica.

  2. Clique em Avançado na parte inferior da página e vá para o separador Spark.

  3. Adicione a seguinte entrada em Variáveis de ambiente, substituindo <your-service-credential>:

    DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME=<your-service-credential>

Os exemplos de código a seguir não especificam uma credencial de serviço. Em vez disso, eles usam a credencial de serviço especificada na variável de ambiente DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME:

Python

Se você estiver usando uma credencial de serviço padrão, não precisará especificar credenciais como um argumento:

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
vault_url = "https://your-keyvault-name.vault.azure.net/"
client = SecretClient(vault_url=vault_url, credential=credential)

Compare isso com o exemplo em exemplo Python: configure um cliente SDK do Azure para usar uma credencial de serviço específica, que não importa DefaultAzureCredential e adiciona a especificação de credencial:

credential = dbutils.credentials.getServiceCredentialsProvider('your-service-credential')