Compartir a través de


Tutorial: Creación de informes personalizados en Azure Data Explorer mediante datos de Microsoft Entra

En este tutorial, aprenderá a crear informes personalizados en Azure Data Explorer mediante el uso de datos de Microsoft Entra ID y los servicios de gobernanza de identificadores de Microsoft Entra.

En este tutorial se complementan las opciones de informes, como el archivado y los informes con Azure Monitor y la administración de derechos, que se centra en exportar el registro de auditoría a Azure Monitor para la retención y el análisis. En comparación, exportar los datos de Microsoft Entra ID y los de Gobernanza de Microsoft Entra ID a Azure Data Explorer proporciona flexibilidad para crear informes personalizados sobre objetos de Microsoft Entra, incluidos los objetos históricos y eliminados.

Aquí tienes un vídeo que ofrece una breve visión general sobre la elaboración de informes de datos de Governance de Microsoft Entra ID utilizando Azure Data Explorer.

El uso de Azure Data Explorer también permite la agregación de datos de orígenes adicionales, con escalabilidad masiva, esquemas flexibles y directivas de retención. Azure Data Explorer es especialmente útil cuando necesita conservar los datos de acceso de los usuarios durante años, realizar investigaciones ad hoc o ejecutar consultas personalizadas en los datos de acceso.

Dibujo conceptual que muestra la extracción y las consultas de datos.

En este tutorial se muestra cómo mostrar la configuración, los usuarios y los derechos de acceso exportados desde Microsoft Entra junto con los datos exportados desde otros orígenes, como las aplicaciones con derechos de acceso en sus propias bases de datos SQL. A continuación, puede usar el lenguaje de consulta kusto (KQL) en Azure Data Explorer para crear informes personalizados en función de los requisitos de su organización.

En este tutorial, harás lo siguiente:

  • Configure Azure Data Explorer en una suscripción de Azure o cree un clúster gratuito.
  • Extraiga datos de Microsoft Entra ID mediante scripts de PowerShell y Microsoft Graph.
  • Cree tablas e importe datos de Microsoft Entra ID en Azure Data Explorer.
  • Extraiga datos de la gobernanza de identidad de Microsoft Entra.
  • Cree tablas e importe datos de la Gobernanza de Identidad de Microsoft Entra en Azure Data Explorer.
  • Cree una consulta personalizada mediante KQL.
  • Consulta de datos en Azure Monitor.

Al final de este tutorial, podrá desarrollar vistas personalizadas de los derechos de acceso y los permisos de los usuarios. Estas vistas abarcan varias aplicaciones a través de herramientas compatibles con Microsoft. También puede incorporar datos de aplicaciones o bases de datos que no son de Microsoft para informar sobre esos derechos de acceso y permisos.

Requisitos previos

Si no está familiarizado con Azure Data Explorer y quiere aprender los escenarios que se muestran en este tutorial, puede obtener un clúster gratuito de Azure Data Explorer. Para un uso compatible con producción con un contrato de nivel de servicio para Azure Data Explorer, necesita una suscripción de Azure para hospedar un clúster completo de Azure Data Explorer.

Determine qué datos desea incluir en los informes. Los scripts de este tutorial proporcionan ejemplos con datos específicos de usuarios, grupos y aplicaciones de Microsoft Entra. Estos ejemplos muestran los tipos de informes que puede generar con este enfoque, pero sus necesidades de informes específicas pueden variar y requerir datos diferentes o adicionales. Puede empezar con estos objetos y traer más tipos de objetos de Microsoft Entra con el tiempo.

  • En este tutorial se muestra cómo recuperar datos de Microsoft Entra como un usuario que ha iniciado sesión. Para ello, asegúrese de que tiene las asignaciones de roles necesarias. Necesita los roles con los permisos adecuados para exportar el tipo de datos de Microsoft Entra con los que desea trabajar:

    • Datos de usuario: Administrador global, Administrador de funciones privilegiadas, Administrador de usuarios
    • Datos de grupo: Administrador global, Administrador de roles con privilegios, Administrador de grupos
    • Asignaciones de roles de aplicaciones y aplicaciones: Administrador global, Administrador de roles con privilegios, Administrador de aplicaciones, Administrador de aplicaciones en la nube
  • Microsoft Graph PowerShell necesita consentimiento para recuperar objetos de Microsoft Entra a través de Microsoft Graph. Los ejemplos de este tutorial requieren los permisos delegados User.Read.All, Group.Read.All, Application.Read.All, y Directory.Read.All . Si planea recuperar datos mediante la automatización sin un usuario que haya iniciado sesión, consiente en su lugar los permisos de aplicación correspondientes. Para más información, consulte Referencia de permisos de Microsoft Graph.

    Si aún no ha dado el consentimiento de PowerShell de Microsoft Graph a esos permisos, debe ser administrador global para realizar esta operación de consentimiento.

  • En este tutorial no se muestran los atributos de seguridad personalizados. De forma predeterminada, el administrador global y otros roles de administrador no incluyen permisos para leer atributos de seguridad personalizados de los usuarios de Microsoft Entra. Si planea recuperar atributos de seguridad personalizados, es posible que necesite más roles y permisos.

  • En el equipo donde está instalado Microsoft Graph PowerShell, asegúrese de que tiene acceso de escritura al directorio del sistema de archivos. Este directorio es donde se instalan los módulos de PowerShell de Microsoft Graph necesarios y donde se guardan los datos exportados de Microsoft Entra.

  • Asegúrese de que tiene permisos para recuperar datos de otros orígenes de datos más allá de Microsoft Entra, si también quiere incorporar esos datos en Azure Data Explorer.

Configuración de Azure Data Explorer

Si no ha usado anteriormente Azure Data Explorer, primero debe configurarlo. Puede crear un clúster gratuito sin una suscripción de Azure ni una tarjeta de crédito. O bien, puede crear un clúster completo, que requiere una suscripción de Azure. Para empezar, consulte Inicio rápido: Creación de un clúster y una base de datos de Azure Data Explorer.

Extracción de datos de Microsoft Entra ID mediante PowerShell

En esta sección, instalará módulos de PowerShell de Microsoft Graph. En PowerShell, usted conecta a Microsoft Graph para extraer datos de Microsoft Entra ID.

