Premium-werkruimte en semantische modeltaken automatiseren met service-principals

Service-principals zijn een Microsoft Entra ID-app-registratie die u in uw tenant maakt om bewerkingen op resource- en serviceniveau zonder toezicht uit te voeren. Ze zijn een uniek type gebruikersidentiteit met een app-naam, toepassings-id, tenant-id en clientgeheim of -certificaat voor een wachtwoord.

Power BI Premium maakt gebruik van dezelfde functionaliteit van de service-principal als Power BI Embedded. Zie Power BI-inhoud insluiten met service-principals voor meer informatie.

In Power BI Premium kunt u service-principals gebruiken met het XMLA-eindpunt (XMLA) om semantische modelbeheertaken te automatiseren, zoals het inrichten van werkruimten, het implementeren van modellen en het vernieuwen van semantische modellen met:

  • PowerShell.
  • Azure Automation.
  • Azure Logic Apps.
  • Aangepaste clienttoepassingen.

Alleen nieuwe werkruimten ondersteunen XMLA-eindpuntverbindingen met behulp van service-principals. Klassieke werkruimten worden niet ondersteund. Een service-principal heeft alleen de machtigingen die nodig zijn om taken uit te voeren op werkruimten waaraan deze is toegewezen. Machtigingen worden toegewezen via werkruimtetoegang, net als gewone UPN-accounts (user principal name).

Als u schrijfbewerkingen wilt uitvoeren, moet voor de workload Semantische modellen van de capaciteit het XMLA-eindpunt zijn ingeschakeld voor lees-/schrijfbewerkingen. Voor Semantische modellen die zijn gepubliceerd vanuit Power BI Desktop moet de verbeterde functie voor metagegevensindeling zijn ingeschakeld.

Een service-principal maken

Service-principals worden gemaakt als app-registratie in Azure Portal of met behulp van PowerShell. Wanneer u uw service-principal maakt, moet u de app-naam, toepassings-id (client),map-id (tenant) en clientgeheim afzonderlijk kopiëren en opslaan. Zie de volgende stappen voor het maken van een service-principal:

Een Microsoft Entra-beveiligingsgroep maken

Service-principals hebben standaard toegang tot alle tenantinstellingen waarvoor ze zijn ingeschakeld. Afhankelijk van uw beheerdersinstellingen kan toegang specifieke beveiligingsgroepen of de hele organisatie bevatten.

Als u de toegang van de service-principal tot specifieke tenantinstellingen wilt beperken, kunt u toegang tot specifieke beveiligingsgroepen toestaan. U kunt ook een toegewezen beveiligingsgroep maken voor service-principals en deze uitsluiten van de gewenste tenantinstellingen. Zie Een basisgroep maken en leden toevoegen met behulp van Microsoft Entra-id om een beveiligingsgroep te maken en een service-principal toe te voegen.

Service-principals inschakelen

Voordat u service-principals in Power BI kunt gaan gebruiken, moet een beheerder toegang tot de service-principal inschakelen in de Power BI-Beheer-portal.

  1. Ga naar de Power BI-Beheer-portal en selecteer vervolgens Tenantinstellingen.
  2. Schuif naar instellingen voor ontwikkelaars en vouw vervolgens Service-principals toestaan om API van Power BI s te gebruiken.
  3. Selecteer Ingeschakeld.
  4. Als u machtigingen wilt toepassen op een beveiligingsgroep, selecteert u Specifieke beveiligingsgroepen (aanbevolen).
  5. Voer de groepsnaam in.
  6. Selecteer Toepassen.

Screenshot that shows the Admin portal with tenant settings selected. Allow service principals to use Power BI APIs is expanded with enabled highlighted.

Toegang tot werkruimte

Als u wilt dat uw service-principal over de benodigde machtigingen beschikt om Premium-werkruimte- en semantische modelbewerkingen uit te voeren, moet u de service-principal toevoegen als werkruimtelid of Beheer. Het gebruik van werkruimtetoegang in de Power BI-service wordt hier beschreven, maar u kunt ook de REST API Voor groepgebruikers toevoegen gebruiken.

  1. Selecteer meer>werkruimtetoegang in de Power BI-service voor een werkruimte.

    Screenshot that shows a list of workspaces. The more icon and workspace access are highlighted.

  2. Zoek op toepassingsnaam en voeg vervolgens de service-principal toe als een Beheer of Lid aan de werkruimte.

    Screenshot that shows the access dialog showing a service principal name. Admin is selected.

Verbinding maken iontekenreeksen voor het XMLA-eindpunt

Nadat u een service-principal hebt gemaakt, schakelt u service-principals voor uw tenant in en voegt u de service-principal toe aan toegang tot werkruimten, gebruikt u deze als een gebruikersidentiteit in verbindingsreeks s met het XMLA-eindpunt. Het verschil is dat u in plaats van de user id parameters password de toepassings-id, tenant-id en toepassingsgeheim opgeeft.

Data Source=powerbi://api.powerbi.com/v1.0/myorg/<workspace name>; Initial Catalog=<dataset name>;User ID=app:<appId>@<tenantId>;Password=<app_secret>;

PowerShell

Open een PowerShell-sessie om de volgende voorbeeldcode uit te voeren.

SQLServer-module gebruiken

In het volgende voorbeeld AppIdworden , TenantIden AppSecret gebruikt voor het verifiëren van een semantische modelvernieuwingsbewerking:

Param (
        [Parameter(Mandatory=$true)] [String] $AppId,
        [Parameter(Mandatory=$true)] [String] $TenantId,
        [Parameter(Mandatory=$true)] [String] $AppSecret
       )
$PWord = ConvertTo-SecureString -String $AppSecret -AsPlainText -Force

$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $AppId, $PWord

Invoke-ProcessTable -Server "powerbi://api.powerbi.com/v1.0/myorg/myworkspace" -TableName "mytable" -DatabaseName "mydataset" -RefreshType "Full" -ServicePrincipal -ApplicationId $AppId -TenantId $TenantId -Credential $Credential

Analysebeheerobjecten (AMO) en ADOMD.NET

Wanneer u verbinding maakt met clienttoepassingen en web-apps, kunt u AMO- en ADOMD-clientbibliotheken versie 15.1.42.26 (juni 2020) en latere installeerbare pakketten van NuGet gebruiken om service-principals in verbindingsreeks s te ondersteunen met behulp van de volgende syntaxis: app:AppID en wachtwoord of cert:thumbprint.

In het volgende voorbeeld appID worden waarden password gebruikt om een modeldatabasevernieuwingsbewerking uit te voeren:

string appId = "xxx";
string authKey = "yyy";
string connString = $"Provider=MSOLAP;Data source=powerbi://api.powerbi.com/v1.0/<tenant>/<workspacename>;Initial catalog=<datasetname>;User ID=app:{appId};Password={authKey};";
Server server = new Server();
server.Connect(connString);
Database db = server.Databases.FindByName("adventureworks");
Table tbl = db.Model.Tables.Find("DimDate");
tbl.RequestRefresh(RefreshType.Full);
db.Model.SaveChanges();