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

(Perico Riccardo) (17 agosto 2020)

Recentemente ho letto un ottimo articolo di Nicky Van Vroenhoven .

Nel suo scenario Nicky deve attivare laggiornamento del set di dati di Power BI dopo uno specifico passaggio nel lavoro di SQL Server Agent e deve essere eseguito senza utilizzare le credenziali di un utente reale .

Ha creato uno script PowerShell che accede e attiva laggiornamento del set di dati tramite un SPN.

Dopo aver letto questo, inizio a pensare se potessi incapsularlo in unarchitettura diversa che potrebbe essere il punto di ingresso per molti tipi di applicazioni diverse.

Lidea è di comprimere lo script di PowerShell in un Azure Automation Runbook

e quindi renderlo disponibile a tutte le applicazioni che possono semplicemente eseguire una richiesta di post a un URI.

Vantaggi:

1. Solo una versione centralizzata dello script

2. Il modulo di gestione di Power BI non è installato sul computer dellapplicazione ma è installato ed eseguito nel cloud su un set di VM con provisioning su richiesta allavvio dellesecuzione

3. Il runbook può essere pianificato (forse non è un vantaggio, ma solo una funzionalità aggiuntiva poiché possiamo già pianificare un aggiornamento di Power BI)

4. Le credenziali crittografate supportano per farle funzionare senza conoscere il segreto SPN

5. Le variabili supportano per modificare dinamicamente il contesto dellaggiornamento

6. I webhook supportano per esporlo come scatola nera con una semplice chiamata POST

Supponiamo già che i seguenti prerequisiti sul posto:

– SPN creato e configurato in AAD

– API abilitate utilizzate a livello di tenant di Power BI per SPN

– Worspace V2 con utente SPN come admin

Se da ora in poi linstallazione è già attiva e in esecuzione, è abbastanza semplice, potrebbe essere eseguita manualmente dal portale Azure ma preferisco PowerShell con Az module , è più veloce, più facile da replicare e meno “clic-clic” 🙂 (usa PowerShell 7.x come suggerito da MSFT poiché ho trovato alcuni bug che lo utilizzavano in PowerShell 5.1.X).

Prima di tutto parametri di configurazione per la creazione delle risorse:

$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

Quindi connettiti alla sottoscrizione di Azure

Connect-AzAccount

Crea unautomazione di Azure Account (puoi usarne uno esistente se lo desideri)

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

Crea il Runbook che ospiterà il nostro codice PowerShell (nota il parametro Type uguale a PowerShell)

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

Crea 3 variabili che ospiteranno i valori per gli ID necessari per aggiornare il set di dati:

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

Archivia i segreti SPN in modo sicuro sfruttando la funzionalità delle credenziali di Automazione di Azure:

$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

Codice completo:

Lambiente è pronto.

Solo 2 passaggi manuali da eseguire:

1. Importa il modulo MicrosoftPowerBIMgmt.Profile PowerShell in Automazione di Azure. Ciò consente ad Automazione di Azure di usare i cmdlet contenuti in quel modulo.

a. Apri il portale di Azure

b. Accedi al tuo account di automazione di Azure

c. Nel pannello di sinistra, sotto “Risorse condivise”, fai clic su “Galleria moduli”

d. Cerca “MicrosoftPowerBIMgmt.Profile”

e. Selezionalo e fai clic su “Importa”

2. Aggiungi script PowerShell per eseguire laggiornamento di Power BI tramite chiamate API