Définir ou supprimer des étiquettes de confidentialité à l’aide des API d’administration REST de Power BI

Pour répondre aux exigences de conformité, les organisations sont souvent tenues de classifier et d’étiqueter toutes les données sensibles dans Power BI. Cette tâche peut être difficile pour les locataires qui ont de grands volumes de données dans Power BI. Pour la faciliter la tâche et la rendre plus efficace, vous pouvez utiliser les API REST d’administration Power BI pour définir et supprimer des étiquettes (setLabels et removeLabels) par programmation sur un grand nombre d’artefacts Power BI.

Les API définissent ou suppriment les étiquettes des artefacts par ID d’artefact.

Conditions requises et éléments à prendre en compte

  • Les utilisateurs doivent disposer de droits d’administrateur (par exemple administrateur d’entreprise Microsoft 365 ou administrateur Fabric) pour appeler ces API.
  • L’utilisateur administrateur (ainsi que l’utilisateur délégué le cas échéant) doit disposer des droits d’utilisation suffisants pour définir ou supprimer des étiquettes.
  • Pour définir une étiquette de confidentialité à l’aide de l’API setLabels, l’étiquette doit être incluse dans la stratégie d’étiquette de l’utilisateur administrateur (ou de l’utilisateur délégué le cas échéant).
  • Les API autorisent un maximum de 25 requêtes par heure. Chaque requête peut mettre à jour jusqu’à 2000 artefacts.
  • Étendue requise : Tenant.ReadWrite.All

Documentation de l’API

Exemple

L’exemple suivant montre comment définir et supprimer des étiquettes de confidentialité sur des tableaux de bord Power BI. Un code similaire peut être utilisé pour définir et supprimer des étiquettes sur des modèles sémantiques, des rapports et des flux de données.

            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}");
                    }
                }

            }

        }