Partager via


Exécuter un travail avec un principal de service Microsoft Entra ID

Les travaux offrent un moyen non interactif d’exécuter des applications dans un cluster Azure Databricks, par exemple un travail ETL ou une tâche d’analyse de données à exécuter selon une planification. Généralement, ces tâches s'exécutent en tant qu'utilisateur qui les a créées, mais cela peut présenter certaines limitations :

  • La création et l’exécution de travaux sont possibles si l’utilisateur dispose des autorisations appropriées.
  • Seul l’utilisateur qui a créé le travail y a accès.
  • Or, l’utilisateur peut être supprimé de l’espace de travail Azure Databricks.

L’utilisation d’un compte de service (un compte associé à une application plutôt qu’à un utilisateur spécifique) est une méthode courante pour s’affranchir de ces limites. Dans Azure, vous pouvez utiliser une application et un principal de service Microsoft Entra ID pour créer un compte de service.

Utiliser un compte de service s’avère notamment important quand les principaux de service contrôlent l’accès aux données stockées dans un compte Azure Data Lake Storage Gen2. L’exécution de travaux avec ces principaux de service permet aux travaux d’accéder aux données incluses dans le compte de stockage et de contrôler l’étendue de l’accès aux données.

Ce tutoriel explique comment créer un principal de service et une application Microsoft Entra ID, puis désigner ce principal de service comme propriétaire d’un travail. Vous allez aussi apprendre à attribuer des autorisations d’exécution de travaux à d’autres groupes non propriétaires du travail. Voici une vue d’ensemble des tâches parcourues dans le cadre de ce tutoriel :

  1. Créez un principal de service dans Microsoft Entra ID.
  2. Créer un jeton d’accès personnel (PAT) dans Azure Databricks. Vous allez utiliser le PAT pour vous authentifier auprès de l’API REST Databricks.
  3. Ajouter le principal de service en tant qu’utilisateur non administrateur à Azure Databricks à l’aide de l’API SCIM Databricks.
  4. Créer une étendue de secrets Azure Key Vault dans Azure Databricks.
  5. Accorder au principal de service un accès en lecture à l’étendue de secrets.
  6. Créer un travail dans Azure Databricks et configurer le cluster de travail pour lire les secrets issus de l’étendue de secrets.
  7. Transférer la propriété du travail au principal de service.
  8. Tester le travail en l’exécutant en tant que principal de service.

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

Remarque

Vous ne pouvez pas utiliser un cluster avec un transfert direct activé des informations d’identification pour exécuter un travail détenu par un principal de service. Si votre travail nécessite un principal de service pour accéder à un stockage Azure, consultez Se connecter à Azure Data Lake Storage Gen2 ou au Stockage Blob en utilisant des informations d’identification Azure.

Spécifications

Pour ce tutoriel, vous avez besoin des éléments suivants :

  • Un compte d’utilisateur disposant des autorisations nécessaires pour inscrire une application dans votre locataire Microsoft Entra ID.
  • Des privilèges administratifs dans l’espace de travail Azure Databricks dans lequel vous allez exécuter des travaux.
  • Un outil pour effectuer des demandes d’API à Azure Databricks. Ce tutoriel utilise cURL, mais vous pouvez utiliser n’importe quel outil qui vous permet de soumettre des demandes d’API REST.

Créer un principal de service dans Microsoft Entra ID

Un principal de service est l’identité d’une application Microsoft Entra ID. Pour créer le principal du service à utiliser pour exécuter des travaux :

  1. Dans le portail Azure, sélectionnez Microsoft Entra ID > Inscriptions d’applications > Nouvelle inscription. Entrez un nom pour l’application et cliquez sur Inscrire.
  2. Accédez à Certificats et secrets, cliquez sur Nouveau secret client et générez un nouveau secret client. Copiez et enregistrez le secret dans un endroit sécurisé.
  3. Accédez à Vue d’ensemble et notez les valeurs ID d’application (client) et ID d’annuaire (locataire).

Créer le jeton d’accès personnel Azure Databricks

Vous allez utiliser un jeton d’accès personnel (PAT) Azure Databricks pour vous authentifier auprès de l’API REST Databricks. Pour créer un PAT utilisable pour effectuer des demandes d’API :

  1. Accédez à votre espace de travail Azure Databricks.
  2. Cliquez sur votre nom d’utilisateur dans le coin supérieur droit de l’écran, puis cliquez sur Paramètres.
  3. Cliquez sur Développeur.
  4. À côté de Jetons d’accès, cliquez sur Gérer.
  5. Cliquez sur Générer un nouveau jeton.
  6. Copiez et enregistrez la valeur du jeton.

