Partager via


Authentifier l’accès à Azure Databricks avec un principal de service à l’aide d’OAuth (OAuth M2M)

Cet article explique comment créer un principal de service Azure Databricks et l’utiliser pour s’authentifier auprès d’une entité cible avec OAuth.

Étape 1 : Créer un principal de service

Les administrateurs de compte et les administrateurs d’espace de travail peuvent créer des principaux de service. Cette étape décrit la création d’un principal de service dans un espace de travail. Pour utiliser la console de compte, consultez Gérer les principaux de service dans votre compte.

Vous pouvez également créer un principal de service managé Microsoft Entra ID et l’ajouter à Azure Databricks. Pour plus d’informations, consultez Les principaux de service Databricks et Microsoft Entra ID.

  1. En tant qu’administrateur d’espace de travail, connectez-vous à l’espace de travail Azure Databricks.
  2. Cliquez sur votre nom d’utilisateur dans la barre supérieure de l’espace de travail Azure Databricks, puis sélectionnez Paramètres.
  3. Cliquez sur l’onglet Identité et accès.
  4. À côté de Principaux de service, cliquez sur Gérer.
  5. Cliquez sur Ajouter un principal de service.
  6. Cliquez sur la flèche déroulante dans la zone de recherche, puis cliquez sur Ajouter nouveau.
  7. Sous Gestion, choisissez Databricks géré.
  8. Entrez un nom pour le principal de service.
  9. Cliquez sur Ajouter.

Le principal de service est ajouté à votre espace de travail et au compte Azure Databricks.

Étape 2 : Attribuer des autorisations à votre principal de service

  1. Cliquez sur le nom de votre principal de service pour ouvrir sa page de détails.
  2. Sous l’onglet Configurations, cochez la case en regard de chaque droit d’utilisation que vous souhaitez accorder au principal de service pour cet espace de travail, puis cliquez sur Mettre à jour.
  3. Sous l’onglet Autorisations, accordez l’accès à tous les utilisateurs, les principaux de service et les groupes Azure Databricks que vous souhaitez autoriser à gérer et utiliser ce principal de service. Consultez l’article Gérer les rôles d’un principal de service.

Étape 3 : Créer un secret OAuth pour un principal de service

Avant de pouvoir utiliser OAuth pour vous authentifier auprès d’Azure Databricks, vous devez d’abord créer un secret OAuth, qui peut être utilisé pour générer des jetons d’accès OAuth. Un principal de service peut avoir jusqu’à cinq secrets OAuth. Les administrateurs de compte et les administrateurs d’espace de travail peuvent créer un secret OAuth pour un principal de service.

  1. Dans la page de détails de votre principal de service, cliquez sur l’onglet Secrets .

  2. Sous Secrets OAuth, cliquez sur Générer un secret.

    Générer un secret OAuth à partir de l’espace de travail

  3. Copiez le secret affiché et l’ID client, puis cliquez sur Terminé.

Le secret ne s’affiche qu’une seule fois pendant la création. L’ID client est identique à l’ID d’application du principal de service.

Les administrateurs de compte peuvent également générer un secret OAuth à partir de la page de détails du principal de service dans la console de compte.

  1. En tant qu’administrateur de compte, connectez-vous à la console de compte.

  2. Cliquez sur Icône de gestion des utilisateurs de la console de compte Gestion des utilisateurs.

  3. Sous l’onglet Principaux de service, sélectionnez votre principal de service.

  4. Sous Secrets OAuth, cliquez sur Générer un secret.

    Générer un secret OAuth à partir de l’espace de travail

  5. Copiez le secret affiché et l’ID client, puis cliquez sur Terminé.

Remarque

Pour permettre au principal de service d’utiliser des clusters ou des entrepôts SQL, vous devez lui en accorder l’accès. Consultez Autorisations de calcul ou Gérer un entrepôt SQL.

Étape 4 : Utiliser l’authentification OAuth M2M

Pour utiliser l’authentification OAuth M2M, vous devez définir les variables d’environnement, champs, .databrickscfg champs Terraform ou Config champs associés suivants :

  • L’hôte Azure Databricks, spécifié comme https://accounts.azuredatabricks.net pour les opérations de compte ou l’URL par espace de travail cible, par exemple https://adb-1234567890123456.7.azuredatabricks.net, pour les opérations d’espace de travail.
  • Pour les opérations de compte Azure Databricks, l’ID de compte Azure Databricks.
  • ID de client du principal du service.
  • Le secret du principal du service.

