Aller au contenu principal

Utilisez les identifiants de service Unity Catalog pour vous connecter aux services cloud externes.

Cet article décrit comment utiliser des informations d’identification de service dans Unity Catalog pour se connecter à des services cloud externes. Un objet d’informations d’identification de service dans Unity Catalog encapsule une information d’identification cloud à long terme qui donne accès à un service cloud externe que les utilisateurs doivent connecter à partir de Databricks.

Voir aussi :

Avant de commencer

Avant de pouvoir utiliser un identifiant de service pour vous connecter à un service cloud externe, vous devez avoir :

  • Un workspace Databricks activé pour Unity Catalog.

  • Une ressource de compute qui est sur Databricks Runtime 16.2 ou une version ultérieure.

    Les SQL Warehouse ne sont pas pris en charge.

    La version d'aperçu public des identifiants de service est disponible sur Databricks Runtime 15.4 LTS et versions ultérieures, avec la prise en charge de Python mais pas de Scala.

  • Un identifiant de service créé dans votre métastore Unity Catalog qui donne accès au service cloud.

  • Le privilège ACCESS sur l’identifiant de service ou la propriété de l’identifiant de service.

Utilisez un identifiant de service dans votre code

Cette section fournit des exemples d'utilisation des informations d'identification de service dans un Notebook. Remplacez les valeurs d'espace réservé. Ces exemples ne montrent pas nécessairement l'installation des bibliothèques requises, qui dépendent du service client auquel vous souhaitez accéder. Seuls Python et Scala sont pris en charge.

remarque

API spécifique aux UDF pour les identifiants de service :
Dans les UDF, utilisez databricks.service_credentials.getServiceCredentialsProvider() pour accéder aux identifiants de service.

Cela diffère de la fonction dbutils.credentials.getServiceCredentialsProvider() utilisée dans les notebooks, qui n'est pas disponible dans les contextes d'exécution UDF.

Exemple Python : configurer une session boto3 pour utiliser un identifiant de service spécifique

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')

Exemple Scala : Configurez une session AWS Java SDK pour utiliser un identifiant de service spécifique

Cet exemple utilise des informations d'identification de service pour fournir l'accès à AWS S3 à l'aide du SDK Java d'AWS.

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

Spécifiez un identifiant de service par default pour une ressource compute

Vous pouvez éventuellement spécifier une authentification de service par default pour un cluster de calcul multifonction ou de Jobs en définissant une variable d’environnement. Par défaut, le SDK utilise ces informations d'identification de service si aucune authentification n'est fournie. Les utilisateurs ont toujours besoin de ACCESS sur cet identifiant de service pour se connecter au service cloud externe. Databricks ne recommande pas cette approche, car elle rend votre code moins portable que le fait de nommer l'identifiant de service dans votre code.

remarque

Les compute Serverless et les SQL Warehouse ne prennent pas en charge les variables d'environnement et, par conséquent, ils ne prennent pas en charge les informations d'identification de service par default.

  1. Ouvrez la page de modification du cluster.

    Consultez Gérer le compute classique.

  2. Cliquez sur **Avancé** en bas de la page et accédez à l'onglet **Spark**.

  3. Ajoutez l’entrée suivante dans les **Variables d’environnement**, en remplaçant <your-service-credential>:

    DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME=<your-service-credential>

Les exemples de code suivants ne spécifient pas d'identifiant de service. Au lieu de cela, ils utilisent l'identifiant de service spécifié dans la variable d'environnement DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME :

Python
import boto3
sm = boto3.client('secretsmanager', region_name='your-aws-region')

Comparez cela à l'exemple dans Exemple Python : Configurer une session boto3 pour utiliser un identifiant de service spécifique, qui ajoute la spécification des identifiants :

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