Partager via


Approvisionner un principal de service en utilisant Terraform

Remarque

Pour approvisionner un principal de service géré Microsoft Entra ID en utilisant le Portail Azure et l’interface utilisateur Azure Databricks à la place, consultez Principaux de service.

Les principaux de service gérés Microsoft Entra ID diffèrent des identités managées pour les ressources Azure. Azure Databricks les prend également en charge pour l’authentification. Pour savoir comment utiliser des identités gérées pour les ressources Azure au lieu des principaux de service gérés Microsoft Entra ID pour l’authentification Azure Databricks, consultez Utiliser des identités gérées Azure avec Azure Databricks.

Un principal de service est une identité créée pour être utilisée avec des outils et systèmes automatisés (comme les scripts, les applications et les plateformes CI/CD). Databricks recommande d’utiliser un principal de service et son jeton OAuth (ou son jeton d’accès personnel) plutôt que votre compte d’utilisateur Azure Databricks et votre jeton d’accès personnel. Voici les avantages :

  • Accorder et restreindre l’accès aux ressources indépendamment de l’utilisateur.
  • Permettre aux utilisateurs de mieux protéger leurs jetons d’accès.
  • Désactiver ou supprimer un principal de service sans affecter les autres utilisateurs.
  • Supprimer un utilisateur qui quitte l’organisation sans affecter le principal de service.

Suivez ces instructions pour utiliser Terraform afin de créer un principal de service géré Microsoft Entra ID dans Azure, utiliser le fournisseur Databricks Terraform pour ajouter le principal de service Microsoft Entra ID à votre espace de travail Azure Databricks, puis éventuellement créer un jeton Microsoft Entra ID ou un jeton OAuth Azure Databricks pour le principal de service.

Spécifications

  • Interface CLI Terraform. Consultez Télécharger Terraform.
  • Azure CLI, connecté à l’abonnement Microsoft Entra ID cible en exécutant la commande az login. Pour vous connecter avec un compte d’utilisateur ou un principal de service, consultez Se connecter avec Azure CLI.

Étape 1 : Créer le principal de service