La primera vez que su organización use estos módulos para este escenario, debe tener un rol de administrador global para permitir que Microsoft Graph PowerShell conceda consentimiento para su uso en el inquilino. Las interacciones posteriores pueden usar un rol con privilegios inferiores.

  1. Abra PowerShell.

  2. Si no tiene todos los módulos de PowerShell de Microsoft Graph ya instalados, instale los módulos de Microsoft Graph necesarios. Los siguientes módulos son necesarios para esta sección del tutorial: Microsoft.Graph.Authentication, Microsoft.Graph.Users, Microsoft.Graph.Groups, Microsoft.Graph.Applicationsy Microsoft.Graph.DirectoryObjects. Si ya tiene instalados estos módulos, omita este paso.

       $modules = @('Microsoft.Graph.Users', 'Microsoft.Graph.Groups', 'Microsoft.Graph.Applications', 'Microsoft.Graph.DirectoryObjects') 
       foreach ($module in $modules) { 
       Install-Module -Name $module -Scope CurrentUser -AllowClobber -Force
       } 
    
  3. Importe los módulos en la sesión actual de PowerShell:

      $modules = @('Microsoft.Graph.Users', 'Microsoft.Graph.Groups', 'Microsoft.Graph.Applications', 'Microsoft.Graph.DirectoryObjects') 
      foreach ($module in $modules) { 
      Import-Module -Name $module 
      } 
    
  4. Conéctese a Microsoft Graph. En esta sección del tutorial se muestra la lectura de usuarios, grupos y aplicaciones, por lo que requiere los ámbitos de permisos User.Read.All, Group.Read.All, Application.Read.All y Directory.Read.All. Para obtener más información sobre los permisos, consulte Referencia de permisos de Microsoft Graph.

      Connect-MgGraph -Scopes "User.Read.All", "Group.Read.All", "Application.Read.All", "Directory.Read.All" -ContextScope Process -NoWelcome
    

    Este comando le pide que inicie sesión con sus credenciales de Microsoft Entra. Después de iniciar sesión, es posible que tenga que dar su consentimiento a los permisos necesarios si es la primera vez que se conecta o si se requieren nuevos permisos.

Consultas de PowerShell para extraer datos de Microsoft Entra ID para informes personalizados

Las consultas siguientes extraen los datos de Id. de Entra de Microsoft de Microsoft Graph mediante PowerShell y exportan los datos a archivos JSON. Los archivos se importan en Azure Data Explorer en una sección posterior de este tutorial.

Entre los escenarios para generar informes con este tipo de datos se incluyen:

  • Un auditor quiere ver un informe que enumere los miembros de los 10 grupos, organizados por el departamento de cada miembro.
  • Un auditor quiere ver un informe de todos los usuarios que tenían acceso a una aplicación entre dos fechas.

También puede incorporar datos a Azure Data Explorer desde orígenes más allá de Microsoft Entra. Un escenario para esta funcionalidad podría ser:

  • Un administrador quiere ver todos los usuarios agregados a una aplicación de Microsoft Entra ID y sus derechos de acceso en el propio repositorio de la aplicación, como una base de datos SQL.

Estos tipos de informes no están integrados en el identificador de Entra de Microsoft. Sin embargo, puede crear estos informes usted mismo extrayendo datos del identificador de Microsoft Entra y combinando datos mediante consultas personalizadas en Azure Data Explorer. En este tutorial se aborda este proceso más adelante, en el artículo Incorporación de datos de otros orígenes .

Para este tutorial, extraerá los datos de Microsoft Entra ID de estas áreas:

  • Información del usuario, como el nombre para mostrar, el UPN y los detalles del trabajo
  • Información de grupo, incluidas sus pertenencias
  • Aplicaciones y tareas a roles de aplicación

Este conjunto de datos le permite realizar un amplio conjunto de consultas en torno a quién recibió acceso a una aplicación, con su información de rol de aplicación y el período de tiempo asociado. Recuerde que se trata de consultas de ejemplo y los datos y requisitos específicos pueden variar de lo que se muestra aquí.

Nota:

Los inquilinos más grandes pueden experimentar limitación de solicitudes o 429 errores que controla el módulo de Microsoft Graph. Azure Data Explorer también puede limitar los tamaños de carga de archivos.

En estos scripts de PowerShell, exportará las propiedades seleccionadas de los objetos De Microsoft Entra a archivos JSON. Los datos de estas propiedades exportadas se usan para generar informes personalizados en Azure Data Explorer.

Las propiedades específicas siguientes se incluyen en estos ejemplos porque estamos usando estos datos para ilustrar los tipos de informes que puede crear en Azure Data Explorer. Dado que es probable que sus necesidades de informes específicas varían de lo que muestra este tutorial, debe incluir las propiedades específicas en estos scripts que le interesan ver en los informes. Sin embargo, puede seguir el mismo patrón que se muestra para ayudar a crear los scripts.

Seleccione una fecha de instantánea

Una fecha de instantánea codificada de forma rígida identifica los datos del archivo JSON con una fecha específica. Puede usarlo para realizar un seguimiento de conjuntos de datos similares a lo largo del tiempo en Azure Data Explorer. La fecha de instantánea también es útil para comparar los cambios en los datos entre dos fechas de instantáneas.

$SnapshotDate = Get-Date -AsUTC -Format "yyyy-MM-dd"

Obtención de datos de usuario de Microsoft Entra

Este script exporta las propiedades seleccionadas del objeto de usuario de Microsoft Entra a un archivo JSON. Importará este archivo y datos adicionales de otros archivos JSON en Azure Data Explorer en una sección posterior de este tutorial.

  function Export-EntraUsersToJson { 

  # Define a hash table for property mappings 
   $propertyMappings = @{ 
    "Id" = "ObjectID" 
    "DisplayName" = "DisplayName" 
    "UserPrincipalName" = "UserPrincipalName" 
    "EmployeeId" = "EmployeeId" 
    "UserType" = "UserType" 
    "CreatedDateTime" = "CreatedDateTime" 
    "JobTitle" = "JobTitle" 
    "Department" = "Department" 
    "AccountEnabled" = "AccountEnabled" 

   # Add custom properties as needed 
    "custom_extension" = "CustomExtension" 
   } 
  # Retrieve users with specified properties and create custom objects directly 
   $users = Get-MgUser -Select ($propertyMappings.Keys) -All | ForEach-Object { 
      $userObject = @{} 
      foreach ($key in $propertyMappings.Keys) { 
        if ($key -eq "CreatedDateTime") { 
          # Convert date string directly to DateTime and format it 
          $date = [datetime]::Parse($_.$key) 
          $userObject[$propertyMappings[$key]] = $date.ToString("yyyy-MM-dd") 
        } else { 
          $userObject[$propertyMappings[$key]] = $_.$key 
        } 
      } 
      # Additional properties or transformations 
      $userObject["SnapshotDate"] = $SnapshotDate
      [pscustomobject]$userObject 
    } 
    # Convert the user data to JSON and save it to a file 
    $users | ConvertTo-Json -Depth 2 | Set-Content ".\EntraUsers.json" 
  } 
  # Execute the function 
  Export-EntraUsersToJson 

