使用 Power BI REST 管理员 API 设置或删除敏感度标签

为了满足合规性要求,组织通常需要在 Power BI 中对所有敏感数据进行分类和标记。 对于在 Power BI 中具有大量数据的租户,此任务可能会很困难。 为了使任务更简单也更有效,你可以使用 Power BI 管理员 REST API 以编程方式在大量 Power BI 项目上 setLabelsremoveLabels

API 按项目 ID 在项目中设置或删除标签。

要求和注意事项

  • 用户必须具有管理员权限(如 Microsoft 365 全局管理员或 Fabric 管理员)才能调用这些 API。
  • 管理员用户(以及可能存在的委派用户)必须具有足够的使用权限才能设置或删除标签。
  • 若要使用 setLabels API 设置敏感度标签,管理员用户(或可能存在的委派用户)的标签策略中必须包含标签。
  • API 允许每小时最多有 25 个请求。 每个请求可以更新最多 2000 个项目。
  • 所需范围:Tenant.ReadWrite.All

API 文档

示例

下面的示例演示如何在 Power BI 仪表板上设置和删除敏感度标签。 类似的代码可用于设置和删除语义模型、报表和数据流上的标签。

            const string adminBearerToken = "<adminBearerToken>";
            const string ApiUrl = "<api url>";
            var persistedDashboardId = Guid.Parse("<dashboard object Id>");
            var credentials = new TokenCredentials(adminBearerToken, "Bearer");

            var artifacts = new InformationProtectionArtifactsChangeLabel();
            artifacts.Dashboards = new List<ArtifactId> { new ArtifactId(id: persistedDashboardId) };

            using (PowerBIClient client = new PowerBIClient(credentials))
            {
                client.BaseUri = new Uri(ApiUrl);

                // Delete labels

               var removeResponse = client.InformationProtection.RemoveLabelsAsAdmin(artifacts);

                foreach (var updateLabelResult in removeResponse.Dashboards)
                {
                    if (updateLabelResult.Status == Status.Succeeded)
                    {
                        Console.WriteLine($"label has been deleted from artifact {updateLabelResult.Id}");
                    }
                    else
                    {
                        Console.WriteLine($"label has not been deleted from artifact {updateLabelResult.Id}");
                    }
                }

                // Set labels

                var setLabelRequest = new InformationProtectionChangeLabelDetails();
                setLabelRequest.Artifacts = artifacts;
                setLabelRequest.LabelId = Guid.Parse("<label Id>");

                // assignmentMethod (optional)
                setLabelRequest.AssignmentMethod = AssignmentMethod.Priviledged;

                // delegetedUser (optional)
                var delegatedUser = new DelegatedUser();
                delegatedUser.EmailAddress = "<delegated user email address>";

                setLabelRequest.DelegatedUser = delegatedUser;

                var setResponse = client.InformationProtection.SetLabelsAsAdmin(setLabelRequest);
                foreach (var updateLabelResult in setResponse.Dashboards)
                {
                    if (updateLabelResult.Status == Status.Succeeded)
                    {
                        Console.WriteLine($"label has been upsert on artifact {updateLabelResult.Id}");
                    }
                    else
                    {
                        Console.WriteLine($"label has not been upsert on artifact {updateLabelResult.Id}");
                    }
                }

            }

        }