Compartilhar via


Tutorial: Criar relatórios personalizados no Azure Data Explorer usando dados de outras fontes

O tutorial Criar relatórios personalizados no Azure Data Explorer usando dados do Microsoft Entra mostra como criar relatórios personalizados no Azure Data Explorer usando dados dos serviços de Governança de ID do Microsoft Entra e ID do Microsoft Entra.

Você também pode trazer dados para o Azure Data Explorer de fontes além do Microsoft Entra. Os cenários para esse recurso incluem:

  • Um administrador deseja exibir eventos no log de auditoria com detalhes adicionais sobre usuários, pacotes de acesso ou outros objetos que não fazem parte do próprio registro de auditoria.
  • Um administrador deseja exibir todos os usuários adicionados a um aplicativo da ID do Microsoft Entra e seus direitos de acesso no repositório do próprio aplicativo, como um banco de dados SQL.

Esses tipos de relatórios não são integrados à ID do Microsoft Entra. No entanto, você pode criar esses relatórios por conta própria extraindo dados da ID do Microsoft Entra e combinando dados usando consultas personalizadas no Azure Data Explorer.

Consultar dados no Azure Monitor

Se você estiver enviando os logs de auditoria, entrada ou outros logs do Microsoft Entra para o Azure Monitor, poderá incorporar esses logs desse workspace do Log Analytics do Azure Monitor em suas consultas, sem precisar copiar os dados para o Azure Data Explorer. Para obter mais informações sobre a relação entre o Azure Monitor e o Azure Data Explorer, consulte Consultar dados no Azure Monitor usando o Azure Data Explorer.

Este exemplo se baseia no tutorial para preencher o Azure Data Explorer da Governança de ID do Microsoft Entra e mostra o ingresso no log de auditoria do Microsoft Entra armazenado no Azure Monitor como AuditLogs com os pacotes de acesso do Microsoft Entra armazenados no Azure Data Explorer como EntraAccessPackages.

  1. Entre no Centro de administração do Microsoft Entra.

  2. Selecione Configurações de diagnóstico.

  3. Selecione o workspace do Log Analytics para o qual você está enviando seus logs.

  4. Na visão geral do workspace do Log Analytics, registre a ID da assinatura, o nome do recurso e o nome do workspace.

  5. Entre no portal do Azure.

  6. Acesse a interface do usuário da Web do Azure Data Explorer.

  7. Verifique se o cluster do Azure Data Explorer está listado.

  8. Selecione + Adicionar>conexão.

  9. Na janela Adicionar Conexão , insira a URL no workspace do Log Analytics. A URL é formada a partir do nome do host específico da nuvem, da ID da assinatura, do nome do grupo de recursos e do nome do workspace do workspace do Log Analytics do Azure Monitor, conforme descrito em Adicionar um workspace do Log Analytics.

  10. Depois que a conexão for estabelecida, o workspace do Log Analytics aparecerá no painel esquerdo com o cluster nativo do Azure Data Explorer.

    Selecione Consulta e, em seguida, selecione o cluster do Azure Data Explorer.

  11. No painel de consulta, consulte as tabelas do Azure Monitor que contêm os logs do Microsoft Entra em suas consultas do Azure Data Explorer. Por exemplo:

    let CL1 = 'https://ade.loganalytics.io/subscriptions/*subscriptionid*/resourcegroups/*resourcegroupname*/providers/microsoft.operationalinsights/workspaces/*workspacename*';
    cluster(CL1).database('*workspacename*').AuditLogs | where Category == "EntitlementManagement"  and OperationName == "Fulfill access package assignment request"
    | mv-expand TargetResources | where TargetResources.type == 'AccessPackage' | project ActivityDateTime,APID = toguid(TargetResources.id)
    | join EntraAccessPackages on $left.APID == $right.Id
    | limit 100
    

Trazer dados de outras fontes

Você pode criar tabelas adicionais no Azure Data Explorer para ingerir dados de outras fontes. Se os dados estiverem em um arquivo JSON (semelhante aos exemplos anteriores) ou em um arquivo CSV, você poderá criar a tabela no momento em que obter os dados do arquivo pela primeira vez. Depois que a tabela for criada, você também poderá usar LightIngest para ingerir dados no Azure Data Explorer de um arquivo JSON ou CSV.

Para obter mais informações sobre a ingestão de dados, consulte visão geral da ingestão de dados do Azure Data Explorer.

Exemplo: combinar atribuições de aplicativo do Microsoft Entra e uma segunda fonte para criar um relatório de todos os usuários que tiveram acesso a um aplicativo entre duas datas

Este relatório ilustra como você pode combinar dados de dois sistemas separados para criar relatórios personalizados no Azure Data Explorer. Ele agrega dados sobre usuários, suas funções e outros atributos de dois sistemas em um formato unificado para análise ou relatório.

O exemplo a seguir pressupõe que uma tabela chamada salesforceAssignments foi preenchida com dados provenientes de outro aplicativo. A tabela tem as colunas UserName, Name, EmployeeId, DepartmentJobTitle, , AppName, , Rolee CreatedDateTime.

// Define the date range and service principal ID for the query 

let startDate = datetime("2023-06-01"); 
let endDate = datetime("2024-03-13"); 
let servicePrincipalId = "<your service principal-id>"; 

// Pre-process AppRoleAssignments with specific filters and projections 
let processedAppRoleAssignments = AppRoleAssignments 
    | where ResourceId == servicePrincipalId and todatetime(CreatedDateTime) between (startDate .. endDate) 
    | extend AppRoleId = tostring(AppRoleId) 
    | project PrincipalId, AppRoleId, CreatedDateTime, ResourceDisplayName; // Exclude DeletedDateTime and keep ResourceDisplayName 

// Pre-process AppRoles to get RoleDisplayName for each role 
let processedAppRoles = AppRoles 
    | mvexpand AppRoles 
    | project AppRoleId = tostring(AppRoles.Id), RoleDisplayName = tostring(AppRoles.DisplayName); 

// Main query: Process EntraUsers by joining with processed role assignments and roles 
EntraUsers 
    | join kind=inner processedAppRoleAssignments on $left.ObjectID == $right.PrincipalId // Join with role assignments 
    | join kind=inner processedAppRoles on $left.AppRoleId == $right.AppRoleId // Join with roles to get display names 

    // Summarize to get the latest record for each unique combination of user and role attributes 
    | summarize arg_max(AccountEnabled, *) by UserPrincipalName, DisplayName, tostring(EmployeeId), Department, JobTitle, ResourceDisplayName, RoleDisplayName, CreatedDateTime 

    // Final projection of relevant fields, including source indicator and report date 
    | project UserPrincipalName, DisplayName, EmployeeId=tostring(EmployeeId), Department, JobTitle, AccountEnabled=tostring(AccountEnabled), ResourceDisplayName, RoleDisplayName, CreatedDateTime, Source="EntraUsers", ReportDate = now() 

// Union with processed salesforceAssignments to create a combined report 
| union ( 
    salesforceAssignments 

    // Project fields from salesforceAssignments to align with the EntraUsers data structure 
    | project UserPrincipalName = UserName, DisplayName = Name, EmployeeId = tostring(EmployeeId), Department, JobTitle, AccountEnabled = "N/A", ResourceDisplayName = AppName, RoleDisplayName = Role, CreatedDateTime, Source = "salesforceAssignments", ReportDate = now() 
)