Obtención de datos de grupo

Genere un archivo JSON con nombres de grupo e identificadores que se usan para crear vistas personalizadas en Azure Data Explorer. El ejemplo incluye todos los grupos, pero puede incluir filtrado adicional si es necesario. Si va a filtrar para incluir solo determinados grupos, es posible que quiera incluir lógica en el script para comprobar si hay grupos anidados.

    # Get all groups and select Id and DisplayName 
    $groups = Get-MgGroup -All | Foreach-Object {
       $groupObject = @{} 
       $groupObject["Id"] = $_.Id
       $groupObject["DisplayName"] = $_.DisplayName
       $groupObject["SecurityEnabled"] = $_.SecurityEnabled
       $groupObject["MailEnabled"] = $_.MailEnabled
       $groupObject["MailNickname"] = $_.MailNickname
       $groupObject["SecurityIdentifier"] = $_.SecurityIdentifier
       $date = [datetime]::Parse($_.CreatedDateTime) 
       $groupObject["CreatedDateTime"] = $date.ToString("yyyy-MM-dd") 
       $groupObject["SnapshotDate"] = $SnapshotDate
      [pscustomobject]$groupObject 
    }
    # Export the groups to a JSON file 
    $groups | ConvertTo-Json | Set-Content ".\EntraGroups.json" 

Obtención de datos de pertenencia a grupos

Genere un archivo JSON con pertenencia a grupos, que se usa para crear vistas personalizadas en Azure Data Explorer. El ejemplo incluye todos los grupos, pero puede incluir filtrado adicional si es necesario.

    # Retrieve all groups from Microsoft Entra ID 
    $groups = Get-MgGroup -All 
    # Initialize an array to store results 
    $results = @() 
    # Iterate over each group 
    foreach ($group in $groups) { 
      # Extract the group ID 
      $groupId = $group.Id 
      # Get members of the current group and select their IDs 
      $members = Get-MgGroupMember -GroupId $groupId | Select-Object -ExpandProperty Id 
      # Add a custom object with group ID and member IDs to the results array 
      $results += [PSCustomObject]@{ 
        GroupId = $groupId 
        Members = $members 
        SnapshotDate = $SnapshotDate
      } 
      # Pause for a short time to avoid rate limits 
      Start-Sleep -Milliseconds 200 
    } 
    # Convert the results array to JSON format and save it to a file 
    $results | ConvertTo-Json | Set-Content "EntraGroupMemberships.json" 

Obtener datos de aplicación y entidad de servicio principal

Genera un archivo JSON con todas las aplicaciones y las entidades de servicio correspondientes en el inquilino. Importará estos datos en Azure Data Explorer en una sección posterior de este tutorial para que pueda generar informes personalizados relacionados con las aplicaciones basadas en estos datos.

    # Fetch applications and their corresponding service principals, and then export to JSON 
    Get-MgApplication -All | ForEach-Object { 
      $app = $_ 
      $sp = Get-MgServicePrincipal -Filter "appId eq '$($app.AppId)'" 
      $date = [datetime]::Parse($app.CreatedDateTime)
      [pscustomobject]@{ 
        DisplayName     = $app.DisplayName
        ApplicationId   = $app.AppId 
        ServicePrincipalId = $sp.Id 
        SnapshotDate = $SnapshotDate
        CreatedDateTime = $date.ToString("yyyy-MM-dd")
      } 
    } | ConvertTo-Json -Depth 10 | Set-Content "Applications.json" 

Obtener datos del rol de la aplicación

Genere un archivo JSON de todos los roles de aplicación para aplicaciones empresariales en Microsoft Entra. Después de importar estos datos en Azure Data Explorer, lo usará para generar informes que impliquen asignaciones de roles de aplicación para los usuarios.

    # Get a list of all applications, and handle pagination manually if necessary 
    $apps = Get-MgApplication -All 
    # Loop through each application to gather the desired information 
    $results = foreach ($app in $apps) { 
      # Get the service principal for the application by using its app ID 
      $spFilter = "appId eq '$($app.AppId)'" 
      $sp = Get-MgServicePrincipal -Filter $spFilter | Select-Object -First 1 
      # Process app roles, if any, for the application 
      $appRoles = if ($app.AppRoles) { 
        $app.AppRoles | Where-Object { $_.AllowedMemberTypes -contains "User" } | 
        Select-Object Id, Value, DisplayName 
      } 
      # Construct a custom object with application and service principal details 
      [PSCustomObject]@{ 
        ApplicationId    = $app.AppId 
        DisplayName     = $app.DisplayName 
        ServicePrincipalId = $sp.Id 
        AppRoles      = $appRoles 
        SnapshotDate = $SnapshotDate
      } 
    } 
    # Export the results to a JSON file 
    $results | ConvertTo-Json -Depth 4 | Out-File 'AppRoles.json' 

Obtención de datos de asignación de roles de la aplicación

Genera un archivo JSON de todas las asignaciones de roles de aplicación de los usuarios en el entorno:

    $users = Get-MgUser -All 
    $result = @() 
    foreach ($user in $users) { 
      Get-MgUserAppRoleAssignment -UserId $user.Id | ForEach-Object { 
        # Use the same date formatting approach 
        $createdDateTime = $_.CreatedDateTime -replace "\\/Date\((\d+)\)\\/", '$1' 
        # Convert the milliseconds timestamp to a readable date format if necessary 
        $result += [PSCustomObject]@{ 
          Id = $_.Id
          AppRoleId      = $_.AppRoleId
          CreatedDateTime   = $createdDateTime
          PrincipalDisplayName = $user.DisplayName
          PrincipalId     = $user.Id
          AssignmentPrincipalType = $_.PrincipalType
          AssignmentPrincipalDisplayName = $_.PrincipalDisplayName
          AssignmentPrincipalId     = $_.PrincipalId
          ResourceDisplayName = $_.ResourceDisplayName
          ResourceId      = $_.ResourceId
          SnapshotDate     = $SnapshotDate
        } 
      } 
    } 
    $result | ConvertTo-Json -Depth 10 | Out-File "AppRoleAssignments.json" 

Creación de tablas e importación de archivos JSON con datos de Microsoft Entra ID en Azure Data Explorer

En esta sección, importará los archivos JSON recién creados para los servicios de Identificador de Entra de Microsoft como tablas en Azure Data Explorer para su posterior análisis. En la primera importación a través de la interfaz de usuario web de Azure Data Explorer, se crean las tablas basadas en esquemas que sugiere la interfaz de usuario web de cada archivo JSON.

  1. Inicie sesión en la interfaz de usuario web de Azure Data Explorer.

  2. Vaya a la base de datos que configuró en el clúster de Azure Data Explorer o en un clúster gratuito anteriormente en este tutorial.

  3. En el menú de la izquierda, seleccione Consulta.

  4. Siga estos pasos para cada archivo JSON exportado para obtener los datos exportados en esa base de datos de Azure Data Explorer como una nueva tabla:

    1. Haga clic con el botón derecho en el nombre de la base de datos donde desea ingerir los datos. A continuación, seleccione Obtener datos.

      Captura de pantalla de una pestaña de consulta, con un menú contextual para una base de datos y el comando para obtener datos resaltados.

    2. Seleccione el origen de datos de la lista disponible. En este tutorial, va a ingerir datos de un archivo local, así que seleccione Archivo local.

    3. Seleccione + Nueva tabla y escriba un nombre de tabla, en función del nombre del archivo JSON que va a importar. Por ejemplo, si va a importar EntraUsers.json, asigne a la tabla el nombre EntraUsers. Después de la primera importación, la tabla ya existe y puede seleccionarla como tabla de destino para una importación posterior.

    4. Seleccione Examinar archivos, seleccione el archivo JSON y, a continuación, seleccione Siguiente.

    5. Azure Data Explorer detecta automáticamente el esquema y proporciona una vista previa en la pestaña Inspeccionar . Seleccione Finalizar para crear la tabla e importar los datos de ese archivo. Una vez ingeridos los datos, seleccione Cerrar.

    6. Repita los pasos anteriores para cada uno de los archivos JSON que generó en la sección anterior.

Al final de esos pasos, tiene las tablas EntraUsers, , EntraGroupsEntraGroupMemberships, Applications, AppRoles, y AppRoleAssignments en la base de datos.

Extraer datos de gobernanza de ID de Microsoft Entra mediante PowerShell

En esta sección, usará PowerShell para extraer datos de los servicios de gobernanza de ID de Microsoft Entra. Si no tiene Gobierno de Microsoft Entra ID, Microsoft Entra ID P2, o Microsoft Entra Suite, continúe en la sección Uso de Azure Data Explorer para crear informes personalizados.

Para los pasos siguientes, es posible que tenga que instalar los módulos de PowerShell de Microsoft Graph para extraer datos de gobernanza del ID de Microsoft Entra. La primera vez que su organización use estos módulos para este escenario, debe tener un rol de administrador global para permitir que Microsoft Graph PowerShell conceda consentimiento para su uso en el inquilino. Las interacciones posteriores pueden usar un rol con privilegios inferiores.

  1. Abra PowerShell.

  2. Si no tiene todos los módulos de PowerShell de Microsoft Graph ya instalados, instale los módulos de Microsoft Graph necesarios. Se requiere el siguiente módulo para esta sección del tutorial: Microsoft.Graph.Identity.Governance. Si ya tiene instalados los módulos, vaya al paso siguiente.

       $modules = @('Microsoft.Graph.Identity.Governance')
       foreach ($module in $modules) {
       Install-Module -Name $module -Scope CurrentUser -AllowClobber -Force
       }
    
  3. Importe los módulos en la sesión actual de PowerShell:

      $modules = @('Microsoft.Graph.Identity.Governance')
      foreach ($module in $modules) {
      Import-Module -Name $module
      } 
    
  4. Conéctese a Microsoft Graph. En esta sección del tutorial se muestra cómo recuperar datos de administración de derechos de acceso y revisiones de acceso, por lo que requiere los ámbitos de permisos AccessReview.Read.All y EntitlementManagement.Read.All. Para otros casos de uso de informes, como la Administración de Identidades con Privilegios (PIM) o los flujos de trabajo de ciclo vital, actualice el parámetro Scopes con los permisos necesarios. Para obtener más información sobre los permisos, consulte Referencia de permisos de Microsoft Graph.

      Connect-MgGraph -Scopes "AccessReview.Read.All, EntitlementManagement.Read.All" -ContextScope Process -NoWelcome
    

    Este comando le pide que inicie sesión con sus credenciales de Microsoft Entra. Después de iniciar sesión, es posible que tenga que dar su consentimiento a los permisos necesarios si es la primera vez que se conecta o si se requieren nuevos permisos.

Consultas de PowerShell para extraer datos de Gobernanza de la ID de Microsoft Entra para personalizar informes.

Las siguientes consultas recuperan los datos de Gobernanza de Microsoft Entra ID de Microsoft Graph usando PowerShell y exportan los datos a archivos JSON. Los archivos se importan en Azure Data Explorer en una sección posterior de este tutorial.

Entre los escenarios para generar informes con este tipo de datos se incluyen:

  • Informes sobre las revisiones de acceso históricas.
  • Elaboración de informes sobre asignaciones a través de la administración de derechos.

Obtención de datos de definición de programación de revisión de acceso

Genere un archivo JSON con nombres de definición de revisión de acceso e identificadores que se usan para crear vistas personalizadas en Azure Data Explorer. El ejemplo incluye todas las revisiones de acceso, pero puede incluir filtrado adicional si es necesario. Para obtener más información, consulte Uso del parámetro de consulta de filtro.

   $allsched = Get-MgIdentityGovernanceAccessReviewDefinition -All
   $definitions = @()
   # Iterate over each definition
   foreach ($definition in $allsched) {
      $definitions += [PSCustomObject]@{
         Id = $definition.Id
         DisplayName = $definition.DisplayName
         SnapshotDate = $SnapshotDate
      }
   }
   $definitions | ConvertTo-Json -Depth 10 | Set-Content "EntraAccessReviewDefinitions.json"

Obtención de datos de instancia para revisiones de acceso

Para exportar todas las definiciones de revisión de acceso, instancias y decisiones en un formato de carpeta estructurado mediante PowerShell, puede usar Microsoft Graph API. Este enfoque garantiza que los datos se organizan jerárquicamente y se alinean con la estructura de carpetas especificada.

Antes de comenzar, tenga en cuenta los siguientes puntos:

  • Asegúrese de que tiene los permisos necesarios para acceder a los datos de revisión en Microsoft Graph.
  • Según el volumen de datos, el tiempo de ejecución del script puede variar. Supervise el proceso y ajuste los parámetros según sea necesario.

Para obtener los datos de instancia:

  1. Descargue el script Export_Access_Reviews.ps1 y guárdelo localmente.

  2. En el Explorador de archivos, desbloquee el script para que pueda ejecutarlo en PowerShell.

  3. Ejecute el siguiente comando. La salida coloca todos los datos en tres subcarpetas: ReviewInstances, ReviewInstanceDecisionItemsy ReviewInstanceContactedReviewers.

     .\ExportAccessReviews.ps1 -InstanceStartDate "11/15/2024" -InstanceEndDate "12/15/2024" -ExportFolder "C:\AccessReviewsExport\11_15_to_12_15" 
    

Obtención de datos del paquete de acceso para la administración de derechos

Genere un archivo JSON con nombres de paquete de acceso e identificadores que se usan para crear vistas personalizadas en Azure Data Explorer. El ejemplo incluye todos los paquetes de acceso, pero puede incluir filtrado adicional si es necesario.

   $accesspackages1 = Get-MgEntitlementManagementAccessPackage -All
   $accesspackages2 = @()
   # Iterate over each access package
   foreach ($accesspackage in $accesspackages1) {
      $accesspackages2 += [PSCustomObject]@{
         Id = $accesspackage.Id
         DisplayName = $accesspackage.DisplayName
         SnapshotDate = $SnapshotDate
      }
   }
   $accesspackages2 | ConvertTo-Json -Depth 10 | Set-Content "EntraAccessPackages.json"

Obtención de datos de asignación de paquetes de acceso para la administración de derechos

Genere un archivo JSON con asignaciones para acceder a paquetes que se usan para crear vistas personalizadas en Azure Data Explorer. El ejemplo incluye todas las asignaciones que se entregan, pero puede incluir filtrado adicional si es necesario.

   $apassignments1 = Get-MgEntitlementManagementAssignment -ExpandProperty target,accessPackage -filter "state eq 'Delivered'" -all
   $apassignments2 = @()
   # Iterate over each access package assignment
   foreach ($assignment in $apassignments1) {
      $apassignments2 += [PSCustomObject]@{
         Id = $assignment.Id
         ScheduleStartDateTime = $assignment.Schedule.StartDateTime -replace "\\/Date\((\d+)\)\\/", '$1' 
         AccessPackageId = $assignment.AccessPackage.Id
         AccessPackageDisplayName = $assignment.AccessPackage.DisplayName
         TargetId = $assignment.Target.Id
         TargetDisplayName = $assignment.Target.DisplayName
         TargetEmail = $assignment.Target.Email
         TargetObjectId = $assignment.Target.ObjectId
         TargetPrincipalName = $assignment.Target.PrincipalName
         TargetSubjectType = $assignment.Target.SubjectType
         SnapshotDate = $SnapshotDate
      }
   }
   $apassignments2 | ConvertTo-Json -Depth 10 | Set-Content "EntraAccessPackageAssignments.json"

Creación de tablas e importación de archivos JSON con datos de Microsoft Entra ID Governance en Azure Data Explorer

En esta sección, importará los archivos JSON recién creados para los servicios de gobernanza de identificadores de Microsoft Entra en Azure Data Explorer para su posterior análisis. Estos archivos unen los datos que ya importó para los servicios de Identificador de Entra de Microsoft. En la primera importación a través de la interfaz de usuario web de Azure Data Explorer, se crean tablas basadas en esquemas que sugiere la interfaz de usuario web de cada archivo JSON.

  1. Inicie sesión en la interfaz de usuario web de Azure Data Explorer.

  2. En el clúster de Azure Data Explorer o en el clúster gratuito, vaya a la base de datos que contiene los datos del identificador de Entra de Microsoft.

  3. En el menú de la izquierda, seleccione Consulta.

  4. Siga estos pasos para cada archivo JSON exportado para obtener los datos exportados en esa base de datos de Azure Data Explorer como una nueva tabla:

    1. Haga clic con el botón derecho en el nombre de la base de datos donde desea ingerir los datos. A continuación, seleccione Obtener datos.

      Captura de pantalla de una pestaña de consulta, con un menú contextual para una base de datos y el comando para obtener datos resaltados.

    2. Seleccione el origen de datos de la lista disponible. En este tutorial, va a ingerir datos de un archivo local, así que seleccione Archivo local.

    3. Seleccione + Nueva tabla y escriba un nombre de tabla, en función del nombre del archivo JSON que va a importar. Después de la primera importación, la tabla ya existe y puede seleccionarla como tabla de destino para una importación posterior.

    4. Seleccione Examinar archivos, seleccione el archivo JSON y, a continuación, seleccione Siguiente.

    5. Azure Data Explorer detecta automáticamente el esquema y proporciona una vista previa en la pestaña Inspeccionar . Seleccione Finalizar para crear la tabla e importar los datos de ese archivo. Una vez ingeridos los datos, seleccione Cerrar.

    6. Repita los pasos anteriores para cada uno de los archivos JSON que generó en la sección anterior, para cada una de las carpetas.

    7. Si hay muchos archivos en una carpeta, puede usar lightingest para importar el resto después de crear la tabla.

Al final de esos pasos, tiene las tablas EntraAccessReviewDefinitions, , EntraAccessPackagesEntraAccessPackageAssignmentsReviewInstances, , ReviewInstanceDecisionItems, y ReviewInstanceContactedReviewers en la base de datos, además de las tablas que creó anteriormente.

Uso de Azure Data Explorer para crear informes personalizados

Con los datos disponibles ahora en Azure Data Explorer, está listo para empezar a crear informes personalizados en función de los requisitos empresariales:

  1. Inicie sesión en la interfaz de usuario web de Azure Data Explorer.

  2. En el menú de la izquierda, seleccione Consulta.

Las siguientes consultas proporcionan ejemplos de informes comunes, pero puede personalizar estos informes para satisfacer sus necesidades y crear informes adicionales.

También puede ver los informes en Excel, seleccionando la pestaña Exportar y luego seleccionando Abrir en Excel.

Ejemplo: Generación de asignaciones de roles de aplicación para asignaciones directas y de grupo para una fecha de instantánea específica

Este informe proporciona una vista de quién tenía el acceso y cuándo, a la aplicación de destino. Puede usarlo para auditorías de seguridad, comprobación de cumplimiento y comprensión de los patrones de acceso dentro de la organización.

