RLS_EMBED_ARCHITECTURE

Power BI Embedded & RLS

Un besoin récurrent que je rencontre chez mes clients : « Comment intégrer dans une application métier des rapports Power BI et garder une sécurité fine aux données ? ».

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 :

Dans cet article je traiterai uniquement de cette dernière solution, Power BI Embedded :

RLS_EMBED_ARCHITECTURE

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 » :

PowerBI_Report

PBI_Workspace_RLS

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

PBI_Application

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 :

PBI_TOKEN1

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… »

Azure_AAD_API

Testez de nouveau, cela devrait fonctionner comme ci-dessous :

PBI_TOKEN2

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 ») :

PBI_WorkspacesList

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 ») :

PBI_ReportList

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 ») :

PBI_EMBED_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

PowerBI_Embedded

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 :

RLS_EMBED_TABLES

Le rôle « DYNAMIC_RLS » permet de filtrer les données dynamiquement :

RLS_EMBED_ROLES

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”]
}]
}

PBI_EMBED_TOKEN_RLS

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 :

PowerBI_Embedded_RLS

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 » :
SolutionPBIRLS

Exécution de la solution :
PBI_APP_EMBED_RLS

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 :

AAD_App

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

Leave a comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *