Provisionner un service principal à l'aide de Terraform
Pour provisionner un Service Principal Databricks en utilisant l'interface utilisateur de Databricks à la place, voir Service principals.
Un service principal est une identité pour les outils et systèmes automatisés tels que les scripts, les applications et les plateformes CI/CD. Databricks recommande d'utiliser un service principal et son jeton OAuth ou son jeton d'accès personnel au lieu de votre compte utilisateur Databricks et de votre jeton d'accès personnel. Avantages :
- Accorder et restreindre l'accès aux ressources indépendamment d'un utilisateur.
- Permettre aux utilisateurs de mieux protéger leurs propres jetons d'accès.
- Désactiver ou supprimer un Service Principal sans affecter d'autres utilisateurs.
- Suppression d'un utilisateur lorsqu'il quitte l'organisation sans impacter aucun Service Principal.
Suivez ces instructions pour utiliser le fournisseur Databricks Terraform afin de créer un Service Principal Databricks dans votre Workspace Databricks, puis de créer un jeton d'accès Databricks pour ce Service Principal Databricks.
Exigences
-
Un jeton d'accès personnel Databricks pour permettre au fournisseur Terraform Databricks d'appeler les APIs Databricks au nom de votre compte utilisateur Databricks au sein du Workspace Databricks. Pour créer un jeton d'accès personnel, voir S'authentifier avec des jetons d'accès personnels Databricks (hérité).
-
Databricks CLI version 0.205 ou supérieure, configuré avec un profil de configuration d'authentification Databricks qui fait référence au jeton d'accès personnel Databricks correspondant. Pour créer ce profil de configuration, procédez comme suit :
La procédure suivante utilise le CLI Databricks pour créer un profil de configuration Databricks avec le nom DEFAULT. Si vous avez déjà un profil de configuration DEFAULT, cette procédure écrase votre profil de configuration DEFAULT existant.
Pour vérifier si vous avez déjà un profil de configuration DEFAULT, et pour afficher les paramètres de ce profil s'il existe, utilisez l'interface de ligne de commande Databricks pour exécuter la commande databricks auth env --profile DEFAULT.
Pour créer un profil de configuration avec un nom autre que DEFAULT, remplacez la partie DEFAULT de --profile DEFAULT dans la commande databricks configure suivante par un nom différent pour le profil de configuration.
-
Utilisez le CLI Databricks pour créer un profil de configuration Databricks nommé
DEFAULTqui utilise l'authentification par jeton d'accès personnel Databricks. Pour ce faire, exécutez la commande suivante :Bashdatabricks configure --profile DEFAULT -
Pour l'invite Hôte Databricks , saisissez l'URL de votre instance de workspace Databricks, par exemple
https://dbc-a1b2345c-d6e7.cloud.databricks.com. -
Pour l'invite Jeton d'accès personnel , entrez le jeton d'accès personnel Databricks de votre Workspace.
- Le Terraform CLI. Consultez Download Terraform.
Créez le Service Principal Databricks et le jeton d'accès Databricks.
-
Dans votre terminal, créez un répertoire vide, puis basculez-y. Chaque ensemble distinct de fichiers de configuration Terraform doit se trouver dans son propre répertoire. Par exemple :
mkdir terraform_service_principal_demo && cd terraform_service_principal_demo.Bashmkdir terraform_service_principal_demo && cd terraform_service_principal_demo -
Dans ce répertoire vide, créez un fichier nommé
main.tf. Ajoutez le contenu suivant à ce fichier, puis enregistrez le fichier.
Le contenu suivant contient la déclaration authorization = "tokens". Il ne peut y avoir qu’une seule ressource d’autorisations authorization = "tokens" par Workspace Databricks. Après avoir appliqué les modifications suivantes, les utilisateurs qui avaient précédemment l'autorisation CAN_USE ou CAN_MANAGE verront leur accès à l'authentification par jeton révoqué. Leurs jetons actifs sont également supprimés (révoqués) immédiatement. En raison de la nature potentiellement perturbatrice de cette opération, la configuration associée est commentée dans le fichier main.tf.
Vous pouvez également utiliser l'interface utilisateur de Databricks pour permettre au Service Principal Databricks d'utiliser un jeton d'accès Databricks. Voir Gérer les autorisations des jetons d'accès personnels. Vous pouvez également utiliser l'interface utilisateur de Databricks pour générer un jeton d'accès Databricks pour le Service Principal Databricks. Voir Gérer les jetons pour un Service Principal.
Le contenu suivant crée un Service Principal au niveau du Workspace Databricks. Si votre Workspace Databricks est activé pour la fédération d'identités, alors le contenu suivant synchronise aussi automatiquement le Service Principal au compte Databricks associé (voir Attribuer des identités aux Workspaces). Pour créer un Service Principal au niveau du compte Databricks uniquement au lieu du niveau du Workspace, consultez la section « Creating service principal in AWS Databricks account » de la Ressource databricks_service_principal dans la documentation du fournisseur Databricks Terraform.
Si vous choisissez de décommenter les ressources et la sortie suivantes, un jeton d'accès personnel est également généré. Ce jeton d'accès personnel peut être utilisé par le Service Principal pour l'automatisation uniquement au sein du Workspace Databricks spécifié.
Vous ne pouvez pas utiliser de jetons d'accès personnels avec des Service Principal pour l'automatisation au niveau du compte Databricks. Si vous tentez de générer un jeton d'accès personnel pour un Service Principal au niveau du compte Databricks, la tentative échouera.
variable "databricks_connection_profile" {
description = "The name of the Databricks authentication configuration profile to use."
type = string
}
variable "service_principal_display_name" {
description = "The display name for the service principal."
type = string
}
variable "service_principal_access_token_lifetime" {
description = "The lifetime of the service principal's access token, in seconds."
type = number
default = 3600
}
terraform {
required_providers {
databricks = {
source = "databricks/databricks"
}
}
}
provider "databricks" {
profile = var.databricks_connection_profile
}
resource "databricks_service_principal" "sp" {
provider = databricks
display_name = var.service_principal_display_name
}
# Uncomment the following "databricks_permissions" resource
# if you want to enable the service principal to use
# personal access tokens.
#
# Warning: uncommenting the following "databricks_permissions" resource
# causes users who previously had either CAN_USE or CAN_MANAGE permission
# to have their access to token-based authentication revoked.
# Their active tokens are also immediately deleted (revoked).
#
# Alternatively, you can enable this later through the Databricks user interface.
#
# resource "databricks_permissions" "token_usage" {
# authorization = "tokens"
# access_control {
# service_principal_name = databricks_service_principal.sp.application_id
# permission_level = "CAN_USE"
# }
# }
#
# Uncomment the following "databricks_obo_token" resource and
# "service_principal_access_token" output if you want to generate
# a personal access token for service principal and then see the
# generated personal access token.
#
# If you uncomment the following "databricks_obo_token" resource and
# "service_principal_access_token" output, you must also
# uncomment the preceding "databricks_permissions" resource.
#
# Alternatively, you can generate a personal access token later through the
# Databricks user interface.
#
# resource "databricks_obo_token" "this" {
# depends_on = [databricks_permissions.token_usage]
# application_id = databricks_service_principal.sp.application_id
# comment = "Personal access token on behalf of ${databricks_service_principal.sp.display_name}"
# lifetime_seconds = var.service_principal_access_token_lifetime
# }
output "service_principal_name" {
value = databricks_service_principal.sp.display_name
}
output "service_principal_id" {
value = databricks_service_principal.sp.application_id
}
# Uncomment the following "service_principal_access_token" output if
# you want to see the generated personal access token for the service principal.
#
# If you uncomment the following "service_principal_access_token" output, you must
# also uncomment the preceding "service_principal_access_token" resource and
# "databricks_obo_token" resource.
#
# output "service_principal_access_token" {
# value = databricks_obo_token.this.token_value
# sensitive = true
# }
Pour ajouter ce Service Principal aux groupes de workspace Databricks et pour ajouter des droits de workspace Databricks à ce Service Principal, consultez databricks_service_principal sur le site web de Terraform.
-
Dans le même répertoire, créez un fichier nommé
terraform.tfvars. Ajoutez le contenu suivant à ce fichier, en remplaçant les valeurs suivantes, puis enregistrez le fichier :- Remplacez la valeur
databricks_connection_profilepar le nom de votre profil de configuration d'authentification figurant dans les exigences. - Remplacez la valeur
service_principal_display_namepar un nom d'affichage pour le Service Principal. - Remplacez la valeur
service_principal_access_token_lifetimepar le nombre de secondes pour la durée de vie du jeton d'accès pour le Service Principal.
databricks_connection_profile = "<Databricks authentication configuration profile name>"
service_principal_display_name = "<Service principal display name>"
service_principal_access_token_lifetime = 3600 - Remplacez la valeur
-
Initialisez le répertoire de travail contenant le fichier
main.tfen exécutant la commandeterraform init. Pour plus d'information, consultez Command: init sur le site web de Terraform.Bashterraform init -
Vérifiez s'il y a des erreurs de syntaxe dans la configuration en exécutant la commande
terraform validate. Pour plus d'informations, consultez la commande : validate sur le site web de Terraform.Bashterraform validate -
Appliquez les modifications nécessaires pour atteindre l'état souhaité de la configuration en exécutant la commande
terraform apply. Pour plus d'informations, consultez Commande : apply sur le site web de Terraform.Bashterraform apply -
Si vous avez décommenté la ressource
databricks_permissions, la ressourcedatabricks_obo_tokenet la sortieservice_principal_access_token, alors pour obtenir le jeton d'accès du service principal, consultez la valeur deoutputs.service_principal_access_token.valuedans le fichierterraform.tfstate, qui se trouve dans le répertoire de travail contenant le fichiermain.tf.