Pour effectuer l’authentification M2M OAuth, intégrez les éléments suivants dans votre code en fonction de l’outil ou du SDK participant :

Environnement

Pour utiliser des variables d’environnement pour un type d’authentification Azure Databricks spécifique avec un outil ou un kit de développement logiciel (SDK), consultez Authentifier l’accès aux ressources Azure Databricks, ou la documentation de l’outil ou du SDK. Consultez également Variables et champs d’environnement pour l’authentification unifiée du client et Méthodes par défaut pour l’authentification unifiée du client.

Pour les opérations au niveau du compte, définissez les variables d’environnement suivantes :

  • DATABRICKS_HOST, réglé sur l’URL de console du compte Azure Databricks, https://accounts.azuredatabricks.net.
  • DATABRICKS_ACCOUNT_ID
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

Pour les opérations au niveau de l’espace de travail, définissez les variables d’environnement suivantes :

  • DATABRICKS_HOST, défini sur l’URL par espace de travail Azure Databricks, par exemple https://adb-1234567890123456.7.azuredatabricks.net.
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

Profil

Créez ou identifiez un profil de configuration Azure Databricks avec les champs suivants dans votre fichier .databrickscfg. Si vous créez le profil, remplacez les espaces réservés par les valeurs appropriées. Pour utiliser le profil avec un outil ou un kit de développement logiciel (SDK), consultez Authentifier l’accès aux ressources Azure Databricks ou la documentation de l’outil ou du SDK. Consultez également Variables et champs d’environnement pour l’authentification unifiée du client et Méthodes par défaut pour l’authentification unifiée du client.

Pour les opérations au niveau du compte, définissez les valeurs suivantes dans votre fichier .databrickscfg. Dans ce cas, l’URL de la console de compte Azure Databricks est https://accounts.azuredatabricks.net :

[<some-unique-configuration-profile-name>]
host          = <account-console-url>
account_id    = <account-id>
client_id     = <service-principal-client-id>
client_secret = <service-principal-secret>

Pour les opérations au niveau de l’espace de travail, définissez les valeurs suivantes dans votre fichier .databrickscfg. Dans ce cas, l’hôte est l’URL par espace de travail Azure Databricks, par exemple https://adb-1234567890123456.7.azuredatabricks.net :

[<some-unique-configuration-profile-name>]
host          = <workspace-url>
client_id     = <service-principal-client-id>
client_secret = <service-principal-secret>

INTERFACE DE LIGNE DE COMMANDE

Pour l’interface CLI Databricks, effectuez l’une des opérations suivantes :

  • Définissez les variables d’environnement comme spécifié dans la section « Environnement » de cet article.
  • Définissez les valeurs de votre fichier .databrickscfg comme spécifié dans la section « Profil » de cet article.

Les variables d’environnement sont toujours prioritaires sur les valeurs de votre fichier .databrickscfg.

Consultez également Authentification machine à machine (M2M) OAuth.

Se connecter

Remarque

L’authentification OAuth machine à machine est prise en charge sur les versions de Databricks Connect suivantes :

  • Pour Python, Databricks Connect pour Databricks Runtime 14.0 et versions ultérieures.
  • Pour Scala, Databricks Connect pour Databricks Runtime 13.3 LTS et ultérieur. Le Kit de développement logiciel (SDK) Databricks pour Java inclus dans Databricks Connect pour Databricks Runtime 13.3 LTS et versions ultérieures doit être mis à niveau vers le Kit de développement logiciel (SDK) Databricks pour Java 0.17.0 ou version ultérieure.

Pour Databricks Connect, vous pouvez effectuer une des opérations suivantes :

  • Définissez les valeurs de votre fichier .databrickscfg pour les opérations au niveau de l’espace de travail Azure Databricks comme spécifié dans la section « Profil » de cet article. Définissez également la variable d’environnement cluster_id dans votre profil sur votre URL par espace de travail, par exemple https://adb-1234567890123456.7.azuredatabricks.net.
  • Définissez les variables d’environnement pour les opérations au niveau de l’espace de travail Azure Databricks, comme spécifié dans la section « Environnement » de cet article. Définissez également la variable d’environnement DATABRICKS_CLUSTER_ID sur votre URL par espace de travail, par exemple https://adb-1234567890123456.7.azuredatabricks.net.

