Use as credenciais do serviço Unity Catalog para se conectar ao serviço externo cloud

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

Veja também:

Antes de começar

Antes de poder usar uma credencial de serviço para se conectar a um serviço externo cloud, 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.

    SQL não são suportados.

    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 em seu metastore Unity Catalog que dá acesso ao serviço cloud.

  • 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.

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

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.

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}") }

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

Opcionalmente, o senhor pode especificar uma credencial de serviço default para um compute cluster multifuncional ou de trabalho, 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 externo cloud. 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.

Observação

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 cluster.

    Veja gerenciar 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:

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:

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

No Scala, o senhor substitui o nome da credencial do serviço por null.

val awsCredentialsProvider = dbutils.credentials.getServiceCredentialsProvider(null).asInstanceOf[AWSCredentialsProvider]