PowerBI API 使用服务主体更新数据集时出错
PowerBI API error updating Dataset using Service Principal
要求: 通过服务主体使用 Powershell 脚本更新 PowerBI 数据集计划。使用 PowerBI API。参考:MicrosoftDocs
错误消息:“消息”:“应用程序无法访问”API
我做了什么:
在 Azure AD 中提供了 PowerBI 应用程序 API 权限。授予 PowerBI 工作区中服务主体的管理员访问权限。
将SP放入AD组。将此 AD 组设为 Power BI 工作区和数据集的管理员(在 Power BI 管理设置下)
使用了使用服务主体生成的访问令牌。 Invoke-RestMethod 用于 API 请求。
$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 个场景:
- 在授权中使用服务主体访问令牌 header。得到 -
Forbidden 403 Error. "Message":"API is not accessible for application
.
- 在授权 header 中使用通过我的用户凭据生成的访问令牌时,脚本 运行 成功。
- 尝试了其他工作区中的各种数据集
我缺少使用服务主体更新数据集计划的哪些权限?
Service principal is not supported for accessing My Workspace:
Considerations and limitations
- Service principal only works with new workspaces.
- My Workspace isn't supported when using service principal.
- A capacity is required when moving to production.
- You can't sign into the Power BI portal using service principal.
- Power BI admin rights are required to enable service principal in developer settings within the Power BI admin portal.
- Embed for your organization applications can't use service principal.
- Dataflows management is not supported.
- Service principal only supports some read-only admin APIs. To enable service principal support for read-only admin APIs, you have to enable the Power BI service admin settings in your tenant. For more information, see Enable service principal authentication for read-only admin APIs.
- When using service principal with an Azure Analysis Services data source, the service principal itself must have an Azure Analysis Services instance permissions. Using a security group that contains the service principal for this purpose, doesn't work.
您应该将数据集移动到 new workspace,或者更改身份验证方法。
Microsoft API 文档中的 URL 对于服务主体是错误的。
您还需要在 URL 中包含工作区 ID,请参见下文
https://api.powerbi.com/v1.0/myorg/groups/{WorkspaceID}/datasets/{DatasetId}refreshes
要求: 通过服务主体使用 Powershell 脚本更新 PowerBI 数据集计划。使用 PowerBI API。参考:MicrosoftDocs
错误消息:“消息”:“应用程序无法访问”API
我做了什么:
在 Azure AD 中提供了 PowerBI 应用程序 API 权限。授予 PowerBI 工作区中服务主体的管理员访问权限。
将SP放入AD组。将此 AD 组设为 Power BI 工作区和数据集的管理员(在 Power BI 管理设置下)
使用了使用服务主体生成的访问令牌。 Invoke-RestMethod 用于 API 请求。
$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 个场景:
- 在授权中使用服务主体访问令牌 header。得到 -
Forbidden 403 Error. "Message":"API is not accessible for application
. - 在授权 header 中使用通过我的用户凭据生成的访问令牌时,脚本 运行 成功。
- 尝试了其他工作区中的各种数据集
我缺少使用服务主体更新数据集计划的哪些权限?
Service principal is not supported for accessing My Workspace:
Considerations and limitations
- Service principal only works with new workspaces.
- My Workspace isn't supported when using service principal.
- A capacity is required when moving to production.
- You can't sign into the Power BI portal using service principal.
- Power BI admin rights are required to enable service principal in developer settings within the Power BI admin portal.
- Embed for your organization applications can't use service principal.
- Dataflows management is not supported.
- Service principal only supports some read-only admin APIs. To enable service principal support for read-only admin APIs, you have to enable the Power BI service admin settings in your tenant. For more information, see Enable service principal authentication for read-only admin APIs.
- When using service principal with an Azure Analysis Services data source, the service principal itself must have an Azure Analysis Services instance permissions. Using a security group that contains the service principal for this purpose, doesn't work.
您应该将数据集移动到 new workspace,或者更改身份验证方法。
Microsoft API 文档中的 URL 对于服务主体是错误的。
您还需要在 URL 中包含工作区 ID,请参见下文
https://api.powerbi.com/v1.0/myorg/groups/{WorkspaceID}/datasets/{DatasetId}refreshes