Conseil

Cet exemple utilise un jeton d’accès personnel, mais vous pouvez utiliser un jeton Microsoft Entra ID pour la plupart des API. Dans le cadre des bonnes pratiques, un jeton PAT convient aux tâches de configuration administratives, tandis que les jetons Microsoft Entra ID sont préférables pour les charges de travail de production.

Vous pouvez limiter la génération des PAT aux seuls administrateurs pour des raisons de sécurité. Pour plus d’informations, consultez Surveiller et révoquer des jetons d’accès personnels.

Ajouter le principal de service à l’espace de travail Azure Databricks

Vous ajoutez le principal de service Microsoft Entra ID à un espace de travail en utilisant l’API Service Principals. Vous devez aussi accorder au principal de service l’autorisation de lancer des clusters de travail automatisés. Vous pouvez accorder cette autorisation par le biais de l’autorisation allow-cluster-create. Ouvrez un terminal, utilisez la CLI Databricks et exécutez la commande suivante pour ajouter le principal de service et octroyer les autorisations nécessaires :

databricks service-principals create --json '{
  "schemas":[
    "urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal"
  ],
  "applicationId":"<application-id>",
  "displayName": "test-sp",
  "entitlements":[
    {
      "value":"allow-cluster-create"
    }
  ]
}'

Remplacez <application-id> par Application (client) ID pour l’inscription d’application Microsoft Entra ID.

Créer une étendue de secrets Azure Key Vault dans Azure Databricks

Gérer les étendues de secrets fournit un stockage et une gestion sécurisés des secrets. Vous allez stocker le secret associé au principal de service dans une étendue de secrets. Vous pouvez stocker des secrets dans une étendue de secrets Azure Databricks ou une étendue de secrets Azure Key Vault. Ces instructions décrivent l’option Azure Key Vault :

  1. Créez une instance Azure Key Vault dans le portail Azure.
  2. Créez l’étendue de secrets Azure Databricks étendue reposant sur l’instance Azure Key Vault.

Étape 1 : Créer une instance Azure Key Vault

  1. Dans le portail Azure, sélectionnez Key Vaults > + Ajouter et donnez un nom au Key Vault.

  2. Cliquez sur Vérifier + créer.

  3. Une fois la validation terminée, cliquez sur Créer.

  4. Après avoir créé le Key Vault, accédez à la page Propriétés du nouveau Key Vault.

  5. Copiez et enregistrez l’URI du coffre et l’ID de la ressource.

    Propriétés de l’Azure Key Vault

Étape 2 : Créer une étendue de secrets Azure Key Vault

Les ressources Azure Databricks peuvent faire référence à des secrets stockés dans un Azure Key Vault en créant une étendue de secrets reposant sur Key Vault. Pour créer l’étendue de secrets Azure Databricks :

  1. Accédez à la page Créer une étendue de secrets Azure Databricks sur https://<per-workspace-url>/#secrets/createScope. Remplacez per-workspace-url par l’URL par espace de travail unique de votre espace de travail Azure Databricks.

  2. Entrez le nom de l’étendue.

  3. Entrez les valeurs URI du coffre et ID de la ressource de l’Azure Key Vault que vous avez créé à l’étape 1 : Créer une instance Azure Key Vault.

  4. Cliquez sur Créer.

    Créer une étendue de secrets

Enregistrer le secret client dans Azure Key Vault

  1. Dans le portail Azure, accédez au service Key Vault.

  2. Sélectionnez le Key Vault créé à l’étape 1 : Créer une instance Azure Key Vault.

  3. Sous Paramètres > Secrets, cliquez sur Générer/Importer.

  4. Sélectionnez l’option de chargement Manuel, puis entrez le secret client dans le champ Valeur.

    Créer un secret

  5. Cliquez sur Créer.

Accorder au principal de service un accès en lecture à l’étendue de secrets

Vous avez créé une étendue de secrets et stocké le secret client du principal de service dans cette étendue. À présent, vous allez accorder au principal de service un accès en lecture pour lui permettre de lire le secret dans l’étendue de secrets.

Ouvrez un terminal et utilisez l’interface CLI Databricks pour exécuter la commande suivante :

databricks secrets put-acl <scope-name> <application-id> READ
  • Remplacez <scope-name> par le nom de l’étendue de secrets Azure Databricks qui contient le secret client.
  • Remplacez <application-id> par Application (client) ID pour l’inscription d’application Microsoft Entra ID.