Si vous disposez déjà d’un principal de service géré Microsoft Entra ID, passez à l’étape 2.

  1. Dans votre terminal, créez un répertoire vide, puis basculez vers celui-ci. (Chaque ensemble distinct de fichiers de configuration Terraform doit se trouver dans son propre répertoire.) Par exemple : mkdir terraform_azure_service_principal_demo && cd terraform_azure_service_principal_demo.

    mkdir terraform_azure_service_principal_demo && cd terraform_azure_service_principal_demo
    
  2. Dans ce répertoire vide, créez un fichier nommé main.tf. Ajoutez le contenu suivant à ce fichier, puis enregistrez-le.

    variable "azure_service_principal_display_name" {
      description = "A display name for the <entra-service-principal>."
      type        = string
    }
    
    terraform {
      required_providers {
        azuread = {
          source  = "hashicorp/azuread"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    resource "azuread_application" "this" {
      display_name = var.azure_service_principal_display_name
    }
    
    resource "azuread_service_principal" "this" {
      application_id = azuread_application.this.application_id
    }
    
    resource "time_rotating" "month" {
      rotation_days = 30
    }
    
    resource "azuread_service_principal_password" "this" {
      service_principal_id = azuread_service_principal.this.object_id
      rotate_when_changed  = { rotation = time_rotating.month.id }
    }
    
    output "azure_client_id" {
      description = "The Azure AD service principal's application (client) ID."
      value       = azuread_application.this.application_id
    }
    
    output "azure_client_secret" {
      description = "The Azure AD service principal's client secret value."
      value       = azuread_service_principal_password.this.value
      sensitive   = true
    }
    
  3. Dans le même répertoire, créez un fichier nommé terraform.tfvars. Ajoutez le contenu suivant à ce fichier, en remplaçant la valeur suivante, puis enregistrez le fichier :

    • Remplacez la valeur azure_service_principal_display_name par un nom complet pour le principal de service Microsoft Entra ID.
    azure_service_principal_display_name = "<A display name for the <entra-service-principal>>"
    
  4. Initialisez le répertoire de travail contenant le fichier main.tf en exécutant la commande terraform init. Pour plus d’informations, consultez Command: init sur le site web de Terraform.

    terraform init
    
  5. Vérifiez s’il existe des erreurs de syntaxe dans la configuration en exécutant la commande terraform validate. Pour plus d’informations, consultez Command: validate sur le site web de Terraform.

    terraform validate
    
  6. 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 Command: apply sur le site web de Terraform.

    terraform apply
    

Après la création du principal de service, copiez les valeurs de sortie azure_client_id et azure_client_secret, car vous allez en avoir besoin ultérieurement.

Pour obtenir la valeur azure_client_secret, consultez la valeur de outputs.client_secret.value dans le fichier terraform.tfstate, qui se trouve dans le répertoire de travail contenant le fichier main.tf.

Étape 2 : Ajouter le principal de service à l’espace de travail Azure Databricks

Remarque

Le contenu suivant ajoute un principal de service au niveau de l’espace de travail Azure Databricks. Si votre espace de travail Azure Databricks est activé pour la fédération des identités, le contenu suivant synchronise également automatiquement le principal de service avec le compte Azure Databricks associé.

  1. Dans votre terminal, créez un répertoire vide, puis basculez vers celui-ci. Chaque ensemble de fichiers de configuration Terraform doit se trouver dans son propre répertoire. Par exemple : mkdir terraform_databricks_service_principal_demo && cd terraform_databricks_service_principal_demo.

    mkdir terraform_databricks_service_principal_demo && cd terraform_databricks_service_principal_demo
    
  2. Dans ce répertoire vide, créez un fichier nommé main.tf. Ajoutez le contenu suivant à ce fichier, puis enregistrez-le.

    variable "databricks_host" {
      description = "The Azure Databricks workspace URL."
      type = string
    }
    
    variable "azure_client_id" {
      type        = string
      description = "The application (client) ID of the <entra-service-principal> to link to an Azure Databricks service principal. This application (client) ID will be the application ID of the Azure Databricks service principal."
    }
    
    variable "databricks_service_principal_display_name" {
      type        = string
      description = "A workspace display name for the Azure Databricks service principal."
    }
    
    terraform {
      required_providers {
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
    provider "databricks" {
      host = var.databricks_host
    }
    
    resource "databricks_service_principal" "sp" {
      application_id = var.azure_client_id
      display_name   = var.databricks_service_principal_display_name
    }
    
    output "databricks_service_principal_application_id" {
      value       = databricks_service_principal.sp.application_id
      description = "Application ID of the Azure Databricks service principal."
    }
    
    output "databricks_service_principal_display_name" {
      value       = databricks_service_principal.sp.display_name
      description = "Workspace display name of the Azure Databricks service principal."
    }
    
    output "databricks_workspace_service_principal_id" {
      value       = databricks_service_principal.sp.id
      description = "Workspace ID of the Azure Databricks service principal. This ID is generated by Azure Databricks for this workspace."
    }
    

    Remarque

    Pour ajouter ce principal de service à des groupes et ajouter des droits à ce principal de service, consultez databricks_service_principal sur le site web Terraform.

  3. Dans le même répertoire, créez un fichier nommé terraform.tfvars. Ajoutez le contenu suivant à ce fichier, en remplaçant la valeur suivante, puis enregistrez le fichier :

    • Remplacez la valeur databricks_host par l’URL de l’espace de travail Azure Databricks.
    • Remplacez la valeur azure_client_id par la valeur azure_client_id de l’étape 1.
    • Remplacez la valeur databricks_service_principal_display_name par un nom complet d’espace de travail pour le principal de service Azure Databricks.
    databricks_host                           = "<The Azure Databricks workspace URL, starting with https://>"
    azure_client_id                           = "<The Azure client ID of the Azure Active AD service principal>"
    databricks_service_principal_display_name = "<A workspace display name for the Azure Databricks service principal>"
    
  4. Initialisez le répertoire de travail contenant le fichier main.tf en exécutant la commande terraform init. Pour plus d’informations, consultez Command: init sur le site web de Terraform.

    terraform init
    
  5. Vérifiez s’il existe des erreurs de syntaxe dans la configuration en exécutant la commande terraform validate. Pour plus d’informations, consultez Command: validate sur le site web de Terraform.

    terraform validate
    
  6. 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 Command: apply sur le site web de Terraform.

    terraform apply
    

Après avoir créé le principal de service, copiez la valeur de sortie databricks_service_principal_application_id, car vous allez en avoir besoin pour créer un jeton Microsoft Entra ID pour le principal de service.

(Facultatif) Étape 3 : créer un jeton d’accès Microsoft Entra ID pour un principal de service Microsoft Entra ID

Important

Databricks ne recommande pas de créer manuellement des jetons d’ID Microsoft Entra. Ils expirent dans un délai d’une heure et nécessitent un remplacement manuel. Utilisez plutôt des outils ou des kits sdk avec l’authentification unifiée pour gérer automatiquement la gestion des jetons.

Si vous devez créer manuellement un jeton d’ID Microsoft Entra pour un principal de service Microsoft Entra ID, collectez les informations suivantes, puis suivez les instructions de Générer un jeton :

  • ID de locataire de votre principal de service Microsoft Entra ID, que vous utiliserez comme ID de locataire / ID d’annuaire (locataire) / <tenant-id> dans les instructions. Pour obtenir l’ID de locataire, consultez Créer un principal de service.
  • Valeur databricks_service_principal_application_id de l’étape 2, que vous utiliserez comme ID client/ ID d’application (client) / <client-id> dans les instructions.
  • Valeur azure_client_secret de l’étape 1, que vous utiliserez comme clé secrète client/ valeur / <client-secret> dans les instructions.

Après avoir créé le jeton Microsoft Entra ID, copiez la valeur access_token, car vous devrez la fournir à votre script, application ou système.

(Facultatif) Étape 4 : créer un jeton OAuth Azure Databricks pour un principal de service Microsoft Entra ID

Important

Databricks ne recommande pas de créer manuellement des jetons OAuth Azure Databricks pour les principaux de service gérés Microsoft Entra ID. Ils expirent dans un délai d’une heure et nécessitent un remplacement manuel. Utilisez plutôt des outils ou des kits de développement logiciel qui implémentent l’authentification unifiée pour générer et remplacer automatiquement des jetons à l’aide de l’autorisation d'accès au principal de service dans Azure Databricks avec OAuth.

Si vous devez créer manuellement un jeton OAuth Azure Databricks pour un principal de service Microsoft Entra ID, consultez Générer manuellement des jetons d’accès OAuth M2M.