Automatizzare le attività dell'area di lavoro Premium e del modello semantico con entità servizio
Le entità servizio sono una registrazioni dell'app Microsoft Entra ID create all'interno del tenant per eseguire operazioni a livello di servizio e di risorsa senza intervento dell'utente. Si tratta di un tipo univoco di identità utente con nome app, ID applicazione, ID tenant e segreto client o certificato per una password.
Power BI Premium usa la stessa funzionalità per le entità servizio di Power BI Embedded. Per altre informazioni, vedere Incorporamento di contenuto di Power BI con entità servizio.
In Power BI Premium è possibile usare entità servizio con l'endpoint XMLA (XML for Analysis) per automatizzare le attività di gestione del modello semantico, ad esempio il provisioning delle aree di lavoro, la distribuzione di modelli e l'aggiornamento del modello semantico con:
- PowerShell.
- Automazione di Azure.
- App per la logica di Azure.
- Applicazioni client personalizzate.
Solo le nuove aree di lavoro supportano le connessioni agli endpoint XMLA tramite entità servizio. Le aree di lavoro classiche non sono supportate. Un'entità servizio ha solo le autorizzazioni necessarie per eseguire attività nelle aree di lavoro a cui viene assegnata. Le autorizzazioni vengono assegnate tramite l'accesso all'area di lavoro, in modo analogo a quanto avviene con i normali account UPN (nome dell'entità utente).
Per eseguire operazioni di scrittura, il carico di lavoro Modelli semantici della capacità deve avere l'endpoint XMLA abilitato per le operazioni di lettura/scrittura. Per i modelli semantici pubblicati da Power BI Desktop è necessario che sia abilitata la funzionalità per il formato ottimizzato dei metadati.
Creare un'entità servizio
Le entità servizio vengono create come registrazione di app nel portale di Azure o tramite PowerShell. Quando si crea l'entità servizio, assicurarsi di copiare e salvare separatamente il nome dell'app, l'ID applicazione (client), l'ID directory (tenant) e il segreto client. Per informazioni sulla procedura per creare un'entità servizio, vedere:
Creare un gruppo di sicurezza Microsoft Entra
Per impostazione predefinita, le entità servizio possono accedere a tutte le impostazioni del tenant per cui sono abilitate. In base alle impostazioni di amministrazione, l'accesso può includere gruppi di sicurezza specifici o l'intera organizzazione.
Per limitare l'accesso dell'entità servizio a impostazioni specifiche del tenant, è possibile consentire l'accesso solo a gruppi di sicurezza specifici. In alternativa, è possibile creare un gruppo di sicurezza dedicato per le entità servizio ed escluderlo dalle impostazioni specifiche del tenant. Per creare un gruppo di sicurezza e aggiungere un'entità servizio, vedere Creare un gruppo di base e aggiungere membri con Microsoft Entra ID.
Abilitazione delle entità servizio
Prima di poter iniziare a usare le entità servizio in Power BI, un amministratore deve abilitare l'accesso all'entità servizio nel portale di amministrazione di Power BI.
- Passare al portale di amministrazione di Power BI, quindi selezionare Impostazioni del tenant.
- Scorrere fino a Impostazioni sviluppatore e quindi espandere Consenti alle entità servizio di usare le API di Power BI.
- Selezionare Enabled.
- Per applicare le autorizzazioni a un gruppo di sicurezza, selezionare Gruppi di sicurezza specifici (scelta consigliata).
- Immettere il nome del gruppo.
- Selezionare Applica.
Accesso all'area di lavoro
Affinché l'entità servizio disponga delle autorizzazioni necessarie per eseguire le operazioni Premium su aree di lavoro e modello semantico, è necessario aggiungere l'entità servizio come membro o amministratore dell'area di lavoro. L'uso dell'accesso all'area di lavoro nel servizio Power BI è descritto qui, ma è anche possibile usare l'API REST Add Group User (Aggiungi utente gruppo).
Nel servizio Power BI, per un'area di lavoro selezionare Altro>Accesso all'area di lavoro.
Eseguire una ricerca in base al nome dell'applicazione, quindi aggiungere l'entità servizio come amministratore o membro all'area di lavoro.
Stringhe di connessione per l'endpoint XMLA
Dopo aver creato un'entità servizio, abilitato le entità servizio per il tenant e aggiunto l'entità servizio all'accesso all'area di lavoro, usarla come identità utente nelle stringhe di connessione con l'endpoint XMLA. La differenza è, anziché i parametri user id
e password
, si specificano l'ID applicazione, l'ID tenant e il segreto dell'applicazione.
Data Source=powerbi://api.powerbi.com/v1.0/myorg/<workspace name>; Initial Catalog=<dataset name>;User ID=app:<appId>@<tenantId>;Password=<app_secret>;
PowerShell
Aprire una sessione di PowerShell per eseguire il codice di esempio seguente.
Uso del modulo SQLServer
Nell'esempio seguente, AppId
, TenantId
e AppSecret
vengono usati per autenticare un'operazione di aggiornamento del modello semantico:
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
AMO (Analysis Management Objects) e ADOMD.NET
Quando ci si connette ad applicazioni client e app Web, è possibile usare i pacchetti installabili delle librerie client AMO e ADOMD versione 15.1.42.26 (giugno 2020) e successive di NuGet per supportare le entità servizio nelle stringhe di connessione con la sintassi seguente: app:AppID
e password o cert:thumbprint
.
Nell'esempio seguente vengono usati i valori appID
e password
per eseguire un'operazione di aggiornamento del database modello:
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();