Coletar registros de login do Microsoft Entra ID
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 os seguintes pré-requisitos:
- Uma 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ário 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 e API.
- Administrador de função privilegiada: 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 Entra ID pelo Hub de Eventos do Azure com a captura ativada, que grava os dados no Armazenamento de Blobs do Azure. Em seguida, o Google SecOps ingere os registros do armazenamento de Blobs usando o tipo de feed do Armazenamento de Blobs do Azure V2.
Configurar a conta de armazenamento do Azure
Criar conta de armazenamento
- 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 Selecionar ou criar Nome da conta de armazenamento Insira um nome exclusivo (por exemplo, secopsaadsignin).Região Selecione a região mais próxima do seu namespace do Hub de Eventos. Desempenho Padrão (recomendado) Redundância LRS (armazenamento redundante local) ou GRS (armazenamento com redundância geográfica) Clique em Revisar + criar.
Revise a visão geral e clique em Criar.
Aguarde até que a implantação seja concluída.
Receber credenciais da conta de armazenamento
- Acesse a conta de armazenamento que você criou.
- Na navegação à esquerda, selecione Chaves de acesso em Segurança e rede.
- Clique em Mostrar chaves.
- Copie e salve o seguinte:
- Nome da conta de armazenamento
- Chave 1 ou Chave 2: a chave de acesso compartilhado.
Criar namespace e Hub de Eventos
Criar namespace dos 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 Selecione o mesmo grupo de recursos da sua conta de armazenamento. Nome do namespace Insira um nome exclusivo (por exemplo, secops-entraid-signin).Local Selecione a mesma região da sua conta de armazenamento. Nível de preços Padrão (obrigatório para a captura do Hub de Eventos) Clique em Revisar + criar e em Criar.
Aguarde até que a implantação seja concluída.
Criar Hub de Eventos
- Acesse o namespace do Hub de Eventos que você criou.
- Clique em + Event Hub na parte de cima.
- Informe os seguintes detalhes de configuração:
- Nome: insira um nome (por exemplo,
entraid-signin-logs). - Contagem de partições: 2 (padrão, aumente para maior capacidade de processamento).
- Política de limpeza: excluir.
- Tempo de retenção (horas): 24 (mínimo, aumente se necessário para resiliência).
- Nome: insira um nome (por exemplo,
- Clique em Revisar + criar e em Criar.
Ativar a captura do Hub de Eventos
- Acesse o Hub de Eventos que você criou (dentro do namespace).
- No menu de navegação à esquerda, selecione Capturar.
- Defina Captura como Ativada.
Informe os seguintes detalhes de configuração:
Configuração Valor Período (minutos) 5 (ou menos para quase em tempo real) Janela de tamanho (MB) 300 Provedor de captura Armazenamento de blobs do Azure Assinatura do Azure Selecione sua assinatura Conta de armazenamento Selecione a conta de armazenamento que você criou. Contêiner de blob Crie ou selecione um contêiner (por exemplo, entraid-signin-capture).Clique em Salvar.
Configurar as configurações de diagnóstico do Entra ID
- No portal do Azure, pesquise Microsoft Entra ID.
- No painel de navegação à esquerda, acesse 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 (opcional, recomendado).
- ServicePrincipalSignInLogs: logins do principal de serviço (opcional).
- ManagedIdentitySignInLogs: logins de identidade gerenciada (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.
Configurar feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds > Adicionar novo feed
- Hub de conteúdo > Pacotes de conteúdo > Comece já
Configurar um feed no Google SecOps para ingerir registros de login do Entra ID
- Clique no pacote Plataforma do Azure.
- Localize o tipo de registro Azure AD.
Especifique valores para os seguintes campos:
- Tipo de origem: Armazenamento de blobs V2 do Microsoft Azure
URI do Azure: insira o URL do endpoint do serviço de blobs com o caminho do contêiner de captura:
https://<storage-account>.blob.core.windows.net/entraid-signin-capture/Substitua
<storage-account>pelo nome da sua conta de armazenamento do Azure.Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência:
- Nunca: nunca exclui arquivos após as transferências.
- Excluir arquivos transferidos: exclui os arquivos após a transferência ser concluída.
- Excluir arquivos transferidos e diretórios vazios: exclui arquivos e diretórios vazios após a transferência bem-sucedida.
Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
Chave compartilhada: insira o valor da chave de acesso compartilhado da conta de armazenamento.
Namespace do recurso: o namespace do recurso.
Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.
Clique em Criar feed.
Depois de criar o feed, pode levar de 5 a 10 minutos para que os registros comecem a aparecer no Google SecOps.
Para mais informações sobre como configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.
Para mais informações sobre os feeds do Google Security Operations, consulte a documentação dos feeds do Google Security Operations. Para informações sobre os requisitos de cada tipo de feed, consulte Configuração de feed por tipo.
Configurar o firewall do Azure Storage (se ativado)
Se a sua conta do Azure Storage usar um firewall, adicione os intervalos de IP do Google SecOps.
- No portal do Azure, acesse sua conta de armazenamento.
- Selecione Rede em Segurança e rede.
- Em Firewalls e redes virtuais, selecione Ativado nas redes virtuais e endereços IP selecionados.
- Na seção Firewall, em Intervalo de endereços, clique em + Adicionar intervalo de IP.
- Adicione cada intervalo de IP do Google SecOps na notação CIDR.
- Consulte a documentação da lista de permissão de IP.
- Ou recupere-os de maneira programática usando a API Management de feeds.
- Clique em Salvar.
Método 2: API de terceiros
Esse método usa a API Microsoft Graph para recuperar os registros de login do Entra ID diretamente do seu locatário da Microsoft.
Configurar a 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 ou nas políticas de acesso condicional do Microsoft Azure.
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 Azure AD
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: obrigató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: obrigatório para o 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 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 successfullyTestar 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 feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds > Adicionar novo feed
- Hub de conteúdo > Pacotes de conteúdo > Comece já
Configurar um feed no Google SecOps para ingerir registros de login do Microsoft Azure AD
- Clique no pacote Plataforma do Azure.
- Localize o tipo de registro Azure AD.
Especifique valores para os seguintes campos:
- Tipo de origem: API de terceiros (recomendado)
- 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.com
Opções avançadas:
- Nome do feed: um valor pré-preenchido que identifica o feed.
- 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 Criar feed.
Depois de criar o feed, os dados de contexto serão recuperados periodicamente. Pode levar até 24 horas para que o instantâneo inicial do diretório apareça no Google SecOps.
Para mais informações sobre como configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.
Para mais informações sobre os feeds do Google Security Operations, consulte a documentação dos feeds do Google Security Operations. Para informações sobre os requisitos de cada tipo de feed, consulte Configuração de feed por tipo. Se você tiver problemas ao criar feeds, entre em contato com o suporte do Google Security Operations.
Endpoints regionais
Para implantações do Microsoft Azure AD 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 do 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 "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", será ALLOW. Caso contrário, será 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 os 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 do rótulo como "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 como "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 como "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 "". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.