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.
Abra a página de edição do cluster.
Veja gerenciar compute.
Clique em Advanced (Avançado ) na parte inferior da página e vá para a seção Spark tab.
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]