Les valeurs de votre fichier .databrickscfg sont toujours prioritaires sur les variables d’environnement.

Pour initialiser le client Databricks Connect avec ces variables d’environnement ou les valeurs de votre fichier .databrickscfg, consultez une des rubriques suivantes :

VS Code

Pour l’extension Databricks pour Visual Studio Code, procédez comme suit :

  1. Définissez les valeurs de votre fichier .databrickscfg pour les opérations au niveau de l’espace de travail Azure Databricks comme spécifié dans la section « Profil » de cet article.
  2. Dans le volet Configuration de l’extension Databricks pour Visual Studio Code, cliquez sur Configurer Databricks.
  3. Dans la palette de commandes, pour Hôte Databricks, entrez votre URL par espace de travail, par exemple https://adb-1234567890123456.7.azuredatabricks.net, puis appuyez sur Enter.
  4. Dans la palette de commandes, sélectionnez le nom de votre profil cible dans la liste pour votre URL.

Pour plus d’informations, consultez Configuration de l’authentification pour l’extension Databricks pour Visual Studio Code.

Terraform

Pour les opérations au niveau du compte, pour l’authentification par défaut :

provider "databricks" {
  alias = "accounts"
}

Pour la configuration directe (remplacez les espaces réservés retrieve par votre propre implémentation afin de récupérer les valeurs de la console ou d’un autre magasin de configuration comme HashiCorp Vault. Référez-vous également à Vault Provider). Dans ce cas, l’URL de la console de compte Azure Databricks est https://accounts.azuredatabricks.net :

provider "databricks" {
  alias         = "accounts"
  host          = <retrieve-account-console-url>
  account_id    = <retrieve-account-id>
  client_id     = <retrieve-client-id>
  client_secret = <retrieve-client-secret>
}

Pour les opérations au niveau de l’espace de travail, pour l’authentification par défaut :

provider "databricks" {
  alias = "workspace"
}

Pour la configuration directe (remplacez les espaces réservés retrieve par votre propre implémentation afin de récupérer les valeurs de la console ou d’un autre magasin de configuration comme HashiCorp Vault. Référez-vous également à Vault Provider). Dans ce cas, l’hôte est l’URL par espace de travail Azure Databricks, par exemple https://adb-1234567890123456.7.azuredatabricks.net :

provider "databricks" {
  alias         = "workspace"
  host          = <retrieve-workspace-url>
  client_id     = <retrieve-client-id>
  client_secret = <retrieve-client-secret>
}

Pour plus d’informations sur l’authentification avec le fournisseur Databricks Terraform, consultez Authentification.

Python

Pour les opérations au niveau du compte, utilisez ce qui suit pour l’authentification par défaut :

from databricks.sdk import AccountClient

a = AccountClient()
# ...

Pour la configuration directe, utilisez ce qui suit en remplaçant les espaces réservés retrieve par votre propre implémentation afin de récupérer les valeurs de la console ou d’un autre magasin de configuration comme Azure Key Vault. Dans ce cas, l’URL de la console de compte Azure Databricks est https://accounts.azuredatabricks.net :

from databricks.sdk import AccountClient

a = AccountClient(
  host          = retrieve_account_console_url(),
  account_id    = retrieve_account_id(),
  client_id     = retrieve_client_id(),
  client_secret = retrieve_client_secret()
)
# ...

Pour les opérations au niveau de l’espace de travail, et particulièrement pour l’authentification par défaut :

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

Pour la configuration directe, remplacez les espaces réservés retrieve par votre propre implémentation afin de récupérer les valeurs de la console ou d’un autre magasin de configuration comme Azure Key Vault. Dans ce cas, l’hôte est l’URL par espace de travail Azure Databricks, par exemple https://adb-1234567890123456.7.azuredatabricks.net :

from databricks.sdk import WorkspaceClient

w = WorkspaceClient(
  host          = retrieve_workspace_url(),
  client_id     = retrieve_client_id(),
  client_secret = retrieve_client_secret()
)
# ...

Pour plus d’informations sur l’authentification avec les outils et les kits de développement logiciel (SDK) Databricks qui utilisent Python et qui implémentent l’Authentification unifiée du client Databricks, consultez :

