コンプライアンス要件を満たすために、多くの場合、組織は Power BI ですべての機密データの分類とラベル付けを行う必要があります。 Power BI に大量のデータが含まれているテナントでは、このタスクが困難になることがあります。 タスクをより簡単かつ効果的にするために、Power BI 管理 REST API を使用して、多数の Power BI アーティファクトに対して setLabels および removeLabels をプログラムで実行できます。
API により、成果物 ID によって成果物のラベルの設定または削除が行われます。
要件と考慮事項
- これらの API を呼び出すには、ユーザーが Fabric 管理者である必要があります。
- 管理者ユーザーは (指定されている場合は委任されたユーザーも)、ラベルを設定または削除するのに十分な使用権限を持っている必要があります。
- setLabels API を使用して秘密度ラベルを設定するには、管理者ユーザー (指定されている場合は委任されたユーザーも) がラベル ポリシーにラベルを含めている必要があります。
- API で許容される 1 時間あたりの最大要求数は 25 です。 各要求により、最大 2,000 個の成果物を更新できます。
- 必須のスコープ: 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}");
}
}
}
}