Coletar registros de login do ID do Microsoft Entra (antigo Azure Active Directory)
Versão do analisador:26.0
Este documento explica como coletar registros de login do Microsoft Entra ID (antigo Azure Active Directory) configurando um feed do Google Security Operations. É possível configurar a ingestão usando dois métodos: o Hub de Eventos do Azure (recomendado) ou a API de terceiros.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Instância do Google SecOps.
- Acesso privilegiado ao portal do Microsoft Azure.
- Função de administrador de segurança ou administrador global no Microsoft Entra ID (necessária para configurações de diagnóstico).
- Para o método de API de terceiros, uma das seguintes funções para conceder consentimento do administrador:
- Administrador global: pode conceder consentimento para qualquer permissão, em qualquer API.
- Administrador de papéis privilegiado: pode conceder consentimento para qualquer permissão, em qualquer API.
- Administrador de aplicativos do Cloud: pode conceder consentimento para qualquer permissão de qualquer API, exceto funções de app do Microsoft Graph (permissões de aplicativo).
Método 1: Hub de Eventos do Azure (recomendado)
Esse método transmite os registros de login do Microsoft Entra ID pelo Hub de Eventos do Azure usando configurações de diagnóstico. O Google SecOps ingere os registros diretamente do Hub de Eventos usando o tipo de feed do Hub de Eventos do Azure.
Criar namespace do Hub de Eventos
Um namespace dos Hubs de Eventos é um contêiner de gerenciamento para um ou mais Hubs de Eventos.
- No portal do Azure, pesquise Hubs de Eventos.
- Clique em Criar.
Informe os seguintes detalhes de configuração:
Configuração Valor Assinatura Selecione sua assinatura do Azure Grupo de recursos Selecionar ou criar Nome do namespace Insira um nome exclusivo (por exemplo, secops-entraid-signin).Local Selecione a região mais próxima do seu locatário do Microsoft Entra Nível de preços Padrão (recomendado para produção) Unidades de capacidade de processamento Comece com 1 e ative o recurso de expansão automática (recomendado) Clique em Revisar + criar.
Revise a visão geral e clique em Criar.
Aguarde a conclusão da implantação (1 a 2 minutos).
Criar Hub de Eventos
- Depois que o namespace for implantado, acesse o namespace do Hub de Eventos.
- Na navegação à esquerda, selecione Hubs de eventos em Entidades.
- Clique em + Hub de eventos.
Informe os seguintes detalhes de configuração:
Configuração Valor Nome Insira um nome exclusivo (por exemplo, entraid-signin-logs).Contagem de partições 40 (recomendado para escalonamento ideal do Google SecOps) Retenção de mensagens 7 dias (mínimo recomendado) Capturar Desativado (não é necessário para o Google SecOps) Clique em Criar.
Receber a string de conexão do Hub de Eventos
O Google SecOps exige uma string de conexão para autenticar o Hub de eventos.
Opção A: string de conexão no nível do namespace (recomendada)
- Acesse o namespace do Hub de Eventos.
- Na navegação à esquerda, selecione Políticas de acesso compartilhado em Configurações.
- Clique na política padrão RootManageSharedAccessKey.
- Copie a String de conexão – chave primária.
- Salve essa string de conexão com segurança.
Exemplo:
Original: Endpoint=sb://secops-entraid-signin.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123==;EntityPath=entraid-signin-logs Remove EntityPath: Endpoint=sb://secops-entraid-signin.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123==
Opção B: string de conexão no nível do Hub de Eventos
- Acesse o Hub de Eventos (não o namespace).
- Na navegação à esquerda, selecione Políticas de acesso compartilhado em Configurações.
- Clique em + Adicionar para criar uma política.
- Informe os seguintes detalhes de configuração:
- Nome da política: insira um nome descritivo (por exemplo,
chronicle-read). - Permissões: selecione Ouvir somente (acesso somente leitura).
- Nome da política: insira um nome descritivo (por exemplo,
- Clique em Criar.
- Clique na política recém-criada.
- Copie a String de conexão – chave primária.
Salve essa string de conexão com segurança.
Configurar as configurações de diagnóstico do Microsoft Entra ID
- Faça login no centro de administração do Microsoft Entra como pelo menos um administrador de segurança.
- Navegue até Entra ID > Monitoramento e integridade > Configurações de diagnóstico.
- Clique em + Adicionar configuração de diagnóstico.
- Informe os seguintes detalhes de configuração:
- Nome da configuração de diagnóstico: insira um nome descritivo (por exemplo,
signin-logs-to-eventhub). - Na seção Registros, selecione as categorias de registros de acesso que você quer exportar:
- SignInLogs: logins interativos de usuários.
- NonInteractiveUserSignInLogs: logins de usuários não interativos (recomendado).
- ServicePrincipalSignInLogs: logins do principal de serviço (opcional).
- ManagedIdentitySignInLogs: logins de identidade gerenciada (opcional).
- ADFSSignInLogs: registros de login do AD FS (opcional, se o AD FS estiver em uso).
- RiskyUsers: usuários sinalizados como de risco pelo Microsoft Entra ID Protection (opcional).
- UserRiskEvents: detalhes de eventos de login arriscados (opcional).
- Na seção Detalhes do destino, selecione Transmitir para um hub de eventos.
- Assinatura: selecione a assinatura que contém o namespace do Hub de Eventos.
- Namespace do Hub de Eventos: selecione o namespace que você criou (por exemplo,
secops-entraid-signin). - Nome do hub de eventos: selecione o hub de eventos que você criou (por exemplo,
entraid-signin-logs). - Nome da política do hub de eventos: selecione RootManageSharedAccessKey.
- Nome da configuração de diagnóstico: insira um nome descritivo (por exemplo,
Clique em Salvar.
(Opcional) Configurar o Azure Blob Storage para criação de pontos de verificação
O Google SecOps pode usar o Armazenamento de Blobs do Azure para armazenar pontos de verificação do Hub de Eventos, que rastreiam quais eventos foram processados. Isso evita a ingestão duplicada se o feed for interrompido temporariamente.
Criar uma conta de armazenamento para checkpointing
- No portal do Azure, pesquise Contas de armazenamento.
- Clique em Criar.
Informe os seguintes detalhes de configuração:
Configuração Valor Assinatura Selecione sua assinatura do Azure Grupo de recursos Use o mesmo grupo de recursos que o Hub de Eventos Nome da conta de armazenamento Insira um nome exclusivo (por exemplo, secopsaadsignin).Região A mesma região do Hub de Eventos Desempenho Padrão Redundância LRS (armazenamento com redundância local) Clique em Revisar + criar.
Clique em Criar.
Criar contêiner de blob
- Acesse a conta de armazenamento que você criou.
- Na navegação à esquerda, selecione Contêineres em Armazenamento de dados.
- Clique em + Contêiner.
- Informe os seguintes detalhes de configuração:
- Nome: insira
checkpoints. - Nível de acesso público: particular (sem acesso anônimo)
- Nome: insira
- Clique em Criar.
Receber credenciais da conta de armazenamento
- Na conta de armazenamento, selecione Chaves de acesso em Segurança + rede.
- Clique em Mostrar chaves.
- Copie e salve:
- Nome da conta de armazenamento: o nome da sua conta de armazenamento.
- Chave 1: o valor da chave de acesso.
(Opcional) Criar um grupo de consumidores dedicado
Por padrão, o Hub de Eventos fornece um grupo de consumidores chamado $Default. Para ambientes de produção, recomendamos criar um grupo de consumidores dedicado para o Google SecOps.
- Acesse o Hub de Eventos (não o namespace).
- Na navegação à esquerda, selecione Grupos de consumidores em Entidades.
- Clique em + Grupo de consumidores.
- Informe os seguintes detalhes de configuração:
- Nome: insira um nome descritivo, por exemplo,
chronicle.
- Nome: insira um nome descritivo, por exemplo,
Clique em Criar.
Configurar um feed no Google SecOps para ingerir registros de login do Microsoft Entra ID
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Microsoft Entra ID Sign-In Logs - Event Hub). - Selecione Hub de eventos do Microsoft Azure como o Tipo de origem.
- Selecione Microsoft Azure AD como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
- String de conexão do hub de eventos: insira a string de conexão do hub de eventos que você capturou anteriormente.
Se você estiver usando uma string de conexão no nível do namespace:
- Confira se você removeu o parâmetro
EntityPath. - Você também precisa informar o Nome do hub de eventos no próximo campo.
Se estiver usando uma string de conexão no nível do hub de eventos:
- Use a string de conexão como está (inclui
EntityPath). O campo Nome do hub de eventos pode ser deixado em branco.
- Nome do hub de eventos: insira o nome do hub de eventos (por exemplo,
entraid-signin-logs).
Obrigatório se você estiver usando uma string de conexão no nível do namespace. Opcional se você estiver usando uma string de conexão no nível do hub de eventos.
- Nome do hub de eventos: insira o nome do hub de eventos (por exemplo,
Grupo de consumidores (opcional): insira o nome do grupo.
Deixe em branco para usar o grupo de consumidores padrão
$Default.Se você criou um grupo de consumidores dedicado, insira o nome dele (por exemplo,
chronicle).Nome do contêiner do Armazenamento de Blobs (opcional): para fazer checkpointing, insira o nome do contêiner (por exemplo,
checkpoints).
Se você estiver fornecendo armazenamento de blobs para checkpointing:
- Nome da conta de armazenamento do Azure: insira o nome da conta de armazenamento da configuração de checkpoint.
Chave da conta de armazenamento do Azure: insira a chave de acesso da configuração de checkpoint.
Namespace do recurso: o namespace do recurso.
Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.
Clique em Próxima.
Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Método 2: API de terceiros
Esse método usa a API Microsoft Graph para recuperar os registros de login do Microsoft Entra ID diretamente do seu locatário da Microsoft.
Configurar lista de permissões de IP
Antes de criar o feed, adicione os intervalos de IP do Google SecOps à lista de permissões nas configurações de rede do Microsoft Azure ou nas políticas de acesso condicional.
Receber intervalos de IP do Google SecOps
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Observe os intervalos de IP mostrados na interface de criação de feeds.
- Também é possível recuperar intervalos de IP de maneira programática usando a API Management Feed.
Configurar o acesso condicional para identidades de carga de trabalho (se necessário)
Se a organização usa políticas de Acesso Condicional que restringem o acesso por local:
- Na Central de administração do Microsoft Entra, acesse Proteção > Acesso condicional > Locais nomeados.
- Clique em + Novo local.
- Informe os seguintes detalhes de configuração:
- Nome: insira
Google SecOps IP Ranges. - Marcar como local de confiança: opcional, com base na sua política de segurança.
- Intervalos de IP: adicione cada intervalo de IP do Google SecOps na notação CIDR.
- Nome: insira
- Clique em Criar.
- Acesse Acesso condicional > Políticas.
- Para políticas que se aplicam a identidades de carga de trabalho, configure uma exclusão para o local nomeado
Google SecOps IP Rangesou para a entidade de serviço específica.
Configurar o acesso à API do Microsoft Entra ID
Criar registro de app
- Faça login no centro de administração do Microsoft Entra ou no portal do Azure.
- Acesse Identidade > Aplicativos > Registros de aplicativos.
- Clique em New registration.
Informe os seguintes detalhes de configuração:
- Nome: insira um nome descritivo, por exemplo,
Google SecOps Sign-In Logs Integration. - Tipos de conta compatíveis: selecione Somente contas neste diretório organizacional (tenant único).
- Nome: insira um nome descritivo, por exemplo,
Clique em Registrar.
Depois do registro, copie e salve os seguintes valores:
- ID do aplicativo (cliente)
- ID do diretório (locatário)
Configurar permissões da API
A integração exige as seguintes permissões de aplicativo do Microsoft Graph:
- No registro do app, acesse Permissões da API.
- Clique em Adicionar uma permissão.
- Selecione Microsoft Graph > Permissões do aplicativo.
- Selecione as seguintes permissões:
- AuditLog.Read.All: necessário para ler registros de login.
- Directory.Read.All: exigido pela API Microsoft Graph para acesso ao registro de login (problema conhecido).
- SecurityEvents.Read.All: exigido pelo Google Security Operations.
- Clique em Adicionar permissões
- Clique em Conceder consentimento de administrador para [Sua organização].
- Verifique se a coluna Status mostra Concedida para [Sua organização] em todas as três permissões.
| Permissão | Tipo | Descrição |
|---|---|---|
| AuditLog.Read.All | Aplicativo | Ler todos os dados registro de auditoria e de acesso |
| Directory.Read.All | Aplicativo | Ler dados do diretório (necessário para acesso à API) |
| SecurityEvents.Read.All | Aplicativo | Ler eventos de segurança |
Criar chave secreta do cliente
- Acesse Certificados e chaves secretas.
- Clique em New client secret.
Informe os seguintes detalhes de configuração:
- Descrição: insira um nome descritivo, por exemplo,
Google SecOps Feed. - Expira: selecione um período de validade.
- Descrição: insira um nome descritivo, por exemplo,
Clique em Adicionar.
Importante: copie imediatamente o Valor da chave secreta do cliente. Esse valor é mostrado apenas uma vez e não pode ser recuperado depois.
Verificar o acesso à API antes de criar o feed
Antes de criar o feed do Google SecOps, verifique se a entidade de serviço pode se autenticar e acessar a API Microsoft Graph.
Testar a autenticação usando o PowerShell
# Replace with your actual values $tenantId = "your-tenant-id" $clientId = "your-client-id" $clientSecret = "your-client-secret" # Token request parameters (must be lowercase) $tokenBody = @{ grant_type = "client_credentials" client_id = $clientId client_secret = $clientSecret scope = "https://graph.microsoft.com/.default" } # Request access token $tokenEndpoint = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" $tokenResponse = Invoke-RestMethod -Method Post -Uri $tokenEndpoint -Body $tokenBody -ContentType "application/x-www-form-urlencoded" if ($tokenResponse.access_token) { Write-Host "✓ Successfully obtained access token" -ForegroundColor Green # Test API call to sign-ins endpoint $apiUrl = "https://graph.microsoft.com/v1.0/auditLogs/signIns?`$top=1" $headers = @{ Authorization = "Bearer $($tokenResponse.access_token)" } try { $signInResponse = Invoke-RestMethod -Method Get -Uri $apiUrl -Headers $headers Write-Host "✓ Successfully accessed sign-ins API" -ForegroundColor Green Write-Host "Sample sign-in log retrieved successfully" -ForegroundColor Green } catch { Write-Host "✗ Failed to access sign-ins API" -ForegroundColor Red Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Red } } else { Write-Host "✗ Failed to obtain access token" -ForegroundColor Red }Saída esperada:
✓ Successfully obtained access token ✓ Successfully accessed sign-ins API Sample sign-in log retrieved successfully
Testar a autenticação usando curl
# Replace with your actual values TENANT_ID="your-tenant-id" CLIENT_ID="your-client-id" CLIENT_SECRET="your-client-secret" # Request access token curl -X POST "https://login.microsoftonline.com/$TENANT_ID/oauth2/v2.0/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials" \ -d "client_id=$CLIENT_ID" \ -d "client_secret=$CLIENT_SECRET" \ -d "scope=https://graph.microsoft.com/.default" # Test API access curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ "https://graph.microsoft.com/v1.0/auditLogs/signIns?\$top=1"
Configurar um feed no Google SecOps para ingerir registros de login do Microsoft Entra ID
Configurar o feed
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Microsoft Entra ID Sign-In Logs). - Selecione API de terceiros como o Tipo de fonte.
- Selecione Microsoft Azure AD como o Tipo de registro.
- Clique em Próxima.
Configurar parâmetros de feed
Especifique valores para os seguintes parâmetros de entrada:
- ID do cliente OAuth: o ID do aplicativo (cliente) do registro do app.
- Chave secreta do cliente OAuth: o valor da chave secreta do cliente que você copiou anteriormente.
- ID do locatário: o ID do locatário da Microsoft do registro do app (formato UUID, por exemplo,
0fc279f9-fe30-41be-97d3-abe1d7681418). Caminho completo da API: URL do endpoint de API REST do Microsoft Graph:
graph.microsoft.com/v1.0/auditLogs/signInsEndpoint de autenticação da API: endpoint de autenticação do Microsoft Active Directory:
login.microsoftonline.comOpções Avançadas:
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Tipo de origem: API de terceiros (mecanismo para coletar os registros no Google SecOps).
- Namespace do recurso: o namespace do recurso ao qual o feed será associado.
- Rótulos de ingestão: os rótulos serão adicionados a todos os eventos desse feed.
- Clique em Próxima.
Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Endpoints regionais
Para implantações do Microsoft Entra ID em nuvens soberanas, use os endpoints regionais adequados:
| Ambiente em nuvem | Caminho completo da API | Endpoint de autenticação da API |
|---|---|---|
| Global | graph.microsoft.com/v1.0/auditLogs/signIns |
login.microsoftonline.com |
| L4 do governo dos EUA | graph.microsoft.us/v1.0/auditLogs/signIns |
login.microsoftonline.us |
| L5 do governo dos EUA (DOD) | dod-graph.microsoft.us/v1.0/auditLogs/signIns |
login.microsoftonline.us |
| China (21Vianet) | microsoftgraph.chinacloudapi.cn/v1.0/auditLogs/signIns |
login.chinacloudapi.cn |
Tabela de mapeamento de UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
activityDateTime |
principal.event_timestamp |
Analisado do campo activityDateTime. Se o campo não estiver no formato esperado "aaaa-MM-ddTHH:mm:ss.SSSZ" ou "ISO8601", o analisador tentará outros formatos, como "MM/dd/aaaa HH:mm:ss A" ou "MM/d/aaaa HH:mm:ss A". |
activityDisplayName |
security_result.summary |
Mapeado diretamente de activityDisplayName. |
additionalDetails.0.value |
network.http.user_agent |
Mapeado diretamente de additionalDetails.0.value. |
additionalDetails.1.key |
target.resource.attribute.labels.key |
Mapeado diretamente de additionalDetails.1.key. |
additionalDetails.1.value |
target.resource.attribute.labels.value |
Mapeado diretamente de additionalDetails.1.value. |
additionalInfo.[].Key |
network.http.user_agent, target.url |
Se Key for userAgent, mapeie Value para network.http.user_agent e network.http.parsed_user_agent. Se Key for alertUrl, mapeie Value para target.url. |
additionalInfo.[].Value |
network.http.user_agent, target.url |
Se Key for userAgent, mapeie Value para network.http.user_agent e network.http.parsed_user_agent. Se Key for alertUrl, mapeie Value para target.url. |
am_category |
metadata.description |
Mapeado diretamente de am_category. |
am_tenantId |
metadata.product_deployment_id |
Mapeado diretamente de am_tenantId. |
appId |
target.resource.attribute.labels.value |
Mapeado diretamente de appId com a chave do rótulo como "ID do app". |
appDisplayName |
target.application |
Mapeado diretamente de appDisplayName. |
appliedConditionalAccessPolicies.[].displayName |
security_result.[].rule_name, about.[].user.user_display_name |
Mapeado diretamente de appliedConditionalAccessPolicies.[].displayName. |
appliedConditionalAccessPolicies.[].enforcedGrantControls |
security_result.[].rule_labels.value |
Mapeado diretamente de appliedConditionalAccessPolicies.[].enforcedGrantControls com a chave do rótulo como "applied_conditional_access_policies_enforced_grant_controls". |
appliedConditionalAccessPolicies.[].enforcedSessionControls |
security_result.[].rule_labels.value |
Mapeado diretamente de appliedConditionalAccessPolicies.[].enforcedSessionControls com a chave do rótulo como "applied_conditional_access_policies_enforced_session_controls". |
appliedConditionalAccessPolicies.[].id |
security_result.[].rule_id, about.[].user.userid |
Mapeado diretamente de appliedConditionalAccessPolicies.[].id. |
appliedConditionalAccessPolicies.[].result |
security_result.[].detection_fields.value, about.[].labels.value |
Mapeado diretamente de appliedConditionalAccessPolicies.[].result com a chave do rótulo como "Resultado". |
authenticationDetails.[].authenticationMethod |
security_result.[].detection_fields.value |
Mapeado diretamente de authenticationDetails.[].authenticationMethod com a chave do rótulo como "authenticationMethod". |
authenticationDetails.[].authenticationMethodDetail |
security_result.[].detection_fields.value |
Mapeado diretamente de authenticationDetails.[].authenticationMethodDetail com a chave do rótulo como "authenticationMethodDetail". |
authenticationDetails.[].authenticationStepDateTime |
security_result.[].detection_fields.value |
Mapeado diretamente de authenticationDetails.[].authenticationStepDateTime com a chave do rótulo como "authenticationStepDateTime". |
authenticationDetails.[].authenticationStepRequirement |
security_result.[].detection_fields.value |
Mapeado diretamente de authenticationDetails.[].authenticationStepRequirement com a chave do rótulo como "authenticationStepRequirement". |
authenticationDetails.[].authenticationStepResultDetail |
security_result.[].detection_fields.value |
Mapeado diretamente de authenticationDetails.[].authenticationStepResultDetail com a chave do rótulo "authenticationStepResultDetail". |
authenticationDetails.[].succeeded |
security_result.action |
Se o valor for "true", ALLOW, caso contrário, BLOCK. |
authenticationRequirement |
additional.fields.value.string_value |
Mapeado diretamente de authenticationRequirement com a chave do rótulo como "AuthenticationRequirement". |
authenticationRequirementPolicies.[].detail |
security_result.detection_fields.value |
Mapeado diretamente de authenticationRequirementPolicies.[].detail com a chave do rótulo como "detail". |
authenticationRequirementPolicies.[].requirementProvider |
security_result.detection_fields.value |
Mapeado diretamente de authenticationRequirementPolicies.[].requirementProvider com a chave do rótulo como "requirementProvider". |
callerIpAddress |
principal.ip, principal.asset.ip |
Mapeado diretamente de callerIpAddress. |
category |
metadata.description |
Mapeado diretamente de category. |
clientAppUsed |
principal.application |
Mapeado diretamente de clientAppUsed. |
conditionalAccessStatus |
additional.fields.value.string_value |
Mapeado diretamente de conditionalAccessStatus com a chave do rótulo como "conditionalAccessStatus". |
correlationId |
network.session_id, security_result.detection_fields.value |
Mapeado diretamente de correlationId. Também usado como security_result.detection_fields.value com a chave do rótulo "CorrelationId". |
createdDateTime |
when |
O campo when é derivado do campo createdDateTime. A data e a hora são extraídas do campo createdDateTime usando grok e combinadas para formar o campo when. |
deviceDetail.browser |
network.http.user_agent |
Mapeado diretamente de deviceDetail.browser. |
deviceDetail.deviceId |
principal.asset.asset_id, principal.asset_id |
Mapeado diretamente de deviceDetail.deviceId e com o prefixo "ID do dispositivo:". |
deviceDetail.displayName |
principal.asset.hostname |
Mapeado diretamente de deviceDetail.displayName. |
deviceDetail.isCompliant |
principal.asset.attribute.labels.value |
Mapeado diretamente de deviceDetail.isCompliant com a chave do rótulo como "isCompliant". |
deviceDetail.isManaged |
principal.asset.attribute.labels.value |
Mapeado diretamente de deviceDetail.isManaged com a chave do rótulo como "isManaged". |
deviceDetail.operatingSystem |
principal.platform_version |
Mapeado diretamente de deviceDetail.operatingSystem. |
deviceDetail.trustType |
principal.asset.attribute.labels.value |
Mapeado diretamente de deviceDetail.trustType com a chave do rótulo como "trustType". |
durationMs |
additional.fields.value.string_value |
Mapeado diretamente de durationMs com a chave do rótulo como "durationMs". |
event.id |
- | Não mapeado de acordo com as instruções (ponto 3). |
id |
metadata.product_log_id |
Mapeado diretamente de id. |
identity |
target.user.user_display_name |
Mapeado diretamente de identity se for diferente de userId e não for um endereço de e-mail. |
initiatedBy.user.displayName |
principal.user.user_display_name |
Mapeado diretamente de initiatedBy.user.displayName. |
initiatedBy.user.id |
principal.user.userid, principal.user.windows_sid |
Mapeado diretamente de initiatedBy.user.id. |
initiatedBy.user.ipAddress |
principal.ip, principal.asset.ip |
Mapeado diretamente de initiatedBy.user.ipAddress. |
initiatedBy.user.userPrincipalName |
principal.user.email_addresses, principal.user.userid |
Mapeado diretamente de initiatedBy.user.userPrincipalName. Se for um endereço de e-mail, ele será mapeado para email_addresses. Caso contrário, será mapeado para userid. |
Level |
security_result.severity_details, level |
Mapeado diretamente de Level. |
level |
security_result.severity_details, security_result.severity |
Mapeado diretamente de level. Também mapeado para security_result.severity após a conversão para maiúsculas. Tratamento especial para valores "Information", "Informational", "0", "4", "Warning", "1", "3", "Error", "2" e "Critical". |
location.city |
principal.location.city |
Mapeado diretamente de location.city. |
location.countryOrRegion |
principal.location.country_or_region |
Mapeado diretamente de location.countryOrRegion. |
location.geoCoordinates.altitude |
additional.fields.value.string_value |
Mapeado diretamente de location.geoCoordinates.altitude com a chave do rótulo "location_geoCoordinates_altitude". |
location.geoCoordinates.latitude |
principal.location.region_latitude, principal.location.region_coordinates.latitude |
Mapeado diretamente de location.geoCoordinates.latitude. |
location.geoCoordinates.longitude |
principal.location.region_longitude, principal.location.region_coordinates.longitude |
Mapeado diretamente de location.geoCoordinates.longitude. |
location.state |
principal.location.state |
Mapeado diretamente de location.state. |
location |
principal.location.name |
Mapeado diretamente de location. |
log_type |
metadata.log_type |
Mapeado diretamente de log_type. |
networkLocationDetails.[].networkNames |
additional.fields.value.string_value |
Valores concatenados de networkLocationDetails.[].networkNames com a chave do rótulo como "networkName {index}". |
networkLocationDetails.[].networkType |
security_result.detection_fields.value, additional.fields.value.string_value |
Mapeado diretamente de networkLocationDetails.[].networkType com a chave do rótulo como "networkType". Também usado como additional.fields.value.string_value com a chave do rótulo "networkType {index}". |
operationName |
event_type |
Se operationName for "Atividade de login", então USER_LOGIN. Se operationName for "Adicionar membro ao grupo", então USER_CHANGE_PERMISSIONS. |
operationType |
security_result.action_details |
Mapeado diretamente de operationType. |
properties.activity |
security_result.summary |
Mapeado diretamente de properties.activity. |
properties.activityDateTime |
when |
Analisado do campo properties.activityDateTime. Se o campo não estiver no formato esperado "aaaa-MM-ddTHH:mm:ss.SSSZ" ou "ISO8601", o analisador tentará outros formatos, como "MM/dd/aaaa HH:mm:ss A" ou "MM/d/aaaa HH:mm:ss A". |
properties.activityDisplayName |
security_result.summary |
Mapeado diretamente de properties.activityDisplayName. |
properties.additionalInfo |
network.http.user_agent, target.url |
Analisado como JSON e, se a chave for userAgent, mapeie o valor para network.http.user_agent e network.http.parsed_user_agent. Se a chave for alertUrl, mapeie o valor para target.url. |
properties.appliedConditionalAccessPolicies.[].displayName |
security_result.[].rule_name |
Mapeado diretamente de properties.appliedConditionalAccessPolicies.[].displayName. |
properties.appliedConditionalAccessPolicies.[].enforcedGrantControls |
security_result.[].rule_labels.value |
Mapeado diretamente de properties.appliedConditionalAccessPolicies.[].enforcedGrantControls com a chave do rótulo como "applied_conditional_access_policies_enforced_grant_controls". |
properties.appliedConditionalAccessPolicies.[].enforcedSessionControls |
security_result.[].rule_labels.value |
Mapeado diretamente de properties.appliedConditionalAccessPolicies.[].enforcedSessionControls com a chave do rótulo como "applied_conditional_access_policies_enforced_session_controls". |
properties.appliedConditionalAccessPolicies.[].id |
security_result.[].rule_id |
Mapeado diretamente de properties.appliedConditionalAccessPolicies.[].id. |
properties.appliedConditionalAccessPolicies.[].result |
security_result.[].detection_fields.value |
Mapeado diretamente de properties.appliedConditionalAccessPolicies.[].result com a chave do rótulo como "Resultado". |
properties.appId |
appId |
Mapeado diretamente de properties.appId. |
properties.appDisplayName |
target.application |
Mapeado diretamente de properties.appDisplayName. |
properties.authenticationDetails.[].authenticationMethod |
security_result.detection_fields.value |
Mapeado diretamente de properties.authenticationDetails.[].authenticationMethod com a chave do rótulo como "authenticationMethod". |
properties.authenticationDetails.[].authenticationMethodDetail |
security_result.detection_fields.value |
Mapeado diretamente de properties.authenticationDetails.[].authenticationMethodDetail com a chave do rótulo como "authenticationMethodDetail". |
properties.authenticationDetails.[].authenticationStepDateTime |
security_result.detection_fields.value |
Mapeado diretamente de properties.authenticationDetails.[].authenticationStepDateTime com a chave do rótulo como "authenticationStepDateTime". |
properties.authenticationDetails.[].authenticationStepRequirement |
security_result.detection_fields.value |
Mapeado diretamente de properties.authenticationDetails.[].authenticationStepRequirement com a chave do rótulo como "authenticationStepRequirement". |
properties.authenticationDetails.[].authenticationStepResultDetail |
security_result.detection_fields.value |
Mapeado diretamente de properties.authenticationDetails.[].authenticationStepResultDetail com a chave do rótulo "authenticationStepResultDetail". |
properties.authenticationRequirement |
additional.fields.value.string_value |
Mapeado diretamente de properties.authenticationRequirement com a chave do rótulo como "AuthenticationRequirement". |
properties.authenticationRequirementPolicies.[].detail |
security_result.detection_fields.value |
Mapeado diretamente de properties.authenticationRequirementPolicies.[].detail com a chave do rótulo como "detail". |
properties.authenticationRequirementPolicies.[].requirementProvider |
security_result.detection_fields.value |
Mapeado diretamente de properties.authenticationRequirementPolicies.[].requirementProvider com a chave do rótulo como "requirementProvider". |
properties.clientAppUsed |
principal.application |
Mapeado diretamente de properties.clientAppUsed. |
properties.conditionalAccessStatus |
additional.fields.value.string_value |
Mapeado diretamente de properties.conditionalAccessStatus com a chave do rótulo como "conditionalAccessStatus". |
properties.crossTenantAccessType |
additional.fields.value.string_value |
Mapeado diretamente de properties.crossTenantAccessType com a chave de rótulo "crossTenantAccessType". |
properties.detectedDateTime |
additional.fields.value.string_value |
Mapeado diretamente de properties.detectedDateTime com a chave do rótulo como "detectedDateTime". |
properties.detectionTimingType |
additional.fields.value.string_value |
Mapeado diretamente de properties.detectionTimingType com a chave do rótulo como "detectionTimingType". |
properties.homeTenantId |
additional.fields.value.string_value |
Mapeado diretamente de properties.homeTenantId com a chave do rótulo como "homeTenantId". |
properties.id |
metadata.product_log_id |
Mapeado diretamente de properties.id. |
properties.initiatedBy.user.displayName |
principal.user.user_display_name |
Mapeado diretamente de properties.initiatedBy.user.displayName. |
properties.initiatedBy.user.id |
principal.user.windows_sid |
Mapeado diretamente de properties.initiatedBy.user.id. |
properties.initiatedBy.user.ipAddress |
principal.ip, principal.asset.ip |
Mapeado diretamente de properties.initiatedBy.user.ipAddress. |
properties.initiatedBy.user.userPrincipalName |
principal.user.email_addresses, principal.user.userid |
Mapeado diretamente de properties.initiatedBy.user.userPrincipalName. Se for um endereço de e-mail, ele será mapeado para email_addresses. Caso contrário, será mapeado para userid. |
properties.ipAddress |
principal.ip, principal.asset.ip |
Mapeado diretamente de properties.ipAddress. |
properties.isGuest |
additional.fields.value.string_value |
Mapeado diretamente de properties.isGuest com a chave do rótulo como "isGuest". |
properties.isDeleted |
additional.fields.value.string_value |
Mapeado diretamente de properties.isDeleted com a chave do rótulo como "isDeleted". |
properties.isProcessing |
additional.fields.value.string_value |
Mapeado diretamente de properties.isProcessing com a chave do rótulo como "isProcessing". |
properties.lastUpdatedDateTime |
additional.fields.value.string_value |
Mapeado diretamente de properties.lastUpdatedDateTime com a chave do rótulo "lastUpdatedDateTime". |
properties.location.city |
principal.location.city |
Mapeado diretamente de properties.location.city. |
properties.location.countryOrRegion |
principal.location.country_or_region |
Mapeado diretamente de properties.location.countryOrRegion. |
properties.location.geoCoordinates.latitude |
principal.location.region_latitude, principal.location.region_coordinates.latitude |
Mapeado diretamente de properties.location.geoCoordinates.latitude. |
properties.location.geoCoordinates.longitude |
principal.location.region_longitude, principal.location.region_coordinates.longitude |
Mapeado diretamente de properties.location.geoCoordinates.longitude. |
properties.location.state |
principal.location.state |
Mapeado diretamente de properties.location.state. |
properties.networkLocationDetails.[].networkNames |
additional.fields.value.string_value |
Valores concatenados de properties.networkLocationDetails.[].networkNames com a chave do rótulo como "properties networkName {index}". |
properties.networkLocationDetails.[].networkType |
additional.fields.value.string_value |
Mapeado diretamente de properties.networkLocationDetails.[].networkType com a chave de rótulo "properties networkType {index}". |
properties.riskEventType |
additional.fields.value.string_value |
Mapeado diretamente de properties.riskEventType com a chave do rótulo como "riskEventType". |
properties.riskLastUpdatedDateTime |
additional.fields.value.string_value |
Mapeado diretamente de properties.riskLastUpdatedDateTime com a chave do rótulo "riskLastUpdatedDateTime". |
properties.riskLevel |
additional.fields.value.string_value |
Mapeado diretamente de properties.riskLevel com a chave do rótulo como "riskLevel". |
properties.riskLevelDuringSignIn |
additional.fields.value.string_value |
Mapeado diretamente de properties.riskLevelDuringSignIn com a chave do rótulo "riskLevelDuringSignIn". |
properties.riskState |
additional.fields.value.string_value |
Mapeado diretamente de properties.riskState com a chave do rótulo como "riskState". |
properties.riskDetail |
additional.fields.value.string_value |
Mapeado diretamente de properties.riskDetail com a chave do rótulo como "riskDetail". |
properties.riskType |
additional.fields.value.string_value |
Mapeado diretamente de properties.riskType com a chave do rótulo como "riskType". |
properties.source |
additional.fields.value.string_value |
Mapeado diretamente de properties.source com a chave do rótulo como "source". |
properties.targetResources.0.id |
target.user.product_object_id |
Mapeado diretamente de properties.targetResources.0.id. |
properties.targetResources.modifiedProperties.0.newValue |
target.group.product_object_id |
Mapeado diretamente de properties.targetResources.modifiedProperties.0.newValue. |
properties.tokenIssuerType |
additional.fields.value.string_value |
Mapeado diretamente de properties.tokenIssuerType com a chave do rótulo como "tokenIssuerType". |
properties.userAgent |
network.http.user_agent, network.http.parsed_user_agent |
Mapeado diretamente de properties.userAgent. |
properties.userDisplayName |
target.user.user_display_name |
Mapeado diretamente de properties.userDisplayName. |
properties.userId |
target.user.product_object_id |
Mapeado diretamente de properties.userId. |
properties.userPrincipalName |
target.user.userid, target.user.email_addresses |
Mapeado diretamente de properties.userPrincipalName. Se for um endereço de e-mail, ele será mapeado para email_addresses. Caso contrário, será mapeado para userid. |
result |
security_result.action, security_result.action_details |
Se result for "success", então ALLOW. |
resultDescription |
security_result.description |
Mapeado diretamente de resultDescription. |
resultSignature |
additional.fields.value.string_value |
Mapeado diretamente de resultSignature com a chave do rótulo como "resultSignature". |
resultType |
security_result.rule_id, action, security_result.summary |
Se resultType for "0", então ALLOW e "Login bem-sucedido". Caso contrário, BLOCK e "Ocorreu uma falha no login". |
resourceId |
target.resource.id, target.resource.product_object_id |
Mapeado diretamente de resourceId. |
resourceDisplayName |
target.resource.name, appDisplayName |
Mapeado diretamente de resourceDisplayName. |
riskDetail |
additional.fields.value.string_value |
Mapeado diretamente de riskDetail com a chave do rótulo como "riskDetail". |
riskEventTypes.[]. |
additional.fields.value.string_value, additional.fields.value.list_value.values.string_value |
Os valores são adicionados a uma lista com a chave "riskEventTypes" em additional.fields. Além disso, cada valor é adicionado como um campo separado com a chave "riskEventType" em additional.fields. |
riskEventTypes_v2.[]. |
additional.fields.value.list_value.values.string_value |
Os valores são adicionados a uma lista com a chave "riskEventTypes_v2" em additional.fields. |
riskLevelAggregated |
additional.fields.value.string_value |
Mapeado diretamente de riskLevelAggregated com a chave do rótulo como "riskLevelAggregated". |
riskLevelDuringSignIn |
additional.fields.value.string_value |
Mapeado diretamente de riskLevelDuringSignIn com a chave do rótulo "riskLevelDuringSignIn". |
riskState |
additional.fields.value.string_value |
Mapeado diretamente de riskState com a chave do rótulo como "riskState". |
status.additionalDetails |
security_result.description |
Mapeado diretamente de status.additionalDetails. |
status.errorCode |
security_result.rule_id, errorCode |
Mapeado diretamente de status.errorCode. |
target.displayName |
resourceDisplayName |
Mapeado diretamente de target.displayName. |
target.id |
resourceId |
Mapeado diretamente de target.id. |
target.modifiedProperties.[].displayName |
target.resource.attribute.labels.key |
Mapeado diretamente de target.modifiedProperties.[].displayName. |
target.modifiedProperties.[].newValue |
target.resource.attribute.labels.value, target.resource.product_object_id |
Mapeado diretamente de target.modifiedProperties.[].newValue. |
target.modifiedProperties.[].oldValue |
target.resource.attribute.labels.value |
Mapeado diretamente de target.modifiedProperties.[].oldValue. |
target.type |
target.resource.type |
Mapeado diretamente de target.type. |
tenantId |
metadata.product_deployment_id |
Mapeado diretamente de tenantId. |
time |
when |
O campo when é derivado do campo time. A data e a hora são extraídas do campo time usando grok e combinadas para formar o campo when. |
userAgent |
network.http.user_agent, network.http.parsed_user_agent |
Mapeado diretamente de userAgent. |
userDisplayName |
target.user.user_display_name |
Mapeado diretamente de userDisplayName. |
userId |
target.user.product_object_id |
Mapeado diretamente de userId. |
userPrincipalName |
target.user.userid, principal.administrative_domain, target.user.email_addresses |
Mapeado diretamente de userPrincipalName. Se for um endereço de e-mail, ele será mapeado para email_addresses, e a parte do domínio será extraída e mapeada para principal.administrative_domain. Caso contrário, ele será mapeado para userid. |
| (Lógica do analisador) | event.idm.is_alert, event.idm.is_significant |
Definido como "true" se o nível for "Critical". |
| (Lógica do analisador) | event.idm.read_only_udm.metadata.event_type |
Definido como "USER_LOGIN" se has_target_user for "true". Definido como "USER_UNCATEGORIZED" se has_principal_user for "true". Definido como "STATUS_UPDATE" se has_principal for "true". Caso contrário, defina como "GENERIC_EVENT". |
| (Lógica do analisador) | event.idm.read_only_udm.metadata.vendor_name |
Defina como "Microsoft". |
| (Lógica do analisador) | event.idm.read_only_udm.metadata.product_name |
Defina como "Azure AD". |
| (Lógica do analisador) | event.idm.read_only_udm.extensions.auth.type |
Defina como "SSO". |
| (Lógica do analisador) | event.idm.read_only_udm.extensions.auth.mechanism |
Defina como "INTERACTIVE" se isInteractive for "true". Caso contrário, defina como "MECHANISM_OTHER". |
| (Lógica do analisador) | security_result.action |
Definido como ALLOW se o resultado for "success". |
| (Lógica do analisador) | security_result.action |
Definido como ALLOW se "resultType" for 0. |
| (Lógica do analisador) | security_result.action |
Definido como BLOCK se resultType não for 0 nem "". |
| (Lógica do analisador) | security_result.category |
Definido como "AUTH_VIOLATION" se resultType não for 0 nem "". |
| (Lógica do analisador) | security_result.description |
Definido como "Associação ao grupo modificada" se operationName for "Adicionar membro ao grupo" e o resultado for "success". |
| (Lógica do analisador) | security_result.priority |
Defina como "MEDIUM_PRIORITY" se properties.riskLevelDuringSignIn for "medium". |
| (Lógica do analisador) | security_result.summary |
Definido como "Login bem-sucedido" se resultType for 0. |
| (Lógica do analisador) | security_result.summary |
Definido como "Ocorreu uma falha no login" se resultType não for 0 nem "". |
| (Lógica do analisador) | security_result.summary |
Definido como "properties.activityDisplayName", se existir. |
| (Lógica do analisador) | security_result.severity |
Defina como "INFORMATIONAL" se o nível for "Information", "Informational", "0" ou "4". Defina como "MEDIUM" se o nível for "Warning", "1" ou "3". Definido como ERROR se o nível for "Error" ou "2". Definido como CRITICAL se o nível for "Critical". |
| (Lógica do analisador) | security_result.severity |
Definido como ERROR se resultType não for 0 nem "". |
Registro de alterações
Ver o registro de alterações deste analisador
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.