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

(Perico Riccardo) (17 sierpnia 2020 r.)

Niedawno przeczytałem świetny artykuł autorstwa Nicky Van Vroenhoven .

W swoim scenariuszu Nicky musi uruchomić odświeżenie zestawu danych usługi Power BI po określonym krok w pracy agenta programu SQL Server i należy to zrobić bez użycia danych uwierzytelniających prawdziwego użytkownika .

Stworzył skrypt PowerShell, który loguje się i odpala odświeżanie zestawu danych przez SPN.

Po przeczytaniu tego zaczynam się zastanawiać, czy mógłbym to zamknąć w inną architekturę, która może być punktem wyjścia dla wielu typów różnych aplikacji.

Pomysł polega na umieszczeniu skryptu programu PowerShell w Azure Automation Runbook

, a następnie udostępnij je wszystkim aplikacjom, które mogą po prostu wysłać żądanie wysłania do URI.

Zalety:

1. Tylko jedna scentralizowana wersja skryptu

2. Moduł zarządzania Power BI nie jest zainstalowany na komputerze z aplikacjami, ale jest i wykonywane w chmurze na zestawie maszyn wirtualnych udostępnianych na żądanie, gdy rozpoczyna się wykonywanie

3. Element Runbook można zaplanować (może to nie jest zaleta, tylko dodatkowa funkcja, ponieważ możemy już zaplanować odświeżenie usługi Power BI)

4. Zaszyfrowane poświadczenia obsługują , aby działało bez znajomości tajnego numeru SPN

5. Obsługa zmiennych dynamicznie zmieniająca kontekst odświeżania

6. Obsługa webhooków , aby udostępnić go jako czarną skrzynkę za pomocą prostego wywołania POST

Załóżmy, że następujące warunki wstępne na miejscu:

– Nazwa SPN utworzona i skonfigurowana w usłudze AAD

– Włączone interfejsy API używają na poziomie dzierżawy usługi Power BI dla nazwy SPN

– Worspace V2 z użytkownikiem SPN jako admin

Jeśli to już działa i od teraz działa konfiguracja jest całkiem prosta, można to zrobić ręcznie przez Azure Portal, ale wolę PowerShell z Moduł Az , replikacja jest szybsza, łatwiejsza i mniej „klikająca” 🙂 (użyj PowerShell 7.x zgodnie z sugestią MSFT, ponieważ znalazłem kilka błędów, używając go w PowerShell 5.1.X).

Przede wszystkim parametry konfiguracji do tworzenia zasobów:

$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

Następnie połącz do subskrypcji Azure

Connect-AzAccount

Utwórz usługę Azure Automation Konto (jeśli chcesz, możesz użyć istniejącego)

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

Utwórz element Runbook , który będzie hostował nasz kod PowerShell (zwróć uwagę na parametr Type równy PowerShell)

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

Utwórz 3 zmienne, które będą zawierać wartości dla identyfikatorów potrzebne do odświeżenia zbioru danych:

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

Bezpieczne przechowywanie sekretów SPN z wykorzystaniem funkcji poświadczeń usługi Azure 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

Pełny kod:

Środowisko jest gotowe.

Tylko 2 ręczne kroki do wykonania:

1. Zaimportuj moduł MicrosoftPowerBIMgmt.Profile PowerShell do automatyzacji Azure. Dzięki temu usługa Azure Automation może używać poleceń cmdlet zawartych w tym module.

a. Otwórz portal Azure

b. Przejdź do swojego konta Azure Automation

c. W lewym okienku w sekcji „Zasoby współdzielone” kliknij „Galeria modułów”

d. Wyszukaj „MicrosoftPowerBIMgmt.Profile”

mi. Wybierz go i kliknij „Importuj”

2. Dodaj skrypt PowerShell, aby przeprowadzić odświeżanie usługi Power BI przez wywołania API