SPN + Azure Runbook + Webhook = Power Actualisation BI (pt. 1)

(Perico Riccardo) (17 août 2020)

Jai récemment lu un excellent arcticle par Nicky Van Vroenhoven .

Dans son scénario, Nicky doit activer lactualisation de lensemble de données Power BI après une étape dans le travail de lAgent SQL Server et cela doit être fait sans utiliser les informations didentification dun utilisateur réel .

Il la fait en créant un script PowerShell qui se connecte et déclenche lactualisation de lensemble de données via un SPN.

Après avoir lu ceci, je commence à me demander si je pourrais lencapsuler dans une architecture différente qui pourrait être le point dentrée de nombreux types dapplications différentes.

Lidée est de regrouper le script PowerShell dans un Azure Automation Runbook

puis le rendre disponible à toutes les applications qui peuvent simplement effectuer une demande de publication vers un URI.

Avantages:

1. Une seule une version centralisée du script

2. Le module de gestion Power BI nest pas installé sur la machine dapplication, mais il est installé et exécuté dans le cloud sur un ensemble de VM provisionnées à la demande au démarrage de lexécution

3. Le Runbook peut être planifié (ce nest peut-être pas un avantage, juste une fonctionnalité supplémentaire puisque nous pouvons déjà planifier une actualisation de Power BI)

4. Les identifiants cryptés prennent en charge afin de le faire fonctionner sans connaître le secret SPN

5. Les variables prennent en charge pour modifier dynamiquement le contexte de votre actualisation

6. Prise en charge des webhooks pour lexposer sous forme de boîte noire avec un simple appel POST

Supposons déjà les prérequis suivants en place:

– SPN créé et configuré dans AAD

– Les API activées sont utilisées au niveau du locataire Power BI pour SPN

– Worspace V2 avec lutilisateur SPN en tant que admin

Si la configuration est déjà en place et en cours dexécution à partir de maintenant, cest assez facile, cela pourrait être fait manuellement par Azure Portal mais je préfère PowerShell avec Module Az , cest plus rapide, plus facile à répliquer et moins «clicky-clicky» 🙂 (utilisez PowerShell 7.x comme suggéré par MSFT car jai trouvé quelques bugs en lutilisant dans PowerShell 5.1.X).

Tout dabord paramètres de configuration pour la création de ressources:

$resource\_group\_name = ""
$automation\_account\_name = ""
$automation\_account\_location = ""
$runbook\_name = ""
$tenant\_id = ""
$group\_id = "" # Workspace ID
$dataset\_id = "" # Dataset to Refresh ID
$app\_id = "" # Service PRincipal ID
$Password = ConvertTo-SecureString "ThisIsMyPassword" -AsPlainText -Force # Secret from Service Principal

Puis connectez à labonnement Azure

Connect-AzAccount

Créer un Azure Automation Compte (vous pouvez en utiliser un existant si vous le souhaitez)

New-AzAutomationAccount -ResourceGroupName $resource\_group\_name -Location $automation\_account\_location -Name $automation\_account\_name

Créez le Runbook qui hébergera notre code PowerShell (notez le paramètre Type égal à PowerShell)

New-AzAutomationRunbook -Name $runbook\_name -ResourceGroupName $resource\_group\_name -AutomationAccountName $automation\_account\_name -Type PowerShell

Créez 3 variables qui hébergeront les valeurs des ID nécessaires pour actualiser lensemble de données:

New-AzAutomationVariable -Name ‘TenantID’ -Description ‘Power BI Tenant ID’ -Value $tenant\_id -AutomationAccountName $automation\_account\_name -ResourceGroupName $resource\_group\_name -Encrypted $falseNew-AzAutomationVariable -Name ‘GroupID’ -Description ‘Power BI Workspace ID’ -Value $group\_id -AutomationAccountName $automation\_account\_name -ResourceGroupName $resource\_group\_name -Encrypted $falseNew-AzAutomationVariable -Name ‘DatasetID’ -Description ‘Power BI Dataset ID’ -Value $dataset\_id -AutomationAccountName $automation\_account\_name -ResourceGroupName $resource\_group\_name -Encrypted $false

Stockez les secrets SPN en toute sécurité en tirant parti de la fonction didentification dAzure Automation:

$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $app\_id, $passwordNew-AzAutomationCredential -name ‘SPN’ -Description ‘Service Principal’ -Value $Credential -AutomationAccountName $automation\_account\_name -ResourceGroupName $resource\_group\_name

Code complet:

Lenvironnement est prêt.

Seulement 2 étapes manuelles à effectuer:

1. Importez le module MicrosoftPowerBIMgmt.Profile PowerShell dans Azure Automation. Cela permet à Azure Automation dutiliser les applets de commande contenues dans ce module.

a. Ouvrez le portail Azure

b. Accédez à votre compte Azure Automation

c. Dans le panneau de gauche, sous «Ressources partagées», cliquez sur «Galerie de modules»

d. Recherchez « MicrosoftPowerBIMgmt.Profile »

e. Sélectionnez-le et cliquez sur « Importer »

2. Ajouter un script PowerShell pour effectuer une actualisation Power BI via les appels dAPI