Pour y répondre, dans cet article je présenterai les quelques étapes clés de la mise en place d’une telle architecture et je présenterai quelques écueils rencontrés en clientèle.
Tout d’abord, il existe plusieurs solutions pour intégrer un rapport Power BI :
- Intégrer un rapport avec l’onglet Power BI pour Microsoft Teams : https://docs.microsoft.com/fr-fr/power-bi/service-embed-report-microsoft-teams
- Intégrer avec le composant WebPart Rapport dans SharePoint Online : https://docs.microsoft.com/fr-fr/power-bi/service-embed-report-spo
- Intégrer un rapport dans un site web ou portail sécurisé : https://docs.microsoft.com/fr-fr/power-bi/service-embed-secure
- Intégrer un rapport dans une application de votre organisation, les utilisateurs se connecteront au service Power BI pour afficher les ressources auxquelles ils ont accès : L’intégration pour votre organisation.
- Intégrer un rapport dans une application pour vos clients, les utilisateurs n’auront pas besoin de compte Power BI : https://docs.microsoft.com/fr-fr/power-bi/developer/embedded/embedding#embedding-for-your-customers
Dans cet article je traiterai uniquement de cette dernière solution, Power BI Embedded :
1 – Introduction
Power BI Embedded est une solution analytique de type PaaS (Platform-as-a-Service) dans Azure. Power BI Premium est une solution analytique de type SaaS (Software-as-a-Service) pour votre organisation. Les deux rendent possible l’intégration de contenus Power BI, regardons donc leurs différences :
PBI Embedded A | PBI Premium EM, P | |
Facturation | Toutes les heures | Mensuelle |
Intégrer un rapport dans une application pour vos clients | Oui | Oui |
Intégrer un rapport dans une application de votre organisation | Non | Oui |
Service Power BI (avec une licence Power BI gratuite) | Non | Oui |
Power BI Mobile (avec une licence Power BI gratuite) | Non | Oui |
Documentation : https://docs.microsoft.com/fr-fr/power-bi/developer/embedded/embedded-faq#what-is-the-difference-between-power-bi-premium-and-power-bi-embedded
La sécurité au niveau des lignes RLS (Row-level security) dans Power BI peut être utilisée pour restreindre l’accès aux données dans des tableaux de bord, vignettes, rapports et jeux de données. Différents utilisateurs peuvent travailler sur ces objets tout en voyant des données différentes.
Pour reproduire les démonstrations vous aurez besoin de Power BI Desktop, d’un compte Power BI Pro et du logiciel Postman qui permet de créer et d’envoyer des requêtes http, très pratique pour tester rapidement une API.
2 – Power BI Embedded & RLS
Étape 1 : Publication d’un rapport Power BI dans un nouveau Workspace
Le but étant de publier sur le service le rapport qui sera incorporé dans l’application.
Publiez le rapport « RLS_EMBED.pbix » dans un nouveau workspace « RLS_EMBED » :
Étape 2 : Enregistrement d’une nouvelle application
Le but étant de permettre à cette application enregistrée dans l’Azure Active Directory d’accéder aux API Power BI REST.
Pour enregistrer une application pour Power BI : https://dev.powerbi.com/Apps
Une fois identifiée, renseignez le nom de l’application, son type (Server-side web application) et les accès à lui octroyer.
Notez bien ces informations.
Étape 3 : Générer un jeton d’accès
Le but étant de valider l’accès aux API Power BI depuis l’application créée et ainsi vérifier ses droits.
Pour faciliter ces étapes, j’ai créé la collection Postman suivante : My Power BI.postman_collection.json
Une fois importée (File, Import), vous trouverez les différentes requêtes que nous utiliserons dans cet article.
Ouvrez la requête « 1 – Générer un jeton d’accès » et modifier les valeurs dans l’onglet Body :
Si comme moi vous obtenez une erreur « The user or administrator has not consented to use the application with ID… ». Cela signifie que soit vous n’êtes pas l’administrateur, soit vous n’avez pas consenti à utiliser l’application. Pour corriger cela, vous devez vous connecter au portail Azure : https://portal.azure.com/
- Dans Azure Active Directory, App Registration
- Retrouvez votre application (RCA_RLSEMBED dans mon cas)
- Dans API Permission, cliquez sur « Grant Acess… »
Testez de nouveau, cela devrait fonctionner comme ci-dessous :
Sauvegardez la valeur « access_token », cela sera notre jeton d’accès pour les prochaines requêtes.
Étape 4 : Lister les Workspaces avec le jeton généré
Le but étant de valider le jeton généré et de retrouver l’identifiant du Workspace contenant notre rapport Power BI.
Ouvrez la requête « 2 – Lister les Workspaces avec le jeton généré » et copier la valeur de la clé d’autorisation (« Bearer » + « access_token ») :
Sauvegardez l’idenfiant du workspace créé « RLS_EMBED ».
Étape 5 : Lister les Rapports d’un Workspaces avec le jeton généré
Le but étant de retrouver l’identifiant du rapport publié.
Ouvrez la requête « 3 – Lister les Rapports d’un Workspaces avec le jeton généré », modifier dans l’adresse du GET l’identifiant du Workspace « RLS_EMBED » et copier la valeur de la clé d’autorisation (« Bearer » + « access_token ») :
Sauvegarder l’identifiant du rapport, du dataset (datasetId) et son url d’intégration (embedUrl).
Étape 6 : Générer un jeton d’intégration
Le but étant de générer un jeton pour intégrer du contenu Power BI.
Ouvrez la requête « 4 – Générer un jeton d’intégration », modifiez dans l’adresse du GET l’identifiant du Workspace et du rapport (https://api.powerbi.com/v1.0/myorg/groups/{GroupId}/reports/{ReportId}/generatetoken) et copiez la valeur de la clé d’autorisation (« Bearer » + « access_token ») :
Sauvegardez le Token d’intégration.
Vous pouvez d’ores et déjà tester l’accès au rapport depuis un site internet externe, via le portail Microsoft Power BI Embedded Playground : https://microsoft.github.io/PowerBI-JavaScript/demo/v2-demo/index.html
Choisissez de tester « Sample Report » et renseignez les paramètres : Embed Token, Embed Url, Report Id
Maintenant que nous avons réussi à intégrer un rapport, appliquons la sécurité fine d’accès aux données.
Étape 7 : Générer un jeton d’intégration avec RLS
Le but étant de générer un jeton pour intégrer du contenu Power BI avec RLS.
Voici le diagramme des tables du rapport Power BI RLS_EMBED.pbix :
Le rôle « DYNAMIC_RLS » permet de filtrer les données dynamiquement :
Documentation : https://docs.microsoft.com/fr-fr/power-bi/service-admin-rls
Ouvrez la requête « 5 – Générer un jeton d’intégration avec RLS », modifiez dans l’adresse du GET l’identifiant du Workspace et du rapport (https://api.powerbi.com/v1.0/myorg/groups/{GroupId}/reports/{ReportId}/generatetoken), copiez la valeur de la clé d’autorisation (« Bearer » + « access_token ») et modifiez le Body :
{ « accessLevel »: « View », « allowSaveAs »: « false », « identities »: [{ « username »: « Leo@PulsWeb.onmicrosoft.com », « roles »: [« DYNAMIC_RLS »], « datasets »: [« 0b59c5cb-c6e7-4a2c-aa1c-4c1028b52692 »] }] } |
Vous pouvez d’ores et déjà tester l’accès au rapport avec RLS depuis le portail Microsoft Power BI Embedded Playground : https://microsoft.github.io/PowerBI-JavaScript/demo/v2-demo/index.html
Et voici le résultat :
Documentation: https://docs.microsoft.com/fr-fr/power-bi/developer/embedded/embedded-row-level-security#applying-user-and-role-to-an-embed-token
Étape 8 : Intégrer le rapport dans une application
Depuis le GitHub Power BI Developer vous pouvez télécharger une solution d’exemple à l’adresse suivante : https://github.com/microsoft/PowerBI-Developer-Samples/tree/master/.NET%20Framework/App%20Owns%20Data
Modification du fichier « web.config » :
Si vous rencontrez une erreur du type « Error AADSTS7000218: The request body must contain the following parameter: ‘client_assertion’ or ‘client_secret' », modifiez les paramètres de l’application ainsi :
3 – Conclusion
Nous avons vu les différentes étapes afin d’intégrer dans une application un rapport Power BI avec une sécurité fine d’accès aux données.
Un jeton d’accès (Access Token) est nécessaire pour s’authentifier au service Power BI et un jeton d’intégration (Embed Token) détermine quelles sont les ressources accessibles, la durée d’accès, … et la sécurité fine. Notez que le jeton d’intégration expirera lorsque le jeton d’accès sera expiré.
Documentation : https://powerbi.microsoft.com/fr-fr/developers/embedded-analytics/isv/
Dans cet article, j’ai présenté la connexion au service Power BI à l’aide d’un compte Pro, il est cependant possible d’utiliser un compte Service Principal. Un compte Service Principal vous permet en effet d’accéder à des ressources ou d’effectuer des opérations à l’aide de l’API Power BI sans qu’un utilisateur ait besoin de se connecter ou d’avoir une licence Power BI Pro. Il peut également incorporer du contenu destiné à des utilisateurs non-Power BI dans des applications tierces. Vérifier bien les limitations : https://docs.microsoft.com/fr-fr/power-bi/developer/embedded/embed-service-principal#considerations-and-limitations.
RLS vs Custom Filter : Pourquoi utiliser le RLS dans Power BI si je peux depuis mon application appliquer un filtre custom dynamique depuis mon application et ainsi filtrer ce que les utilisateurs ont le droit de voir ? Tout simplement parce que le filtre personnalisé avec JavaScript API n’est pas assez sécurisé, toute personne qui sait comment pirater le JavaScript peut le contourner. Seule la sécurité au niveau des lignes (RLS) dans PowerBI fournit une solution sécurisé d’accès aux données fine (en mode import).
Power BI Pro vs Azure Power BI Embedded & Power BI Premium : Pourquoi utiliser des ressources dédiées dans Azure Power BI Embedded ou Power BI Premium pour intégrer des rapports Power BI alors que nous venons de le faire avec un compte Power BI Pro ? Tout simplement parce que l’utilisation de cette fonctionnalité avec des licences Power BI Pro est uniquement destinée aux tests de développement « A dedicated capacity requires embedding in a production environment. ». Source : https://docs.microsoft.com/en-us/power-bi/developer/embedded/embed-sample-for-customers#move-to-production
Bonjour,
Je trouve l’article très intéressant. Cependant, je n’arrive pas à télécharger le fichier My Power BI.postman_collection.json
Bonjour, merci pour votre feedback. Le lien suivant fonctionne bien : https://1drv.ms/u/s!AuHo6XX5MiYSloNvDS7enf0qdyOE8w?e=Dl7FQK