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
ACCESSna 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 |
|---|---|
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. | |
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. | |
Databricks Runtime 18.1 ou acima em compute clássico. No compute serverless e em SQL warehouses pro e serverless, defina explicitamente o |
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
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.
-
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 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 de serviço por null.
val awsCredentialsProvider = dbutils.credentials.getServiceCredentialsProvider(null).asInstanceOf[AWSCredentialsProvider]