Partager via


Approvisionner un principal de service en utilisant Terraform

Remarque

Pour approvisionner un principal de service géré Microsoft Entra ID à l’aide du Portail Azure et de l’interface utilisateur Azure Databricks à la place, consultez Gérer les 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 découvrir comment utiliser les identités managées pour les ressources Azure plutôt que des principaux de service gérés Microsoft Entra ID pour l’authentification Azure Databricks, consultez Configurer et utiliser l’authentification des identités gérées Azure pour l’automatisation 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

É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."
    }
    

    Notes

    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

Databricks ne vous recommande pas de créer manuellement des jetons Microsoft Entra ID pour les principaux de service Microsoft Entra ID. C’est parce que chaque jeton Microsoft Entra ID est de courte durée et expire généralement dans l’heure. Au-delà de ce délai, vous devez générer manuellement un jeton Microsoft Entra ID de remplacement. Utilisez plutôt l’un des outils ou SDK participants qui implémentent la norme d’authentification unifiée du client Databricks. Ces outils et SDK génèrent et remplacent automatiquement pour vous les jetons Microsoft Entra ID expirés, en tirant parti des types d’authentification Databricks suivants :

Si vous devez créer manuellement un jeton Microsoft Entra ID pour un principal de service Microsoft Entra ID, rassemblez les informations suivantes, puis suivez les instructions dans Obtenir un jeton d’accès Microsoft Entra ID avec l’API REST de la plateforme d’identité Microsoft ou Obtenir un jeton d’accès Microsoft Entra ID avec Azure CLI :

  • 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 Provisionner un principal de service dans Portail Azure.
  • 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

Databricks ne vous recommande pas de créer manuellement des jetons OAuth Azure Databricks pour les principaux de service gérés Microsoft Entra ID. Cela est dû au fait que chaque jeton OAuth Azure Databricks est de courte durée et expire généralement après une heure. Au-delà de ce délai, vous devez générer manuellement un jeton OAuth Azure Databricks de remplacement. Utilisez plutôt l’un des outils ou SDK participants qui implémentent la norme d’authentification unifiée du client Databricks. Ces outils et SDK génèrent et remplacent automatiquement les jetons OAuth Azure Databricks expirés pour vous, en tirant parti des informations contenues dans Authentifier l’accès à Azure Databricks avec un principal de service à l’aide d’OAuth (OAuth M2M).

S’il vous faut créer manuellement un jeton OAuth Azure Databricks pour un principal de service Microsoft Entra ID, consultez Générer et utiliser manuellement des jetons d’accès pour l’authentification M2M OAuth.