Créer un travail dans Azure Databricks et configurer le cluster pour lire les secrets issus de l’étendue de secrets

Vous êtes maintenant prêt à créer un travail exécutable en tant que nouveau principal de service. Vous allez utiliser un notebook créé dans l’interface utilisateur Azure Databricks et ajouter la configuration pour permettre au cluster de travail de récupérer le secret du principal de service.

  1. Accédez à votre page de destination Azure Databricks et sélectionnez Nouveau > Notebook. Donnez un nom à votre notebook et sélectionnez SQL comme langage par défaut.

  2. Entrez SELECT 1 dans la première cellule du notebook. Il s’agit d’une commande simple qui affiche simplement 1 en cas de réussite. Si vous avez accordé à votre principal de service un accès à des fichiers ou chemins particuliers dans Azure Data Lake Storage Gen2, vous pouvez lire plutôt à partir de ces chemins.

  3. Accédez à Workflows et cliquez sur Créer une tâche. Donnez un nom au travail et à la tâche, cliquez sur Sélectionner un Notebook et sélectionnez le bloc-notes que vous venez de créer.

  4. Cliquez sur Modifier en regard des informations sur le cluster.

  5. Dans la page Configurer le cluster, cliquez sur Options avancées.

  6. Sous l’onglet Spark, entrez la configuration Spark suivante :

    fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
    fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
    fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
    fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope-name>/<secret-name>}}
    fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token
    
    • Remplacez <storage-account> par le nom du compte de stockage contenant vos données.
    • Remplacez <secret-scope-name> par le nom de l’étendue de secrets Azure Databricks qui contient le secret client.
    • Remplacez <application-id> par Application (client) ID pour l’inscription d’application Microsoft Entra ID.
    • Remplacez <secret-name> par le nom associé à la valeur du secret client dans l’étendue de secrets.
    • Remplacez <directory-id> par Directory (tenant) ID pour l’inscription d’application Microsoft Entra ID.

Transférer la propriété du travail au principal de service

Un travail ne peut avoir qu’un seul propriétaire. Vous devez donc transférer la propriété du travail de vous-même au principal du service. Pour vous assurer que les autres utilisateurs puissent gérer le travail, vous pouvez aussi accorder des autorisations PEUT GÉRER à un groupe. Dans cet exemple, nous utilisons l’API Permissions pour définir ces autorisations.

Ouvrez un terminal et utilisez l’interface CLI Databricks pour exécuter la commande suivante :

databricks permissions set jobs <job-id> --json '{
  "access_control_list": [
    {
      "service_principal_name": "<application-id>",
      "permission_level": "IS_OWNER"
    },
    {
      "group_name": "admins",
      "permission_level": "CAN_MANAGE"
    }
  ]
}'
  • Remplacez <job-id> par l’identificateur unique du travail. Pour rechercher l’ID du travail, cliquez sur Workflows dans la barre latérale, puis sur le nom du travail. L’ID du travail figure dans le panneau latéral Détails du travail.
  • Remplacez <application-id> par Application (client) ID pour l’inscription d’application Microsoft Entra ID.

Le travail aura également besoin d’autorisations de lecture sur le notebook. Utilisez l’interface CLI Databricks pour exécuter la commande suivante pour accorder les autorisations requises :

databricks permissions set notebooks <notebook-id> --json '{
  "access_control_list": [
    {
      "service_principal_name": "<application-id>",
      "permission_level": "CAN_READ"
    }
  ]
}'
  • Remplacez <notebook-id> par l’ID du notebook associé au travail. Pour trouver cet ID, accédez au notebook dans l’espace de travail Azure Databricks et recherchez l’ID numérique qui suit notebook/ dans l’URL du notebook.
  • Remplacez <application-id> par Application (client) ID pour l’inscription d’application Microsoft Entra ID.

Tester le travail

Vous exécutez des travaux avec un principal de service de la même façon qu’en tant qu’utilisateur, à savoir par le biais de l’interface utilisateur, de l’API ou de l’interface CLI. Pour tester le travail à l’aide de l’interface utilisateur Azure Databricks :

  1. Accédez à Workflows dans l’interface utilisateur Azure Databricks, puis sélectionnez le travail.
  2. Cliquez sur Exécuter maintenant.

L’état Opération réussie apparaît pour le travail si tout s’exécute correctement. Vous pouvez sélectionner le travail dans l’interface utilisateur pour vérifier la sortie :

Sortie de la tâche 

En savoir plus

Pour en savoir plus sur la création et l’exécution de projets, consultez Planifier et orchestrer des flux de travail.