Depuis quelques mois il est possible d’appeler l’API REST de Power BI en utilisant une authentification basée uniquement sur une application AD (SPN).
Cela permet d’éviter de devoir gérer un compte utilisateur avec une licence Pro pour les opérations administratives telles que les actualisations de Data Set, la création de workspace, ou le backup des fichiers Power BI.
La procédure n’est pas simple je vais essayer de la détailler ci-dessous :
Création d’une application Azure AD
Depuis l’Azure Active Directory, faire une nouvelle inscription d’application.
L’URL n’a aucune utilité, la seule information réellement nécessaire est le nom de l’application. Aucun besoin d’ajouter de permission sur cette application. (Il sera nécessaire de générer une clé par la suite)
Pendant que nous sommes sur l’AD il est aussi nécessaire (et obligatoire) d’ajouter cette application svc_powerbi dans un groupe AD (et oui c’est maintenant possible !!!) car c’est ce groupe que l’on va assigner dans Power BI.
Une fois le groupe créé, il est possible d’ajouter l’application dans le groupe.
Fini pour l’AD, vous pouvez fermer le portail Azure.
Configuration du tenant Power BI
La configuration côté Power BI est à réaliser via le portail d’administration accessible depuis https://app.powerbi.com/admin-portal/tenantSettings.
Depuis le menu « Paramètres du client » > Paramètre du développeur > Autoriser les principaux de service à utiliser les API Power BI.
Puis indiquez le groupe de sécurité indiqué précédemment.
Générer un Token pour tester les accès
Afin de pouvoir tester ce que l’on va pouvoir ou ne pas pouvoir faire, générons un token via Postman.
Pour générer un Token d’authentification depuis une application Azure, il est nécessaire de revenir sur l’écran « Inscriptions d’applications » depuis l’annuaire Azure.
En ouvrant l’application svc_powerbi (que l’on a ajoutée dans le groupe AD qui a ensuite été ajouté dans le portail admin de Power BI…)
Nous allons récupérer les informations suivantes :
- ID D’application : a14f9fea-b481-xxxx-xxxx-f7a31a8175eb
- ID de l’annuaire (Tenant Id) : 64a0dfc9-1e82-xxxx-xxxx-0505e4915ff6
Puis dans l’onglet Certificats & secrets, nous allons générer une clé afin de pouvoir générer un token d’application.
On récupère ensuite la clé ainsi générée :
Ces trois éléments (Application ID, Application Secret, Tenant Id) récupérés il est maintenant possible de générer un token pour PowerBI.
En jaune les trois éléments à remplacer, dans l’URL le Tenant ID, l’identifiant de l’application comme client_id, et la clé dans le client_secret.
Cela nous permet de récupérer l’access_token, c’est lui qui sera utilisé lors de l’appel à l’API PowerBI.
Actualiser un jeu de données PowerBI
Pour actualiser un jeu de données Power Bi il est possible d’utiliser l’API https://api.powerbi.com/v1.0.
Pour cela il est nécessaire de récupérer :
- L’identifiant du Workspace (GroupId)
- L’identifiant du Dataset
- Le token d’authentification (récupéré dans la section précédente !)
Vous pouvez récupérer GroupId et DatasetId depuis le portail :
On met toutes les informations dans Postman :
Vous noterez le header « Authorization » à ajouter à la requête POST qui contient l’access_token précédé de « Bearer « .
Voilà on obtient donc un beau 404 Not Found! Pourquoi me direz-vous ? Vous avez bien ajouté l’application svc_powerbi dans un groupe Azure Ad, ensuite vous avez ajouté ce groupe dans les « Paramètre du développeur » du portail administrateur Power BI… mais vous n’avez donné aucun droit à cette application sur le Workspace.
Il est donc nécessaire d’ajouter des droits à l’application sur le Workspace :
Attention ! Aujourd’hui il faut plus de 30 minutes lors de la suppression des droits à une application pour que ce changement soit effectif, cela est… perturbant !
Lorsque cela est fait :
Le rafraichissement du jeu de données est effectif !
Utilisation d’un MSI ?
Et oui, après avoir vu qu’il était possible d’utiliser une authentification uniquement basée sur une inscription d’application Azure AD, peut-on aller plus loin et utiliser l’authentification d’un service Azure, à savoir son MSI ?
Pour cela, testons avec Azure Data Factory, service qui depuis plusieurs mois est livré d’office avec une identité managée.
On crée pour cela un service Azure Data Factory avec le nom « PowerBI-ADF2 », cela génère une MSI du même nom.
Il semble possible d’ajouter celle-ci dans le groupe précédemment crée.
Après l’enregistrement, on voit que les MSI sont un peu différentes :
Puis de l’ajouter sur le Workspace sur lequel on souhaite actualiser les jeux de données.
Et voilà avec une activité WEB de base d’Azure Data Factory il est possible d’actualisé un jeu de données Power BI ! Aussi simple que cela.
Conclusion
Privilégiez toujours l’utilisation des MSI couplés avec des activités Web d’Azure Data Factory afin de faire vos opérations de gestion dans Azure. Cela est simple, lisible, natif, et sécurisé.
One comment
Voila un article qui l’est bon! Et en plus le ton est sympa.
A pluche pour un pot à l’occasion