Autorisez l'accès du Service Principal à Databricks avec OAuth.
Cette page explique comment autoriser l'accès aux Ressources Databricks depuis des processus non surveillés, tels que des commandes CLI automatisées ou des appels d'API REST effectués à partir de scripts ou d'applications.
Databricks utilise OAuth 2.0 comme protocole préféré pour l’autorisation et l’authentification du Service Principal en dehors de l’interface utilisateur. L'authentification client unifiée automatise la génération et le refresh des jetons. Lorsqu’un Service Principal se connecte et se voit accorder le consentement, OAuth émet un jeton d’accès que la CLI, le SDK ou d’autres outils peuvent utiliser en son nom. Chaque jeton d'accès est valable une heure, après quoi un nouveau jeton est automatiquement demandé.
Sur cette page, l'**autorisation** fait référence à l'utilisation d'OAuth pour accorder à un Service Principal l'accès aux ressources Databricks, tandis que l'**authentification** fait référence à la validation des identifiants via des jetons d'accès.
Pour plus de détails de haut niveau, consultez Autoriser l'accès aux ressources Databricks.
Moyens d'autoriser un Service Principal
Databricks prend en charge deux méthodes pour autoriser un Service Principal :
-
Automatique (recommandé) : utilisez l’ authentification unifiée avec les outils et les SDK pris en charge, tels que le Databricks Terraform SDK. Cette approche gère la génération et le refresh du jeton automatiquement, et est idéale pour l'automatisation ou d'autres charges de travail sans surveillance.
-
Manuel : Générez un vérificateur de code et un défi, puis échangez-les contre un jeton OAuth. Utilisez cette méthode si votre outil ou API ne prend pas en charge l'authentification unifiée. Vous devrez peut-être créer votre propre mécanisme de refresh de jeton pour votre application. Pour plus de détails, consultez Générer manuellement des jetons d'accès OAuth M2M.
Prérequis
Avant de configurer OAuth, suivez les étapes suivantes :
- Créer un Service Principal Databricks. Consultez Ajouter des services principaux à votre compte.
- Accédez à l' tab Configuration du Service Principal et sélectionnez les droits qu'il doit avoir pour ce Workspace.
- Accédez à l'onglet Autorisations et accordez l'accès à tous les utilisateurs Databricks, Service Principal et groupes que vous souhaitez gérer et utiliser ce Service Principal. Voir Qui peut gérer et utiliser les Service Principal ?.
Étape 1 : Créez un secret OAuth
Pour autoriser l'accès à vos Ressources Databricks avec OAuth, vous devez créer un secret OAuth. Le secret est utilisé pour générer des jetons d’accès OAuth à des fins d’authentification. Un Service Principal peut avoir jusqu’à cinq secrets OAuth, et chaque secret peut être valide pendant une durée maximale de deux ans.
Les administrateurs de compte et les administrateurs de Workspace peuvent créer un secret OAuth pour un Service Principal.
- Cliquez sur votre nom d'utilisateur dans la barre supérieure et sélectionnez Settings .
- Cliquez sur l'onglet **Identity and access tab**.
- À côté de **Service principals**, cliquez sur **Gérer**.
- Sélectionnez le Service Principal.
- Cliquez sur l'onglet tab .
- Cliquez sur Générer le secret .
- Définissez la durée de vie du secret en jours (730 jours maximum).
- Cliquez sur Générer .
- Copiez le secret et l'ID client affichés, puis cliquez sur OK . Le secret n'est affiché qu'une seule fois. L'ID client est le même que l'ID d'application du Service Principal.
Les administrateurs de compte peuvent également créer un secret OAuth à partir de la console de compte. Depuis l'onglet **Gestion des utilisateurs**, sélectionnez le Service Principal, puis accédez à l'onglet **Informations d'identification et secrets**.
Pour permettre au Service Principal d'utiliser des clusters ou des SQL Warehouses, vous devez lui accorder un accès. Consultez les autorisations Compute ou gérez un SQL Warehouse.
Étape 2 : utiliser l'autorisation OAuth
Pour utiliser l'autorisation OAuth avec l'outil d'authentification unifié, vous devez définir les variables d'environnement, les champs .databrickscfg, les champs Terraform ou les champs Config associés suivants :
- L'hôte Databricks, spécifié comme
https://accounts.cloud.databricks.compour les opérations de compte ou l'URL du workspace cible, par exemplehttps://dbc-a1b2345c-d6e7.cloud.databricks.compour les opérations du workspace. - L’ID de compte Databricks, pour les opérations du compte Databricks.
- L'ID client du Service Principal.
- Le secret du Service Principal.
Pour effectuer l’authentification de Service Principal OAuth, intégrez ce qui suit dans votre code, en fonction de l’outil ou du SDK participant :
- Environment
- Profile
- CLI
- Connect
- VS Code
- Terraform
- Python
- Java
- Go
Pour utiliser des variables d'environnement pour un type d'authentification Databricks spécifique avec un outil ou un SDK, consultez Autoriser l'accès aux ressources Databricks ou la documentation de l'outil ou du SDK. Voir aussi Variables et champs d'environnement pour l'authentification unifiée et la Priorité de la méthode d'authentification.
Pour les opérations au niveau du compte, définissez les variables d'environnement suivantes :
DATABRICKS_HOST, défini sur la valeur de l'URL de la console de votre compte Databricks,https://accounts.cloud.databricks.com.DATABRICKS_ACCOUNT_IDDATABRICKS_CLIENT_IDDATABRICKS_CLIENT_SECRET
Pour les opérations au niveau du workspace, définissez les variables d'environnement suivantes :
DATABRICKS_HOST, défini sur la valeur de l'URL de votre Workspace Databricks, par exemplehttps://dbc-a1b2345c-d6e7.cloud.databricks.com.DATABRICKS_CLIENT_IDDATABRICKS_CLIENT_SECRET
Créez ou identifiez un profil de configuration 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 SDK, consultez Autoriser l'accès aux ressources Databricks ou la documentation de l'outil ou du SDK. Voir aussi Variables d’environnement et champs pour l’authentification unifiée et la Priorité de la méthode d’authentification.
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 Databricks est https://accounts.cloud.databricks.com:
[<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 du Workspace, définissez les valeurs suivantes dans votre fichier .databrickscfg. Dans ce cas, l'hôte est l'URL du workspace Databricks, par exemple https://dbc-a1b2345c-d6e7.cloud.databricks.com:
[<some-unique-configuration-profile-name>]
host = <workspace-url>
client_id = <service-principal-client-id>
client_secret = <service-principal-secret>
Pour la CLI Databricks, effectuez l'une des opérations suivantes :
- Définissez les variables d'environnement telles que spécifiées sous l'onglet tab .
- Définissez les valeurs dans votre fichier
.databrickscfgcomme spécifié sur l'onglet tab .
Les variables d'environnement ont toujours la priorité sur les valeurs de votre fichier .databrickscfg.
Voir aussi authentification OAuth machine à machine (M2M).
L'authentification OAuth Service Principal est prise en charge sur les versions de Databricks Connect suivantes :
- Pour Python, Databricks Connect pour Databricks Runtime 13.1 et versions ultérieures.
- Pour Scala, Databricks Connect pour Databricks Runtime 13.3 LTS et versions ultérieures.
Pour Databricks Connect, vous pouvez :
- Utiliser un profil de configuration : Définissez les valeurs au niveau du Workspace dans votre fichier
.databrickscfgcomme décrit dans l'onglet tab . Définissez également lacluster_idsur l'URL de votre instance de workspace. - Utiliser les variables d'environnement : Définissez les mêmes valeurs que celles affichées dans l'onglet tab . Définissez également le
DATABRICKS_CLUSTER_IDsur l'URL de l'instance de votre Workspace.
Les valeurs dans .databrickscfg ont priorité sur les variables d'environnement.
Pour initialiser Databricks Connect avec ces paramètres, consultez Configuration du compute pour Databricks Connect.
Pour l’extension Databricks pour Visual Studio Code, procédez comme suit :
- Définissez les valeurs dans votre
.databrickscfgfichier pour les opérations au niveau du Workspace Databricks comme spécifié sur l'onglet **tab**. - Dans le volet Configuration de l’extension Databricks pour Visual Studio Code, cliquez sur Configurer Databricks .
- Dans la **Palette de commandes**, pour **Hôte Databricks**, entrez l' URL de votre workspace, par exemple,
https://dbc-a1b2345c-d6e7.cloud.databricks.compuis appuyezEntersur. - Dans la Palette de commandes , sélectionnez le nom de votre profil cible dans la liste pour votre URL.
Pour plus de détails, consultez Configurez l'autorisation pour l'extension Databricks pour Visual Studio Code.
Opérations au niveau du compte
Pour l'authentification default :
provider "databricks" {
alias = "accounts"
}
Pour la configuration directe :
provider "databricks" {
alias = "accounts"
host = <retrieve-account-console-url>
account_id = <retrieve-account-id>
client_id = <retrieve-client-id>
client_secret = <retrieve-client-secret>
}
Remplacez les espaces réservés retrieve par votre propre implémentation pour récupérer les valeurs de la console ou d'un autre magasin de configuration, tel que HashiCorp Vault. Voir aussi Fournisseur de Vault. Dans ce cas, l'URL de la console de compte Databricks est https://accounts.cloud.databricks.com.
Opérations au niveau du workspace
Pour la configuration par default :
provider "databricks" {
alias = "workspace"
}
Pour la configuration directe :
provider "databricks" {
alias = "workspace"
host = <retrieve-workspace-url>
client_id = <retrieve-client-id>
client_secret = <retrieve-client-secret>
}
Remplacez les espaces réservés retrieve par votre propre implémentation pour récupérer les valeurs de la console ou d'un autre magasin de configuration, tel que HashiCorp Vault. Voir aussi Fournisseur de Vault. Dans ce cas, l'hôte est l'URL du Workspace Databricks, par exemple https://dbc-a1b2345c-d6e7.cloud.databricks.com.
Pour plus d'informations sur l'authentification avec le fournisseur Databricks Terraform, consultez Authentification.
Opérations au niveau du compte
Pour la configuration par default :
from databricks.sdk import AccountClient
a = AccountClient()
# ...
Pour la configuration directe :
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()
)
# ...
Remplacez les retrieve espaces réservés par votre propre implémentation, afin de récupérer les valeurs de la console ou d’un autre magasin de configuration, tel que AWS Systems Manager Parameter Store. Dans ce cas, l'URL de la console de compte Databricks est https://accounts.cloud.databricks.com.
Opérations au niveau du workspace
Pour la configuration par default :
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# ...
Pour la configuration directe :
from databricks.sdk import WorkspaceClient
w = WorkspaceClient(
host = retrieve_workspace_url(),
client_id = retrieve_client_id(),
client_secret = retrieve_client_secret()
)
# ...
Remplacez les espaces réservés retrieve par votre propre implémentation pour récupérer les valeurs de la console, ou d'un autre magasin de configuration, tel que AWS Systems Manager Parameter Store. Dans ce cas, l'hôte est l'URL du Workspace Databricks, par https://dbc-a1b2345c-d6e7.cloud.databricks.com exemple.
Pour plus d’informations sur l’authentification avec les outils Databricks et les SDK qui utilisent Python et implémentent l’authentification unifiée, consultez :
Opérations au niveau du compte
Pour la configuration par default :
import com.databricks.sdk.AccountClient;
// ...
AccountClient a = new AccountClient();
// ...
Pour la configuration directe :
import com.databricks.sdk.AccountClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
.setHost(retrieveAccountConsoleUrl())
.setAccountId(retrieveAccountId())
.setClientId(retrieveClientId())
.setClientSecret(retrieveClientSecret());
AccountClient a = new AccountClient(cfg);
// ...
Remplacez les espaces réservés retrieve par votre propre implémentation pour récupérer les valeurs de la console, ou d'un autre magasin de configuration, tel que AWS Systems Manager Parameter Store. Dans ce cas, l'URL de la console de compte Databricks est https://accounts.cloud.databricks.com.
Opérations au niveau du workspace
Pour la configuration par default :
import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...
Pour la configuration directe :
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);
// ...
Remplacez les espaces réservés retrieve par votre propre implémentation pour récupérer les valeurs de la console, ou d'un autre magasin de configuration, tel que AWS Systems Manager Parameter Store. Dans ce cas, l'hôte est l'URL du Workspace Databricks, par https://dbc-a1b2345c-d6e7.cloud.databricks.com exemple.
Pour plus d'information sur l'authentification avec les outils Databricks et les SDK qui utilisent Java et implémentent l'authentification unifiée, voir :
- Configurer le client Databricks Connect pour Scala (le client Databricks Connect pour Scala utilise le Databricks SDK pour Java inclus pour l'authentification)
- Authentifiez le SDK Databricks pour Java avec votre compte Databricks ou Workspace
Opérations au niveau du compte
Configuration default :
import "github.com/databricks/databricks-sdk-go"
// Uses environment configuration automatically
a := databricks.Must(databricks.NewAccountClient())
Pour la configuration directe :
import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
Host: retrieveWorkspaceUrl(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
Remplacez les espaces réservés retrieve par votre propre implémentation pour récupérer les valeurs de la console, ou d'un autre magasin de configuration, tel que AWS Systems Manager Parameter Store. Dans ce cas, l'URL de la console de compte Databricks est https://accounts.cloud.databricks.com.
Opérations au niveau du workspace
Pour la configuration par default :
import "github.com/databricks/databricks-sdk-go"
// Uses environment configuration automatically
w := databricks.Must(databricks.NewWorkspaceClient())
Pour la configuration directe :
import "github.com/databricks/databricks-sdk-go"
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
Host: retrieveAccountConsoleUrl(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
Remplacez les espaces réservés retrieve par votre propre implémentation pour récupérer les valeurs de la console, ou d'un autre magasin de configuration, tel que AWS Systems Manager Parameter Store. Dans ce cas, l'hôte est l'URL du Workspace Databricks, par https://dbc-a1b2345c-d6e7.cloud.databricks.com exemple.
Pour plus d'information sur l'authentification avec les outils Databricks et les SDK qui utilisent Go et qui implémentent l' authentification unifiée client Databricks, consultez Authentifier le SDK Databricks pour Go avec votre compte ou Workspace Databricks.
Générer manuellement des jetons d'accès OAuth M2M
Cette section est destinée aux outils ou services qui ne prennent pas en charge l'authentification unifiée Databricks. Si vous devez générer, refresh, ou utiliser manuellement des jetons OAuth Databricks pour l'authentification M2M, suivez ces étapes.
Pour générer un jeton d'accès OAuth M2M, utilisez l'ID client du Service Principal et le secret OAuth. Chaque jeton d'accès est valide pendant une heure. Après son expiration, demandez un nouveau jeton. Vous pouvez générer des jetons au niveau du compte ou du Workspace :
- Niveau du compte : Permet d'appeler les API REST au niveau du compte et du workspace dans les comptes et les workspaces auxquels le Service Principal peut accéder. Consultez Générer un jeton d'accès au niveau du compte.
- Niveau Workspace : À utiliser pour appeler des APIs REST au sein d'un seul Workspace. Consultez Générer un jeton d'accès au Workspace.
Générer un jeton d'accès au niveau du compte
Utilisez un jeton au niveau du compte pour appeler les APIs REST du compte et de tous les Workspaces auxquels le Service Principal peut accéder.
-
Construisez l'URL de l'endpoint de jeton en remplaçant
<account-id>dans l'URL suivante par votre ID de compte.https://accounts.cloud.databricks.com/oidc/accounts/<my-account-id>/v1/token -
Utilisez
curlpour demander un jeton d'accès OAuth. Remplacer :<token-endpoint-URL>avec l’URL ci-dessus.<client-id>avec l'ID client du Service Principal (ID d'application).<client-secret>avec le secret OAuth du Service Principal.
Bashexport 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'Cela génère une réponse similaire à :
JSON{
"access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
"token_type": "Bearer",
"expires_in": 3600
}La portée
all-apisdemande un jeton d'accès OAuth qui permet au Service Principal d'appeler toute API REST Databricks à laquelle il a l'autorisation d'accéder. -
Copiez la valeur
access_tokende la réponse.
Générez un jeton d'accès au niveau du Workspace
Utilisez un jeton au niveau du Workspace uniquement avec les APIs REST dans ce Workspace.
-
Construisez l'URL de l'endpoint du jeton en remplaçant
<databricks-instance>par votre<databricks-instance>avec le nom de l'instance de workspace Databricks, par exempledbc-a1b2345c-d6e7.cloud.databricks.com:https://<databricks-instance>/oidc/v1/token -
Utilisez
curlpour demander un jeton d'accès OAuth. Remplacer :<token-endpoint-URL>avec l’URL ci-dessus.<client-id>avec l'ID client du Service Principal (ID d'application).<client-secret>avec le secret OAuth du Service Principal.
Bashexport 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'Cela génère une réponse similaire à :
JSON{
"access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
"token_type": "Bearer",
"expires_in": 3600
} -
Copiez la valeur
access_tokende la réponse.
Pour générer un jeton pour un endpoint de mise en service, incluez l’ID de l’endpoint et l’action dans votre requête. Consultez Récupérer un jeton OAuth manuellement.
Appeler une API REST Databricks
Utilisez le jeton d'accès OAuth pour appeler les API REST au niveau du compte ou au niveau du Workspace. Pour appeler les APIs au niveau du compte, le Service Principal doit être un administrateur de compte.
Incluez le jeton dans l'en-tête d'autorisation avec l'authentification Bearer.
Exemple de requête API REST au niveau du compte
Cet exemple liste tous les Workspace pour un compte. Remplacer :
<oauth-access-token>avec le jeton d'accès OAuth du Service Principal.<account-id>avec votre ID de compte.
export OAUTH_TOKEN=<oauth-access-token>
curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://accounts.cloud.databricks.com/api/2.0/accounts/<account-id>/workspaces'
Exemple de requête d'API REST au niveau Workspace
Cet exemple liste tous les clusters disponibles dans un Workspace. Remplacer :
<oauth-access-token>avec le jeton d'accès OAuth du Service Principal.<databricks-instance>avec le nom d'instance du workspace Databricks, par exempledbc-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'
Dépanner l'authentification OAuth M2M
Suivez ces étapes pour résoudre les problèmes les plus courants liés à l'authentification M2M OAuth de Databricks pour les Service Principals.
Vérifications rapides
Start par vérifier ces problèmes de configuration courants qui entraînent des échecs d'authentification OAuth M2M :
- Identifiants :
DATABRICKS_CLIENT_IDest défini sur l'ID d'application (ID client) du Service Principal, etDATABRICKS_CLIENT_SECRETest défini sur la valeur secrète OAuth, tous deux sans espaces supplémentaires. - Hôte :
DATABRICKS_HOSTpointe vershttps://accounts.cloud.databricks.compour les Opérations de compte ou l'URL du workspace cible, par exemplehttps://dbc-a1b2345c-d6e7.cloud.databricks.compour les Opérations de workspace. Ne pas inclure/api. - Attribution : Le Service Principal est attribué au Workspace cible.
- Autorisations : Le service principal dispose des autorisations requises sur la ressource cible.
- Conflits : aucune variable conflictuelle n'est définie telle que
DATABRICKS_TOKEN,DATABRICKS_USERNAME. Exécutezenv | grep DATABRICKSet résolvez les conflits. - Outils : utilisez l'authentification unifiée et les versions actuelles de la CLI ou du SDK.
401 Non autorisé
Causes probables et correctifs :
- Mauvais ID client ou secret : Copiez à nouveau
DATABRICKS_CLIENT_IDetDATABRICKS_CLIENT_SECRET. Régénérez le secret en cas de doute. - Secret expiré : Créez un nouveau secret si celui actuel est expiré.
- Émetteur de jeton incorrect : Pour M2M, utilisez l'Endpoint de jeton OAuth Databricks, et non votre Endpoint de jeton IdP ou cloud.
- Incompatibilité d'hôte : Si vous vous authentifiez pour les APIs de Workspace,
DATABRICKS_HOSTdoit être l'URL du Workspace que vous appelez.
403 Interdit
Causes probables et correctifs :
- Autorisations de ressources manquantes : Accordez le Service Principal
CAN USEouCAN MANAGEsur les clusters ou les SQL Warehouses, et les autorisations de niveau objet requises pour les Notebooks, les Jobs ou les objets de données. - Aucune affectation de Workspace : attribuez le Service Principal au Workspace dans la console du compte.
- Accès API administrateur : pour les APIs réservées aux administrateurs, affectez le Service Principal au groupe d'administrateurs du Workspace ou accordez les autorisations d'administrateur de compte.
Problèmes de configuration
Les symptômes comprennent les timeouts, « hôte introuvable », « compte introuvable » ou « Workspace introuvable ».
Correctifs :
- Règles d'hôte : Utilisez l'URL de la console de compte pour les APIs de compte. Utilisez l'URL du Workspace pour les APIs du Workspace. N'incluez pas le suffixe
/api. - ID du compte : Fournissez
DATABRICKS_ACCOUNT_IDuniquement pour les opérations au niveau du compte. Utilisez l'UUID à partir de la console du compte. - Sélection de profil : Si vous utilisez plusieurs profils, transmettez
--profile <name>ou définissezDATABRICKS_CONFIG_PROFILE.
Connectivité
Si l'authentification OAuth M2M échoue en raison de problèmes réseau, utilisez ces tests pour vérifier que votre environnement peut atteindre les endpoints Databricks :
- DNS :
nslookup <your-host>(doit renvoyer des adresses IP pour le Hostname) - TLS et atteignabilité :
curl -I https://<your-host>(devrait renvoyer le code de statut HTTP 200, 401 ou 403) - **Réseau d'entreprise :** Confirmez que les règles de proxy ou de pare-feu autorisent le HTTPS vers les Endpoint Databricks.
Ressources supplémentaires
- Service Principal
- Présentation du modèle d'identité Databricks
- Informations supplémentaires concernant l'authentification et le contrôle d'accès