La consulta siguiente tiene como destino una aplicación específica dentro del identificador de Entra de Microsoft y analiza las asignaciones de roles a partir de una fecha determinada. La consulta recupera asignaciones de roles directas y basadas en grupos. Combina estos datos con los detalles del usuario de la EntraUsers tabla y la información de rol de la AppRoles tabla. En la consulta, establezca targetSnapshotDate al valor snapshotDate que usó al cargar los datos.

/// Define constants 
let targetServicePrincipalId = "<your service principal-id>"; // Target service principal ID 
let targetSnapshotDate = datetime("2024-01-13"); // Target snapshot date for the data 

// Extract role assignments for the target service principal and snapshot date 
let roleAssignments = AppRoleAssignments 
    | where ResourceId == targetServicePrincipalId and startofday(SnapshotDate) == targetSnapshotDate 
    | extend AppRoleIdStr = tostring(AppRoleId); // Convert AppRoleId to a string for easier comparison 

// Prepare user data from the EntraUsers table 
let users = EntraUsers 
    | project ObjectID, UserPrincipalName, DisplayName, ObjectIDStr = tostring(ObjectID); // Include ObjectID as string for joining 

// Prepare role data from the AppRoles table 
let roles = AppRoles 
    | mvexpand AppRoles // Expand AppRoles to handle multiple roles 
    | extend RoleName = AppRoles.DisplayName, RoleId = tostring(AppRoles.Id) // Extract role name and ID 
    | project RoleId, RoleName; 
// Process direct assignments 
let directAssignments = roleAssignments 
    | join kind=inner users on $left.PrincipalId == $right.ObjectID // Join with EntraUsers on PrincipalId 
    | join kind=inner roles on $left.AppRoleIdStr == $right.RoleId // Join with roles to get role names 
    | project UserPrincipalName, DisplayName, CreatedDateTime, RoleName, AssignmentType = "Direct", SnapshotDate; 

// Process group-based assignments 

let groupAssignments = roleAssignments 
    | join kind=inner EntraGroupMemberships on $left.PrincipalId == $right.GroupId // Join with group membership 
    | mvexpand Members // Expand group members 
    | extend MembersStr = tostring(Members) // Convert the member ID to a string 
    | distinct MembersStr, CreatedDateTime, AppRoleIdStr, SnapshotDate // Get distinct values 
    | join kind=inner users on $left.MembersStr == $right.ObjectIDStr // Join with EntraUsers for user details 
    | join kind=inner roles on $left.AppRoleIdStr == $right.RoleId // Join with roles for role names 
    | project UserPrincipalName, DisplayName, CreatedDateTime, RoleName, AssignmentType = "Group", SnapshotDate; 

// Combine results from direct and group-based assignments 
directAssignments 
| union groupAssignments 

Ejemplo: Crear un informe de auditoría básico con datos de Microsoft Entra que muestre quién tenía acceso a una aplicación entre dos fechas

Este informe proporciona una vista de quién tuvo acceso a la aplicación de destino entre dos fechas. Puede usarlo para auditorías de seguridad, comprobación de cumplimiento y comprensión de los patrones de acceso dentro de la organización.

La consulta siguiente tiene como destino una aplicación específica dentro del identificador de Entra de Microsoft y analiza las asignaciones de roles entre dos fechas. La consulta recupera asignaciones de roles directas de la tabla AppRoleAssignments y combina estos datos con los detalles del usuario de la tabla de EntraUsers y la información de roles de la tabla AppRoles.

// Set the date range and service principal ID for the query 
let startDate = datetime('2024-01-01'); 
let endDate = datetime('2024-03-14'); 
let servicePrincipalId = "<your service principal-id>"; 

// Query AppRoleAssignments for the specified service principal within the date range 
AppRoleAssignments 
| where ResourceId == servicePrincipalId and 
    todatetime(CreatedDateTime) between (startDate .. endDate) 

// Extend AppRoleId to a string for joining 
| extend AppRoleIdStr = tostring(AppRoleId) 

// Project the necessary fields for the join with EntraUsers and AppRoles 
| project PrincipalId, AppRoleIdStr, CreatedDateTime 

// Join with EntraUsers to get user details 
| join kind=inner (EntraUsers | project UserPrincipalName, DisplayName, ObjectID) on $left.PrincipalId == $right.ObjectID 

// Join with AppRoles to get the role display names 
| join kind=inner ( 
  AppRoles | mvexpand AppRoles | project RoleIdStr = tostring(AppRoles.Id), RoleDisplayName = tostring(AppRoles.DisplayName) 
) on $left.AppRoleIdStr == $right.RoleIdStr 

// Final projection of the report with the current date and time 
| project UserPrincipalName, DisplayName, RoleDisplayName, CreatedDateTime, ReportDate = now() 

Ejemplo: Ver usuarios agregados a una aplicación entre dos fechas de instantánea de datos

Estos informes proporcionan una vista de qué usuarios recibieron una asignación de roles de aplicación a la aplicación de destino entre dos fechas. Puede usar estos informes para realizar un seguimiento de los cambios en el acceso a la aplicación a lo largo del tiempo.

Esta consulta tiene como destino una aplicación específica dentro del identificador de Entra de Microsoft y los cambios en las asignaciones de roles entre fechas de inicio y finalización:

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

let startDate = datetime("2024-03-01"); 
let endDate = datetime("2024-03-14"); 
let servicePrincipalId = "<your service principal-id>"; 
let earlierDate = startDate; // Update this to your specific earlier date 

AppRoleAssignments 
| where SnapshotDate < endDate and ResourceId == servicePrincipalId
| project PrincipalId, AppRoleId2 = tostring(AppRoleId), CreatedDateTime 
| join kind=anti ( 
    AppRoleAssignments 
    | where SnapshotDate < earlierDate and ResourceId == servicePrincipalId 
    | project PrincipalId, AppRoleId1 = tostring(AppRoleId) 
) on PrincipalId 
| join kind=inner (EntraUsers) on $left.PrincipalId == $right.ObjectID 
| join kind=inner (AppRoles 
                   | mvexpand AppRoles 
                   | project AppRoleId=tostring(AppRoles.Id), RoleDisplayName=tostring(AppRoles.DisplayName) 
                  ) on $left.AppRoleId2 == $right.AppRoleId 
| project UserPrincipalName, DisplayName, RoleDisplayName, CreatedDateTime, PrincipalId, Change = "Added" 

Ejemplo: Varias consultas que usan revisiones de acceso

Ver la información de finalización y cronograma de la revisión de acceso