Remarque

L’extension Databricks pour Visual Studio Code utilise Python, mais n’a pas encore mis en œuvre l’authentification OAuth machine à machine (M2M).

Java

Pour les opérations au niveau de l’espace de travail, pour l’authentification par défaut :

import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...

Pour la configuration directe (remplacez les espaces réservés retrieve par votre propre implémentation afin de récupérer les valeurs de la console ou d’un autre magasin de configuration comme Azure Key Vault). Dans ce cas, l’hôte est l’URL par espace de travail Azure Databricks, par exemple https://adb-1234567890123456.7.azuredatabricks.net :

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
  .setHost(retrieveWorkspaceUrl())
  .setClientId(retrieveClientId())
  .setClientSecret(retrieveClientSecret());
WorkspaceClient w = new WorkspaceClient(cfg);
// ...

Pour plus d’informations sur l’authentification avec les outils et les kits de développement logiciel (SDK) Databricks qui utilisent Java et qui implémentent l’Authentification unifiée du client Databricks, consultez :

Go

Pour les opérations au niveau du compte, pour l’authentification par défaut :

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient())
// ...

Pour la configuration directe (remplacez les espaces réservés retrieve par votre propre implémentation afin de récupérer les valeurs de la console ou d’un autre magasin de configuration comme Azure Key Vault). Dans ce cas, l’URL de la console de compte Azure Databricks est https://accounts.azuredatabricks.net :

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
  Host:         retrieveAccountConsoleUrl(),
  AccountId:    retrieveAccountId(),
  ClientId:     retrieveClientId(),
  ClientSecret: retrieveClientSecret(),
}))
// ...

Pour les opérations au niveau de l’espace de travail, pour l’authentification par défaut :

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient())
// ...

Pour la configuration directe (remplacez les espaces réservés retrieve par votre propre implémentation afin de récupérer les valeurs de la console ou d’un autre magasin de configuration comme Azure Key Vault). Dans ce cas, l’hôte est l’URL par espace de travail Azure Databricks, par exemple https://adb-1234567890123456.7.azuredatabricks.net :

import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
  Host:         retrieveWorkspaceUrl(),
  ClientId:     retrieveClientId(),
  ClientSecret: retrieveClientSecret(),
}))
// ...

Pour plus d’informations sur l’authentification avec les outils et les kits de développement logiciel (SDK) Databricks qui utilisent Go et qui implémentent l’Authentification unifiée du client Databricks, consultez Authentifier le kit de développement logiciel (SDK) Databricks pour Go avec votre compte ou votre espace de travail Azure Databricks.

Générer et utiliser manuellement des jetons d’accès pour l’authentification M2M OAuth

Les outils et kits de développement logiciel (SDK) Azure Databricks qui implémentent la norme d’authentification unifiée de client Databricks vont générer, actualiser et utiliser automatiquement des jetons d’accès OAuth Azure Databricks en votre nom en fonction des besoins de l’authentification OAuth M2M.

Databricks recommande d’utiliser l’authentification unifiée du client, mais si vous devez générer, actualiser ou utiliser manuellement des jetons d’accès OAuth Azure Databricks, suivez les instructions de cette section.

Utilisez l’ID client et le secret OAuth du principal de service pour demander un jeton d’accès OAuth pour s’authentifier auprès des API REST au niveau du compte et des API REST au niveau de l’espace de travail. Le jeton d’accès expirera en une heure. Vous devez demander un nouveau jeton d’accès OAuth après l’expiration. L’étendue du jeton d’accès OAuth dépend du niveau à partir duquel vous créez le jeton. Vous pouvez créer un jeton au niveau du compte ou de l’espace de travail de la manière suivante :

Générer manuellement un jeton d’accès au niveau du compte

