Поделиться через


Автоматизация рабочих пространств Premium и задач семантической модели с помощью субъектов-служб

Учетные записи службы — это регистрация приложения Microsoft Entra ID, созданная в вашем клиенте для выполнения автоматизированных операций с ресурсами и уровнями обслуживания. Это уникальный тип удостоверения пользователя с именем приложения, идентификатором приложения, идентификатором клиента и секретом клиента или сертификатом для пароля.

Power BI Premium использует те же функции учетной записи службы, что и Power BI Embedded. Дополнительные сведения см. в статье Внедрение содержимого Power BI с помощью субъектов-служб.

В Power BI Premium можно использовать служебные учётные записи с конечной точкой XMLA (XML Analysis) для автоматизации задач управления семантической моделью, таких как создание рабочих областей, развертывание моделей и обновление семантической модели.

  • PowerShell.
  • Служба автоматизации Azure.
  • Azure Logic Apps.
  • Настраиваемые клиентские приложения.

Только новые рабочие области поддерживают подключения конечных точек XMLA с помощью служебных принципалов. Классические рабочие области не поддерживаются. Субъект-служба имеет только те разрешения, необходимые для выполнения задач в рабочих областях, где она назначена. Разрешения назначаются через доступ к рабочей области, как и в случае с обычными учетными записями, использующими УПН (основное имя пользователя).

Для выполнения операций записи рабочая нагрузка семантических моделей емкости должна иметь включённую конечную точку XMLA для операций чтения и записи. Семантические модели, опубликованные из Power BI Desktop, должны быть с включённым расширенным форматом метаданных.

Создайте сервисного принципала

Субъекты-службы создаются в качестве регистрации приложения на портале Azure или с помощью PowerShell. При создании субъекта-службы обязательно скопируйте и сохраните отдельно имя приложения, идентификатор приложения (клиента), идентификатор каталога (клиента) и секрет клиента. Инструкции по созданию субъекта-службы см. в статье:

Создание группы безопасности Microsoft Entra

По умолчанию субъекты-службы имеют доступ к любым параметрам клиента, для которых они включены. В зависимости от параметров администратора доступ может включать определенные группы безопасности или всю организацию.

Чтобы ограничить доступ служебного принципала к определенным настройкам арендатора, можно разрешить доступ к конкретным группам безопасности. Кроме того, можно создать выделенную группу безопасности для субъектов-служб и исключить ее из требуемых параметров клиента. Сведения о создании группы безопасности и добавлении служебного принципала см. в статье «Создание базовой группы» и добавление участников с помощью Microsoft Entra ID.

Включение субъектов-служб

Прежде чем начать использовать субъект-службу в Power BI, администратор должен включить доступ субъекта-службы на портале администрирования Power BI.

  1. Перейдите на портал администрирования Power BI и выберите параметры клиента.
  2. Прокрутите страницу до параметров разработчика, а затем раскройте объекты-службы, которые могут вызывать публичные API Fabric.
  3. Выберите "Включено".
  4. Чтобы применить разрешения к группе безопасности, выберите определенные группы безопасности (рекомендуется).
  5. Введите имя группы.
  6. Нажмите кнопку "Применить".

Доступ к рабочей области

Чтобы учетная запись службы имела необходимые разрешения для выполнения операций с рабочими областями Premium и семантическими моделями, необходимо добавить учетную запись службы в качестве члена рабочей области или администратора. Использование доступа к рабочей области в службе Power BI описано здесь, но вы также можете использовать REST API для добавления пользователя в группу.

  1. В службе Power BI для рабочей области выберите дополнительный>доступ к рабочей области.

    Снимок экрана: список рабочих областей. Выделены дополнительные значки и доступ к рабочей области.

  2. Выполните поиск по имени приложения и добавьте учетную запись службы в роли администратора или участника в рабочую область.

Строки подключения для конечной точки XMLA

После создания служебного принципала включите служебные принципалы для вашего клиента и добавьте служебный принципал для доступа к рабочей области, используйте его в качестве идентификатора пользователя в строках подключения с конечной точкой XMLA. Разница заключается в том, что вместо user idpassword параметров указывается идентификатор приложения, идентификатор клиента и секрет приложения.

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

PowerShell

Откройте сеанс PowerShell, чтобы запустить следующий пример кода.

Использование модуля SQLServer

В следующем примере AppIdи TenantIdAppSecret используется для проверки подлинности операции обновления семантической модели:

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) и ADOMD.NET

При подключении к клиентским приложениям и веб-приложениям можно использовать клиентские библиотеки AMO и ADOMD версии 15.1.42.26 (июнь 2020 г.) и более поздних установленных пакетов из NuGet для поддержки субъектов-служб в строках подключения с помощью следующего синтаксиса: app:AppID и пароля или cert:thumbprint.

В следующем примере значения appID и password используются для выполнения операции обновления модели базы данных.

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();