Una vez cargados los datos, use las siguientes consultas de Kusto para revisarlos:

  • ¿Cuándo se completó el último ciclo de revisión de acceso? ¿Cuánto tiempo tardó?

    ReviewInstances
    | summarize LastCompletedDate = max(ReviewInstanceEndDateTime),  
                ReviewDuration = datetime_diff('minute', max(ReviewInstanceEndDateTime), min(ReviewInstanceStartDateTime))  
    
  • ¿Se lleva a cabo el proceso de revisión de acceso a tiempo (por ejemplo, trimestral)?

    ReviewInstances 
    | extend ExpectedFrequency = "Quarterly" // Replace with the organization's frequency
    | summarize ReviewsCompleted = count(), LastReviewEndDate = max(ReviewInstanceEndDateTime)
    | extend CurrentDate = now(),  
             TimeSinceLastReview = datetime_diff('day', now(), LastReviewEndDate)
    | extend IsOnSchedule = iff(TimeSinceLastReview <= 90, "Yes", "No") // Assuming quarterly = 90 days
    

Visualización de la revisión de la participación y el compromiso en el acceso

  • ¿Quiénes fueron los revisores asignados?

    ReviewInstanceContactedReviewers
    | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName = DisplayName, ReviewerUserPrincipalName = UserPrincipalName, CreatedDateTime
    
  • ¿Qué revisores participaron activamente y proporcionaron respuestas?

    ReviewInstanceDecisionItems
    | where ReviewedBy_DisplayName != "AAD Access Reviews"
    | where Decision in ("Approve", "Deny")
    | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName = ReviewedBy_DisplayName,
    ReviewerUserPrincipalName = ReviewedBy_UserPrincipalName, Decision, ReviewedDateTime
    | distinct AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName, ReviewerUserPrincipalName, Decision
    
  • ¿Qué porcentaje de revisores respondieron a la solicitud de revisión de acceso?

    let TotalReviewers = ReviewInstanceContactedReviewers 
        | summarize Total = dcount(Id) by AccessReviewDefinitionId, AccessReviewInstanceId;  
    
    let RespondedReviewers = ReviewInstanceDecisionItems 
        | where ReviewedBy_DisplayName != "AAD Access Reviews"
        | where ReviewedBy_Id != "00000000-0000-0000-0000-000000000000"
        | where Decision in ("Approve", "Deny")
        | summarize Responded = dcount(ReviewedBy_Id) by AccessReviewDefinitionId, AccessReviewInstanceId;  
    
    TotalReviewers
    | join kind=leftouter RespondedReviewers on AccessReviewDefinitionId, AccessReviewInstanceId
    | extend Responded = coalesce(Responded, 0)  // Replace null with 0 for Responded
    | extend NotResponded = Total - Responded   // Calculate the number of nonresponders
    | extend ResponsePercentage = (Responded * 100.0) / Total  // Percentage of those who responded
    | extend NonResponsePercentage = (NotResponded * 100.0) / Total  // Percentage of those who didn't respond
    | project AccessReviewDefinitionId, AccessReviewInstanceId, Total, Responded, ResponsePercentage, NotResponded, NonResponsePercentage  
    
  • ¿Cuándo completó cada revisor sus tareas?

    ReviewInstanceDecisionItems 
    | where Decision in ("Approve", "Deny") 
    | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerName = ReviewedBy_DisplayName, ReviewerUserPrincipalName = ReviewedBy_UserPrincipalName, ReviewedDateTime  
    
  • ¿Qué revisores no tomaron ninguna decisión?

    let AllReviewers = ReviewInstanceContactedReviewers 
        | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerId = Id, ReviewerUserPrincipalName = UserPrincipalName, ReviewerName = DisplayName;
    
    let ActiveReviewers = ReviewInstanceDecisionItems
        | where Decision in ("Approve", "Deny")
        | where ReviewedBy_DisplayName != "AAD Access Reviews"
        | where ReviewedBy_Id != "00000000-0000-0000-0000-000000000000"
        | summarize ActiveReviewers = make_set(ReviewedBy_Id) by AccessReviewDefinitionId, AccessReviewInstanceId;
    
    AllReviewers
    | extend ReviewerId = tostring(ReviewerId)  // Ensure ReviewerId is a string
    | join kind=leftanti (
        ActiveReviewers
        | mv-expand ActiveReviewers
        | extend ActiveReviewers = tostring(ActiveReviewers)  // Cast ActiveReviewers to a string
    ) on $left.ReviewerId == $right.ActiveReviewers
    | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerUserPrincipalName, ReviewerName
    
  • ¿Qué porcentaje de revisores no interactúan?

    let TotalReviewers = ReviewInstanceContactedReviewers 
        | summarize Total = dcount(Id) by AccessReviewDefinitionId, AccessReviewInstanceId;
    
    let RespondedReviewers = ReviewInstanceDecisionItems
        | where ReviewedBy_DisplayName != "AAD Access Reviews"
        | where ReviewedBy_Id != "00000000-0000-0000-0000-000000000000"
        | where Decision in ("Approve", "Deny")
        | summarize Responded = dcount(ReviewedBy_Id) by AccessReviewDefinitionId, AccessReviewInstanceId;
    
    TotalReviewers
    | join kind=leftouter RespondedReviewers on AccessReviewDefinitionId, AccessReviewInstanceId
    | extend Responded = coalesce(Responded, 0)  // Replace null with 0 for Responded
    | extend NotResponded = Total - Responded   // Calculate the number of nonresponders
    | extend ResponsePercentage = (Responded * 100.0) / Total  // Percentage of those who responded
    | extend NonResponsePercentage = (NotResponded * 100.0) / Total  // Percentage of those who didn't respond
    | project AccessReviewDefinitionId, AccessReviewInstanceId, Total, Responded, ResponsePercentage, NotResponded, NonResponsePercentage  
    
  • ¿Se activaron recordatorios para revisores no responsivos o decisiones pendientes?

    // Step 1: Get the list of all reviewers
    let TotalReviewers = ReviewInstanceContactedReviewers 
        | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerId = Id, ReviewerUserPrincipalName = UserPrincipalName, ReviewerName = DisplayName;
    
    // Step 2: Get the list of reviewers who responded 
    let RespondedReviewers = ReviewInstanceDecisionItems
        | where ReviewedBy_DisplayName != "AAD Access Reviews"
        | where ReviewedBy_Id != "00000000-0000-0000-0000-000000000000"
        | where Decision in ("Approve", "Deny")
        | project AccessReviewDefinitionId, AccessReviewInstanceId, RespondedReviewerId = ReviewedBy_Id;
    
    // Step 3: Get the list of review instances
    let ReviewInstancesWithDetails = ReviewInstances
        | project AccessReviewDefinitionId = ReviewDefinitionId,  
                  AccessReviewInstanceId = ReviewInstanceId,  
                  RemindersSent = ReviewDefinitionSettings_ReminderNotificationsEnabled,  
                  StartDate = todatetime(ReviewInstanceStartDateTime),  
                  EndDate = todatetime(ReviewInstanceEndDateTime)
        | extend
                  ReminderSentDate = iif(RemindersSent, StartDate + (EndDate - StartDate) / 2, datetime(null));
    
    // Step 4: Identify nonresponsive reviewers and join with review instance details
    TotalReviewers
    | join kind=leftouter (ReviewInstancesWithDetails) on AccessReviewDefinitionId, AccessReviewInstanceId
    | join kind=leftanti RespondedReviewers on $left.ReviewerId == $right.RespondedReviewerId
    | project AccessReviewDefinitionId, AccessReviewInstanceId, ReviewerUserPrincipalName, ReviewerName, RemindersSent, ReminderSentDate
    