Un jeton d’accès OAuth créé à partir du niveau du compte peut être utilisé sur les API REST Databricks dans le compte, et dans tous les espaces de travail auquel le principal de service a accès.

  1. En tant qu’administrateur de compte, connectez-vous à la console de compte.

  2. Cliquez sur la flèche vers le bas à côté de votre nom d’utilisateur en haut à droite.

  3. Copiez votre ID de compte.

  4. Construisez l’URL du point de terminaison du jeton en remplaçant <my-account-id> dans l’URL suivante par l’ID de compte que vous avez copié.

    https://accounts.azuredatabricks.net/oidc/accounts/<my-account-id>/v1/token
    
  5. Utilisez un client tel que curl pour demander un jeton d’accès OAuth avec l’URL du point de terminaison de jeton, l’ID client du principal de service (également appelé ID d’application) et le secret OAuth du principal de service que vous avez créé. L’étendue all-apis demande un jeton d’accès OAuth qui peut être utilisé pour accéder à toutes les API REST Databricks auxquelles le principal de service a été accordé.

    • Remplacez <token-endpoint-URL> par l’URL de point de terminaison du jeton précédent.
    • Remplacez <client-id> par l’ID client du principal de service, également appelé ID d’application.
    • Remplacez <client-secret> par le secret OAuth du principal de service que vous avez créé.
    export CLIENT_ID=<client-id>
    export CLIENT_SECRET=<client-secret>
    
    curl --request POST \
    --url <token-endpoint-URL> \
    --user "$CLIENT_ID:$CLIENT_SECRET" \
    --data 'grant_type=client_credentials&scope=all-apis'
    

    Une réponse similaire à celle ci est générée :

    {
      "access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    Copiez l’access_token à partir de la réponse.

Générer manuellement un jeton d’accès au niveau de l’espace de travail

Un jeton d’accès OAuth créé à partir du niveau de l’espace de travail peut uniquement accéder aux API REST de cet espace de travail, même si le principal de service est un administrateur de compte ou est membre d’autres espaces de travail.

  1. Construisez l’URL du point de terminaison du jeton en remplaçant https://<databricks-instance> par l’URL de l’espace de travail de votre déploiement Azure Databricks :

    https://<databricks-instance>/oidc/v1/token
    
  2. Utilisez un client tel que curl pour demander un jeton d’accès OAuth avec l’URL du point de terminaison de jeton, l’ID client du principal de service (également appelé ID d’application) et le secret OAuth du principal de service que vous avez créé. L’étendue all-apis demande un jeton d’accès OAuth qui peut être utilisé pour accéder à toutes les API REST Databricks auxquelles le principal de service a été autorisé à accéder dans l’espace de travail à partir duquel vous demandez le jeton.

    • Remplacez <token-endpoint-URL> par l’URL de point de terminaison du jeton précédent.
    • Remplacez <client-id> par l’ID client du principal de service, également appelé ID d’application.
    • Remplacez <client-secret> par le secret OAuth du principal de service que vous avez créé.
    export CLIENT_ID=<client-id>
    export CLIENT_SECRET=<client-secret>
    
    curl --request POST \
    --url <token-endpoint-URL> \
    --user "$CLIENT_ID:$CLIENT_SECRET" \
    --data 'grant_type=client_credentials&scope=all-apis'
    

    Une réponse similaire à celle ci est générée :

    {
      "access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    Copiez l’access_token à partir de la réponse.

Appeler une API REST Databricks

Vous pouvez maintenant utiliser le jeton d’accès OAuth pour vous authentifier auprès des API REST au niveau du compte Azure Databricks et des API REST au niveau de l’espace de travail. Le principal de service doit être un administrateur de compte pour appeler des API REST au niveau du compte.

Vous pouvez inclure le jeton dans l’en-tête à l’aide Bearer de l’authentification. Vous pouvez utiliser cette approche avec curl ou n’importe quel client que vous générez.

Exemple de demande d’API REST au niveau du compte

Cet exemple utilise l’authentification Bearer pour obtenir la liste de tous les espaces de travail associés à un compte.

  • Remplacez <oauth-access-token> par le jeton d’accès OAuth du principal de service que vous avez copié à l’étape précédente.
  • Remplacez <account-id> par votre ID de compte.
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://accounts.azuredatabricks.net/api/2.0/accounts/<account-id>/workspaces'

Exemple de demande d’API REST au niveau de l’espace de travail

Cet exemple utilise l’authentification Bearer pour répertorier tous les clusters disponibles dans l’espace de travail spécifié.

  • Remplacez <oauth-access-token> par le jeton d’accès OAuth du principal de service que vous avez copié à l’étape précédente.
  • Remplacez <workspace-URL> par l’URL de votre espace de travail de base, dont la forme est similaire à dbc-a1b2345c-d6e7.cloud.databricks.com.
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://<workspace-URL>/api/2.0/clusters/list'

Ressources supplémentaires