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:
- Gerenciar o acesso ao serviço de nuvem externo usando credenciais de serviço.
- serviço gerenciado de credenciamento
Antes de começar
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.
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 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.
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}") }
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.
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 clustering.
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
:
- Python
- Scala
import boto3
sm = boto3.client('secretsmanager', region_name='your-aws-region')
Compare this to the example in Python example: Configure a boto3 session to use a specific service credential, which adds the credential specification:
boto3_session = boto3.Session(botocore_session=dbutils.credentials.getServiceCredentialsProvider('your-service-credential'), region_name='your-aws-region')
For Scala, you replace the service credential name with null
.
val awsCredentialsProvider = dbutils.credentials.getServiceCredentialsProvider(null).asInstanceOf[AWSCredentialsProvider]