Visualización de los usuarios y los cambios de acceso resultantes de las revisiones de acceso

  • ¿Quién perdió el acceso a recursos específicos durante la revisión de acceso?

    ReviewInstanceDecisionItems 
    | where Decision == "Deny" 
    | project User = Principal_DisplayName, Resource = Resource_DisplayName, Decision, Justification 
    
  • ¿Se marcaron los usuarios debido a la inactividad?

    ReviewInstanceDecisionItems
    | where Insights contains "inactive"
    | project User = Principal_DisplayName, Resource = Resource_DisplayName, Insights, Decision
    
  • ¿Cuál fue la fecha de eliminación de acceso y el motivo por el que se perdió el acceso?

    ReviewInstanceDecisionItems
    | where Decision == "Deny"
    | project User = Principal_DisplayName, Resource=Resource_DisplayName, AccessRemovalDate = AppliedDateTime, Reason = Justification  
    
  • ¿Qué usuarios no tomaron decisiones?

    ReviewInstanceDecisionItems
    | where Decision == "NotReviewed"
    | project User = Principal_DisplayName, Resource=Resource_DisplayName
    
  • ¿Qué opiniones carecen de revisores?

    ReviewInstances
    | join kind=leftanti (
        ReviewInstanceContactedReviewers
        | summarize by AccessReviewInstanceId
    ) on $left.ReviewInstanceId == $right.AccessReviewInstanceId  
    
  • ¿Cuáles reseñas no tenían usuarios?

    ReviewInstances 
    | join kind=leftanti (
        ReviewInstanceDecisionItems
        | summarize by AccessReviewInstanceId
    ) on $left.ReviewInstanceId == $right.AccessReviewInstanceId
    

Resumen de las decisiones de revisión de acceso

  • ¿Qué decisiones tomaron los usuarios: aprobados, denegados o sin cambios?

    ReviewInstanceDecisionItems
    | summarize count() by Decision
    
  • ¿Qué número de usuarios se aprobaron o denegaron el acceso?

    ReviewInstanceDecisionItems
    | summarize ApprovedCount = countif(Decision == "Approve"), DeniedCount = countif(Decision == "Deny")
    
  • ¿Se documentaron los motivos de aprobación?

    ReviewInstanceDecisionItems
    | where Decision == "Approve" and isnotempty(Justification)
    | summarize count() by ReviewedBy_DisplayName
    

Confirme la calidad de la revisión de acceso y verifique su completitud

  • ¿Se han considerado revocaciones de acceso para los usuarios inactivos?

    ReviewInstanceDecisionItems
    | where Insights contains "inactive" and Decision == "Deny"
    | project User = Principal_DisplayName, Decision
    
  • ¿Hubo algún acceso que no se eliminó correctamente?

    ReviewInstanceDecisionItems
    | where ApplyResult != "New" and ApplyResult != "AppliedSuccessfully"
    
  • ¿Los revisores documentaron sus decisiones?

    ReviewInstanceDecisionItems
    | where isnotempty(Justification)
    | summarize count() by ReviewedBy_DisplayName
    
  • ¿Se capturaron comentarios para cada usuario?

    ReviewInstanceDecisionItems
    | where isnotempty(Justification)
    | project User = Principal_DisplayName, Resource = Resource_DisplayName, Comments = Justification
    

Configurar importaciones continuas

En este tutorial se muestra un proceso de extracción, transformación y carga de datos de un solo uso (ETL) para rellenar Azure Data Explorer con una sola instantánea con fines de informes. Para los informes en curso o para comparar los cambios a lo largo del tiempo, puede automatizar el proceso de rellenar Azure Data Explorer desde Microsoft Entra, de modo que la base de datos siga teniendo datos actuales.

Puede usar Azure Automation, un servicio en la nube de Azure, para hospedar los scripts de PowerShell que necesita para extraer datos de Microsoft Entra ID y Microsoft Entra ID Governance. Para obtener más información, consulte Automatización de las tareas de gobernanza del identificador de Entra de Microsoft a través de Azure Automation y Microsoft Graph.

También puede usar características de Azure o herramientas de línea de comandos, como lightingest para incorporar datos y rellenar una tabla existente. Para más información, consulte Uso de LightIngest para ingerir datos en Azure Data Explorer.

Por ejemplo, para cargar el EntraAccessPackages.json archivo en el directorio actual en la EntraAccessPackages tabla como el usuario que ha iniciado sesión actualmente, use este comando:

az login
LightIngest.exe "https://ingest-CLUSTERHOSTNAME;Fed=True" -database:"DATABASE" -table:EntraAccessPackages -sourcepath:"." -pattern:"EntraAccessPackages.json" -format:multijson -azcli:true

Informes sobre datos de más orígenes

También puede incorporar datos a Azure Data Explorer desde orígenes más allá de Microsoft Entra. Entre los escenarios de esta funcionalidad se incluyen:

  • Un administrador quiere ver eventos en el registro de auditoría con detalles adicionales sobre usuarios, paquetes de acceso u otros objetos que no forman parte del propio registro de auditoría.
  • Un administrador quiere ver todos los usuarios agregados a una aplicación de Microsoft Entra ID y sus derechos de acceso en el propio repositorio de la aplicación, como una base de datos SQL.

Para más información, consulte Creación de informes personalizados en Azure Data Explorer mediante datos de otros orígenes.