Definir ou remover rótulos de sensibilidade usando APIs REST de administrador do Power BI

Para atender aos requisitos de conformidade, muitas vezes as organizações precisam classificar e rotular todos os dados confidenciais no Power BI. Essa tarefa pode ser desafiadora para locatários que têm grandes volumes de dados no Power BI. Para tornar a tarefa mais fácil e mais eficaz, você pode usar as APIs REST de administrador do Power BI para executar programaticamente setLabels e removeLabels em grandes números de artefatos do Power BI.

As APIs definem ou removem rótulos de artefatos por ID de artefato.

Requisitos e considerações

  • Os usuários devem ter direitos de administrador (como administrador global do Microsoft 365 ou administrador do Fabric) para chamar essas APIs.
  • O usuário administrador (e o usuário delegado, se fornecido) deve ter direitos de uso suficientes para definir ou remover rótulos.
  • Para definir um rótulo de sensibilidade usando a API setLabels, o usuário administrador (ou o usuário delegado, se fornecido) deve ter o rótulo incluído em sua política de rótulo.
  • As APIs permitem um máximo de 25 solicitações por hora. Cada solicitação pode atualizar até 2000 artefatos.
  • Escopo necessário: Tenant.ReadWrite.All

Documentação da API

Amostra

O exemplo a seguir demonstra como definir e remover rótulos de sensibilidade em dashboards do Power BI. Código semelhante pode ser usado para definir e remover rótulos nos modelos semânticos, relatórios e fluxos de dados.

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

            }

        }