Pular para o conteúdo principal

Use as credenciais do serviço Unity Catalog para se conectar a um serviço de nuvem externo

Este artigo descreve como usar uma credencial de serviço em Unity Catalog para se conectar a um serviço de nuvem externo. 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 Databricks.

Veja também:

Requisitos​

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

  • Um Databricks workspace que está habilitado para Unity Catalog.

  • Um recurso do compute que está no Databricks Runtime 16.2 ou acima.

    Os SQL warehouses não são suportados para o uso direto de credenciais de serviço. Consulte Usar uma credencial de serviço em um UDF do Python.

    A versão Public Preview do serviço credentials está disponível em Databricks Runtime 15.4 LTS e acima, com suporte a Python, mas sem suporte a Scala.

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

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

Use uma credencial de serviço em seu código​

Esta seção fornece exemplos de uso de credenciais de serviço em um Notebook. Substitua os valores do espaço reservado. Esses exemplos não mostram necessariamente a instalação da biblioteca necessária, que depende do serviço do cliente que o senhor deseja acessar.

Somente Python e Scala são compatíveis.

Usar uma credencial de serviço em uma UDF Python​

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

Os requisitos dependem do tipo de UDF:

Tipo de UDF

Requisitos

UDF escalar do PySpark com escopo de sessão

Databricks Runtime 17.1 ou superior em compute clássico, ou uma versão de ambiente de execução de sessão de job ou notebook serverless 3 ou superior.

UDF Python do Unity Catalog em lotes

Databricks Runtime 16.3 ou superior em compute clássico; compute serverless; SQL warehouses pro e serverless. A versão 6 do ambiente não é obrigatória.

UDF Python escalar do Unity Catalog

Databricks Runtime 18.1 ou acima em compute clássico. No compute serverless e em SQL warehouses pro e serverless, defina explicitamente o environment_version do UDF como 6 ou acima. A omissão de toda a cláusula ENVIRONMENT ou a configuração de environment_version = 'None' não ativa esse recurso nesses tipos de compute. O compute clássico não requer a versão de ambiente 6.

Tipo de UDF

Requisitos

UDF escalar do PySpark com escopo de sessão

Databricks Runtime 17.1 ou superior em compute clássico, ou uma versão de ambiente de execução de sessão de job ou notebook serverless 3 ou superior.

UDF Python do Unity Catalog em lotes

Databricks Runtime 16.3 ou superior em compute clássico; compute serverless; SQL warehouses pro e serverless. A versão 6 do ambiente não é obrigatória.

UDF Python escalar do Unity Catalog

Databricks Runtime 18.1 ou acima em compute clássico. No compute serverless e em SQL warehouses pro e serverless, defina explicitamente o environment_version do UDF como 6 ou acima. A omissão de toda a cláusula ENVIRONMENT ou a configuração de environment_version = 'None' não ativa esse recurso nesses tipos de compute. O compute clássico não requer a versão de ambiente 6.

Para fazer chamadas de saída de um UDF Python do Unity Catalog escalar ou lotes em um SQL warehouse serverless, habilite a visualização pública Enable networking for isolated workloads in Serverless SQL Warehouses na página Previews do seu workspace. Os SQL warehouses Pro não exigem esta versão preliminar.

Para criar um UDF do Unity Catalog que declare uma credencial de serviço, o criador da função deve ter ACCESS na credencial. Em compute serverless, SQL warehouses pro e serverless, e compute em modo de acesso padrão, os chamadores precisam dos privilégios de função usual, incluindo EXECUTE, mas não precisam de ACCESS na credencial. Em compute com modo de acesso dedicado, os chamadores também devem ter ACCESS.

As UDFs com escopo de sessão do PySpark usam as permissões do chamador. O chamador deve ter ACCESS na credencial de serviço; em compute com modo de acesso dedicado, o chamador deve ter MANAGE.

Consulte versões do ambiente e requisitos de dependência personalizados.

Exemplo em Python: Configurar uma sessão do boto3 para usar uma credencial de serviço específica​

Python
import boto3
boto3_session = boto3.Session(botocore_session=dbutils.credentials.getServiceCredentialsProvider('your-service-credential'), region_name='your-aws-region')
sm = boto3_session.client('secretsmanager')

Exemplo do Scala: Configurar uma sessão do AWS Java SDK para usar uma credencial de serviço específica​

Este exemplo usa uma credencial de serviço para fornecer acesso ao AWS S3 usando o AWS Java SDK.

Scala
import com.amazonaws.auth.AWSCredentialsProvider
import com.amazonaws.services.s3.AmazonS3ClientBuilder
import com.amazonaws.services.s3.model.ListObjectsV2Request

import com.databricks.dbutils_v1.DBUtilsHolder
val dbutils = DBUtilsHolder.dbutils

// Obtain the AWS credentials provider. The asInstanceOf cast prevents a type mismatch
val awsCredentialsProvider = dbutils.credentials.getServiceCredentialsProvider("your-service-credential").asInstanceOf[AWSCredentialsProvider]

// Create an S3 client using the credentials provider
val s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(awsCredentialsProvider)
.withRegion("us-east-1") // Specify your AWS region
.build()

// List objects in an S3 bucket
val bucketName = "your-bucket"
val request = new ListObjectsV2Request().withBucketName(bucketName)
val result = s3Client.listObjectsV2(request)

result.getObjectSummaries.forEach { summary =>
println(s" - ${summary.getKey}") }

Especifique uma credencial de serviço default para um recurso compute.​

Opcionalmente, o senhor pode especificar uma credencial de serviço default para um clustering multifuncional ou do Job compute definindo uma variável de ambiente. Por default, o SDK usa essa credencial de serviço se nenhuma autenticação for fornecida. Os usuários ainda precisam de ACCESS nessa credencial de serviço para se conectar ao serviço de nuvem externo. A Databricks não recomenda essa abordagem, pois ela torna seu código menos portátil do que nomear a credencial de serviço em seu código.

nota

serverless compute e SQL warehouse não suportam variável de ambiente e, portanto, não suportam default serviço credentials.

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

    Veja gerenciar classic compute.

  2. Clique em Advanced (Avançado ) na parte inferior da página e vá para a seção Spark tab.

  3. Adicione a seguinte entrada em variável 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
import boto3
sm = boto3.client('secretsmanager', region_name='your-aws-region')

Compare isso com o exemplo em Python example: Configurar uma sessão do boto3 para usar uma credencial de serviço específica, que adiciona a especificação da credencial:

Python
boto3_session = boto3.Session(botocore_session=dbutils.credentials.getServiceCredentialsProvider('your-service-credential'), region_name='your-aws-region')