Установка или удаление меток конфиденциальности с помощью API rest администратора Power BI

Для соответствия требованиям организации часто требуют классификации и маркировки всех конфиденциальных данных в Power BI. Эта задача может быть сложной для клиентов, имеющих большие объемы данных в Power BI. Чтобы упростить и эффективную задачу, можно использовать REST API администратора Power BI для программной настройкиLabels и удаленияLabels на больших количествах артефактов Power BI.

API-интерфейсы задают или удаляют метки из артефактов по идентификатору артефакта.

Требования и рекомендации

  • Пользователи должны быть администраторами Fabric для вызова этих API.
  • Пользователь администратора (и делегированный пользователь, если он указан) должен иметь достаточные права на использование, чтобы задать или удалить метки.
  • Чтобы задать метку конфиденциальности с помощью API setLabels, пользователь администратора (или делегированный пользователь, если он указан) должен иметь метку, включенную в политику меток.
  • 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}");
                    }
                }

            }

        }