问题描述
要求:通过服务主体使用 Powershell 脚本更新 PowerBI 数据集计划。使用 PowerBI API。参考:MicrosoftDocs
错误消息:“消息”:“应用程序无法访问 API”
我做了什么:
-
在 Azure AD 中提供 PowerBI 应用程序 API 权限。在 PowerBI 工作区中授予服务主体管理员访问权限。
-
将 SP 放入 AD 组。将此 AD 组设为 Power BI 工作区和数据集的管理员(在 Power BI 管理设置下)
-
使用了使用服务主体生成的访问令牌。 API 请求的 Invoke-RestMethod。
$SecPasswd = ConvertTo-securestring $ClientSecret -AsPlainText -Force $ClientCred = New-Object System.Management.Automation.PSCredential($ClientId,$SecPasswd) Connect-PowerBIServiceAccount -Tenant $tenantId -ServicePrincipal -Credential $ClientCred $accesstoken = Get-PowerBIAccesstoken $authHeader = @{'Content-Type'='application/json','Authorization'= $accesstoken.Authorization} $uri="https://api.powerbi.com/v1.0/myorg/datasets/$datasetId/refreshSchedule" Invoke-RestMethod -Uri $uri –Headers $authHeader –Method Patch -Body ($jsonBase | ConvertTo-Json) -ContentType "application/json"
观察:
使用我工作区的 datasetId 并运行脚本。 2 场景:
- 在授权标头中使用服务主体访问令牌。得到 -
Forbidden 403 Error. "Message":"API is not accessible for application
。 - 在授权标头中使用使用我的用户凭据生成的访问令牌时,脚本成功运行。
- 在其他工作区尝试了各种数据集
我缺少使用服务主体更新数据集计划的哪些权限?
解决方法
Service principal is not supported for accessing My Workspace:
注意事项和限制
- 服务主体仅适用于新工作区。
- 使用服务主体时不支持我的工作区。
- 转为生产时需要一定的产能。
- 您无法使用服务主体登录 Power BI 门户。
- 需要 Power BI 管理员权限才能在 Power BI 管理门户的开发人员设置中启用服务主体。
- 为您的组织嵌入的应用程序不能使用服务主体。
- 不支持数据流管理。
- 服务主体仅支持部分只读管理 API。若要为只读管理 API 启用服务主体支持,必须在租户中启用 Power BI 服务管理设置。如需了解详情,请参阅为只读管理 API 启用服务主体身份验证。
- 将服务主体与 Azure Analysis Services 数据源一起使用时,服务主体本身必须具有 Azure Analysis Services 实例权限。为此目的使用包含服务主体的安全组是行不通的。
您应该将数据集移动到 new workspace,或者更改身份验证方法。
,Microsoft API 文档中的 URL 对于服务主体是错误的。
您还需要在 URL 中包含工作区 ID,请参见下文
https://api.powerbi.com/v1.0/myorg/groups/{WorkspaceID}/datasets/{DatasetId}refreshes