Power BI Embeded – Live connection SSAS RLS – ReadOverrideEffectiveIdentity

Cas de figure :

  1. Vous développez une application embarquant des éléments power BI, sur une capacité PowerBI Embeded / Premium
  2. Vous avez enregistré cette application sur un Azure Active Directory
  3. Vous utilisez un principal de service pour vous authentifier sur le service PowerBI depuis cette application
  4. Certains de vos rapports utilisent une connexion live sur un cube SSAS au travers d’une passerelle « Power BI Gateway »
  5. Votre cube implémente du RLS (Row level Security) et vous souhaitez depuis l’application transmettre l’EffectiveIdentity ou le CustomData (pas exemple pour le RLS)

Alors, vous devez donner à votre principal de service un droit spécifique sur la datasource représentant votre cube sur la gateway au sein du service PowerBI.

Ce droit s’intitule ReadOverrideEffectiveIdentity et sous-entend que votre application va prendre la main pour transférer elle-même l’effectiveIdentity ou le CustomData en bypassant le travail de la passerelle.

Ce droit ne peut-être octroyer que par un administrateur de votre locataire PowerBI et il peut l’être à un principal de service, un utilisateur ou un groupe de sécurité. L’action doit être réalisée via un appel aux API Power BI via l’action AddDataSourceUser.

Tout cela est détaillé et décrit dans la documentation fournie par Microsoft et l’API à utiliser est également documentée. Ayant éprouvé malgré tout quelques difficultés à réaliser cette étape voici un petit script Powershell et le détail sur chacun des paramètres requis :

#Import-Module -name microsoftpowerbimgmt
Connect-PowerBIServiceAccount
$headers = Get-PowerBIAccessToken

$gatewayId = ""
$dataSourceId = ""
$principalId = ""

#Get Existing rights
$URL = "https://api.powerbi.com/v1.0/myorg/gateways/$gatewayId/datasources/$dataSourceId/users"
$model = Invoke-RestMethod -Headers $headers -Uri $URL -Method GET
"Existing Rights : "
$model.value

#Set new rights for principal
$User1 = @{
  identifier= "$principalId"
  datasourceAccessRight= "ReadOverrideEffectiveIdentity"
  principalType="App"
} | ConvertTo-Json

try{
Invoke-RestMethod -Headers $headers -Uri $URL -ContentType 'application/json' -Method POST -Body $User1
}
catch {
    # Dig into the exception to get the Response details.
    # Note that value__ is not a typo.
    "catch"
    Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__ 
    Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription
    ([System.IO.StreamReader]$_.Exception.Response.GetResponseStream()).ReadToEnd()    
}

Reste à obtenir les valeurs pour les 3 paramètres.

Les deux premiers $gatewayId et $datasourceId s’obtiennent directement en parcourant votre service powerbi. Rendez vous sur la gestion de vos passerelles, dépliez celle qui contient la datasource pointant vers le cube et cliquez sur celle-ci.

L’url contient désormais l’identifiant de la passerelle (la valeur à donner à $gatewayId) et celui de la source de données (la valeur à donner à $datasourceId)

Concernant le troisième paramètre, il s’agit de l’identifiant du service principal et c’est là qu’il ne faut pas se perdre faute de recevoir une exception peu bavarde du type « DMTS_PrincipalsAreInvalidError ».

Fin du suspense pour obtenir l’Id en question, rendez-vous sur le portail Azure et suivez ce chemin :

Azure Active Directory -> App Registration -> Votre application

Ensuite, cliquez à la pointe de la flèche :

Application sur la portail Azure

Cliquez ensuite sur Properties, l’id à utiliser est l’objectId présenté sur cette page de propriétés.

L’exécution du script powershell vous permettra alors d’octroyer les droits requis. Un compte administrateur doit être utilisé pour se connecter lorsque le script vous dirige vers la connexion à PowerBI.

Publicités

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s