Recolha registos de contexto do Microsoft Azure AD
Este documento descreve como pode recolher registos do Microsoft Azure Active Directory (AD) configurando um feed do Google Security Operations.
O Azure Active Directory (AZURE_AD
) chama-se agora Microsoft Entra ID. Os registos de auditoria do Azure AD
(AZURE_AD_AUDIT
) são agora registos de auditoria do Microsoft Entra ID.
Para mais informações, consulte o artigo Ingestão de dados no Google Security Operations.
Uma etiqueta de carregamento identifica o analisador que normaliza os dados de registo não processados para o formato UDM estruturado.
Antes de começar
Certifique-se de que cumpre os seguintes pré-requisitos:
- Uma subscrição do Azure na qual pode iniciar sessão
- Uma função de administrador global ou administrador do Azure AD
- Um Azure AD (inquilino) no Azure
Como configurar o Azure AD
- Inicie sessão no portal do Azure.
- Aceda a Página inicial > Registo de apps, selecione uma aplicação registada ou registe uma aplicação se ainda não tiver criado uma.
- Para registar uma aplicação, na secção Registo de apps, clique em Novo registo.
- No campo Nome, indique o nome a apresentar da sua aplicação.
- Na secção Tipos de contas suportados, selecione a opção necessária para especificar quem pode usar a aplicação ou aceder à API.
- Clique em Registar.
- Aceda à página Vista geral e copie o ID da aplicação (cliente) e o ID do diretório (inquilino), que são necessários para configurar o feed do Google Security Operations.
- Clique em Autorizações da API.
- Clique em Adicionar uma autorização e, de seguida, selecione Microsoft Graph no novo painel.
- Clique em Autorizações da aplicação.
- Selecione as autorizações AuditLog.Read.All, Directory.Read.All e SecurityEvents.Read.All. Certifique-se de que as autorizações são Autorizações da aplicação e não Autorizações delegadas.
- Clique em Conceder consentimento de administrador para o diretório predefinido. As aplicações são autorizadas a chamar APIs quando lhes são concedidas autorizações por utilizadores ou administradores como parte do processo de consentimento.
- Aceda a Definições > Gerir.
- Clique em Certificados e secrets.
- Clique em Novo segredo do cliente. No campo Valor, é apresentado o segredo do cliente.
- Copie o valor do segredo do cliente. O valor é apresentado apenas no momento da criação e é necessário para o registo da app Azure e para configurar o feed do Google Security Operations.
Configure feeds
Existem dois pontos de entrada diferentes para configurar feeds na plataforma Google SecOps:
- Definições do SIEM > Feeds > Adicionar novo
- Content Hub > Pacotes de conteúdo > Começar
Como configurar o feed de contexto do Microsoft Azure AD
- Clique no pacote Plataforma Azure.
- Localize o tipo de registo Contexto organizacional do Azure AD.
Especifique valores para os seguintes campos:
- Tipo de origem: API de terceiros (recomendado)
- ID de cliente OAUTH: especifique o ID de cliente que obteve anteriormente.
- Segredo do cliente OAUTH: especifique o segredo do cliente que obteve anteriormente.
- ID do inquilino: especifique o ID do inquilino que obteve anteriormente.
- Recuperar dispositivos: se deve recuperar informações do dispositivo no contexto do utilizador.
- Obter grupos: se deve obter informações sobre membros de grupos no contexto do utilizador.
- Caminho completo da API: URL do ponto final da API REST Microsoft Graph.
- Ponto final de autenticação da API: ponto final de autenticação do Microsoft Active Directory.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Espaço de nomes do recurso: espaço de nomes associado ao feed.
- Etiquetas de carregamento: etiquetas aplicadas a todos os eventos deste feed.
Clique em Criar feed.
Para mais informações sobre a configuração de vários feeds para diferentes tipos de registos nesta família de produtos, consulte o artigo Configure 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 obter informações sobre os requisitos de cada tipo de feed, consulte o artigo Configuração do feed por tipo. Se tiver problemas ao criar feeds, contacte o apoio técnico das Operações de segurança da Google.
Referência de mapeamento de campos
Este código de análise transforma registos formatados JSON não processados do Azure Active Directory num modelo de dados unificado (UDM). Extrai informações de utilizadores e gestores, incluindo atributos, funções, relações e etiquetas, ao mesmo tempo que processa várias inconsistências de dados e enriquece o resultado com campos normalizados.
Tabela de mapeamento da UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
businessPhones | user.phone_numbers | Mapeado diretamente a partir do campo businessPhones no registo não processado. Vários números de telefone são extraídos e mapeados como entradas separadas. |
cidade | user.personal_address.city | Mapeado diretamente a partir do campo city no registo não processado. |
companyName | user.company_name | Mapeado diretamente a partir do campo companyName no registo não processado. |
country | user.personal_address.country_or_region | Mapeado diretamente a partir do campo country no registo não processado. Se country estiver vazio, o valor é retirado de usageLocation . |
createdDateTime | user.attribute.creation_time | Convertido numa data/hora a partir do campo createdDateTime no registo não processado através do formato RFC 3339. |
departamento | user.department | Mapeado diretamente a partir do campo department no registo não processado. Vários departamentos são extraídos e mapeados como entradas separadas. |
displayName | user.user_display_name | Mapeado diretamente a partir do campo displayName no registo não processado. |
employeeId | user.employee_id | Mapeado diretamente a partir do campo employeeId no registo não processado. Se employeeId estiver vazio, o valor é retirado de extension_employeeNumber . |
employeeType | user.attribute.labels.value (key: employeeType) | Mapeado diretamente a partir do campo employeeType no registo não processado e adicionado como uma etiqueta com a chave employeeType . |
extension_employeeNumber | user.employee_id | Mapeado para user.employee_id se employeeId estiver vazio. |
extension_wfc_AccountType | event.idm.entity.entity.labels.value (key: wfc_AccountType) | Mapeado diretamente a partir do campo extension_wfc_AccountType no registo não processado e adicionado como uma etiqueta com a chave wfc_AccountType . |
extension_wfc_AccountingUnitName | event.idm.entity.entity.labels.value (key: extension_wfc_AccountingUnitName) | Mapeado diretamente a partir do campo extension_wfc_AccountingUnitName no registo não processado e adicionado como uma etiqueta com a chave extension_wfc_AccountingUnitName . |
extension_wfc_execDescription | event.idm.entity.entity.labels.value (key: extension_wfc_execDescription) | Mapeado diretamente a partir do campo extension_wfc_execDescription no registo não processado e adicionado como uma etiqueta com a chave extension_wfc_execDescription . |
extension_wfc_groupDescription | event.idm.entity.entity.labels.value (key: extension_wfc_groupDescription) | Mapeado diretamente a partir do campo extension_wfc_groupDescription no registo não processado e adicionado como uma etiqueta com a chave extension_wfc_groupDescription . |
extension_wfc_orgDescription | event.idm.entity.entity.labels.value (key: extension_wfc_orgDescription) | Mapeado diretamente a partir do campo extension_wfc_orgDescription no registo não processado e adicionado como uma etiqueta com a chave extension_wfc_orgDescription . |
givenName | user.first_name | Mapeado diretamente a partir do campo givenName no registo não processado. |
gopher-devices | event.idm.entity.relations | Cada dispositivo na matriz gopher-devices é mapeado para uma entrada de relação separada. deviceId é mapeado para product_object_id , operatingSystem e operatingSystemVersion são combinados para formar platform_version , model é mapeado diretamente e createdDateTime é convertido num registo de data/hora e mapeado para created_timestamp . A relação está definida como OWNS e a direção está definida como UNIDIRECTIONAL . |
gopher-groups | event.idm.entity.relations | Cada grupo na matriz gopher-groups é mapeado para uma entrada de relação separada. O endereço id está mapeado para product_object_id e o endereço displayName está mapeado para group_display_name . A relação está definida como MEMBER e a direção está definida como UNIDIRECTIONAL . |
gopher-manager.businessPhones | empmanager.phone_numbers | Mapeado para empmanager.phone_numbers se manager estiver vazio. |
gopher-manager.country | empmanager.personal_address.country_or_region | Mapeado para empmanager.personal_address.country_or_region se manager estiver vazio. Se ambos os campos gopher-manager.country e gopher-manager.usageLocation estiverem vazios, o campo fica vazio. |
gopher-manager.department | empmanager.department | Mapeado para empmanager.department se manager estiver vazio. |
gopher-manager.displayName | empmanager.user_display_name | Mapeado para empmanager.user_display_name se manager estiver vazio. |
gopher-manager.employeeId | empmanager.employee_id | Mapeado para empmanager.employee_id se manager estiver vazio e gopher-manager.employeeId não estiver vazio. |
gopher-manager.extension_employeeNumber | empmanager.employee_id | Mapeado para empmanager.employee_id se manager e gopher-manager.employeeId estiverem vazios e gopher-manager.extension_employeeNumber não estiver vazio. |
gopher-manager.givenName | empmanager.first_name | Mapeado para empmanager.first_name se manager estiver vazio. |
gopher-manager.id | empmanager.product_object_id | Mapeado para empmanager.product_object_id se manager estiver vazio. |
gopher-manager.jobTitle | empmanager.title | Mapeado para empmanager.title se manager estiver vazio. |
gopher-manager.mail | empmanager.email_addresses | Mapeado para empmanager.email_addresses se manager estiver vazio. |
gopher-manager.onPremisesImmutableId | user.attribute.labels.value (key: gopher-manager onPremisesImmutableId) | Mapeado como uma etiqueta com a chave gopher-manager onPremisesImmutableId . |
gopher-manager.onPremisesSamAccountName | empmanager.userid | Mapeado para empmanager.userid se manager estiver vazio. |
gopher-manager.onPremisesSecurityIdentifier | empmanager.windows_sid | Mapeado para empmanager.windows_sid se manager estiver vazio. |
gopher-manager.proxyAddresses | empmanager.email_addresses, empmanager.group_identifiers | Se manager estiver vazio, cada endereço na matriz gopher-manager.proxyAddresses é mapeado para empmanager.email_addresses ou empmanager.group_identifiers , consoante comece por "smtp" ou "SMTP". |
gopher-manager.refreshTokensValidFromDateTime | empmanager.attribute.labels.value (key: refreshTokensValidFromDateTime) | Mapeado como uma etiqueta com a chave refreshTokensValidFromDateTime se manager estiver vazio. |
gopher-manager.streetAddress | empmanager.personal_address.name | Mapeado para empmanager.personal_address.name se manager estiver vazio. |
gopher-manager.surname | empmanager.last_name | Mapeado para empmanager.last_name se manager estiver vazio. |
gopher-manager.usageLocation | user.attribute.labels.value (key: manager_src_usageLocation) | Mapeado como uma etiqueta com a chave manager_src_usageLocation . |
gopher-manager.userType | empmanager.attribute.roles.name | Mapeado para empmanager.attribute.roles.name se manager estiver vazio. |
id | user.product_object_id | Mapeado diretamente a partir do campo id no registo não processado. |
identidades | user.attribute.labels.value (key: signInType), user.attribute.labels.value (key: userPrincipalName) | O elemento signInType está mapeado como uma etiqueta com a chave signInType . Se signInType e userPrincipalName não estiverem vazios, são combinados e mapeados como uma etiqueta com a chave userPrincipalName . |
jobTitle | user.title | Mapeado diretamente a partir do campo jobTitle no registo não processado. |
user.email_addresses | Mapeado diretamente a partir do campo mail no registo não processado. Se mail começar por "svc-", user_role.type é definido como SERVICE_ACCOUNT . |
|
mailNickname | user.attribute.labels.value (key: mailNickname) | Mapeado diretamente a partir do campo mailNickname no registo não processado e adicionado como uma etiqueta com a chave mailNickname . |
manager.businessPhones | empmanager.phone_numbers | Mapeado para empmanager.phone_numbers se gopher-manager estiver vazio. |
manager.city | empmanager.personal_address.city | Mapeado para empmanager.personal_address.city se gopher-manager estiver vazio. |
manager.companyName | empmanager.company_name | Mapeado para empmanager.company_name se gopher-manager estiver vazio. |
manager.country | empmanager.personal_address.country_or_region | Mapeado para empmanager.personal_address.country_or_region se gopher-manager estiver vazio. Se ambos os campos manager.country e manager.usageLocation estiverem vazios, o campo fica vazio. |
manager.department | empmanager.department | Mapeado para empmanager.department se gopher-manager estiver vazio. |
manager.displayName | empmanager.user_display_name | Mapeado para empmanager.user_display_name se gopher-manager estiver vazio. |
manager.employeeId | empmanager.employee_id | Mapeado para empmanager.employee_id se gopher-manager estiver vazio e manager.employeeId não estiver vazio. |
manager.extension_employeeNumber | empmanager.employee_id | Mapeado para empmanager.employee_id se gopher-manager e manager.employeeId estiverem vazios e manager.extension_employeeNumber não estiver vazio. |
manager.givenName | empmanager.first_name | Mapeado para empmanager.first_name se gopher-manager estiver vazio. |
manager.id | empmanager.product_object_id | Mapeado para empmanager.product_object_id se gopher-manager estiver vazio. |
manager.jobTitle | empmanager.title | Mapeado para empmanager.title se gopher-manager estiver vazio. |
manager.mail | empmanager.email_addresses | Mapeado para empmanager.email_addresses se gopher-manager estiver vazio. |
manager.onPremisesSamAccountName | empmanager.userid | Mapeado para empmanager.userid se gopher-manager estiver vazio. |
manager.onPremisesSecurityIdentifier | empmanager.windows_sid | Mapeado para empmanager.windows_sid se gopher-manager estiver vazio. |
manager.proxyAddresses | empmanager.email_addresses, empmanager.group_identifiers | Se gopher-manager estiver vazio, cada endereço na matriz manager.proxyAddresses é mapeado para empmanager.email_addresses ou empmanager.group_identifiers , consoante comece por "smtp" ou "SMTP". |
manager.refreshTokensValidFromDateTime | empmanager.attribute.labels.value (key: refreshTokensValidFromDateTime) | Mapeado como uma etiqueta com a chave refreshTokensValidFromDateTime se gopher-manager estiver vazio. |
manager.state | empmanager.personal_address.state | Mapeado para empmanager.personal_address.state se gopher-manager estiver vazio. |
manager.streetAddress | empmanager.personal_address.name | Mapeado para empmanager.personal_address.name se gopher-manager estiver vazio. |
manager.surname | empmanager.last_name | Mapeado para empmanager.last_name se gopher-manager estiver vazio. |
manager.usageLocation | user.attribute.labels.value (key: manager_src_usageLocation), empmanager.personal_address.country_or_region | Mapeado como uma etiqueta com a chave manager_src_usageLocation . Se manager.country estiver vazio, o valor também é mapeado para empmanager.personal_address.country_or_region . |
manager.userType | empmanager.attribute.roles.name | Mapeado para empmanager.attribute.roles.name se gopher-manager estiver vazio. |
onPremisesDistinguishedName | user.attribute.labels.value (key: onPremisesDistinguishedName), user.attribute.labels.value (key: onPremisesDistinguishedName-OU data) | O nome totalmente distinto é mapeado como uma etiqueta com a chave onPremisesDistinguishedName . A parte OU do nome distinto é extraída e mapeada como uma etiqueta com a chave onPremisesDistinguishedName-OU data . Se a parte da UO contiver "Admin", o valor user_role.type é definido como ADMINISTRATOR . Se contiver "Contas de serviço", o valor user_role.type é definido como SERVICE_ACCOUNT . |
onPremisesDomainName | user.group_identifiers, user.attribute.labels.value (key: onPremisesDomainName) | Mapeado diretamente para user.group_identifiers e adicionado como uma etiqueta com a chave onPremisesDomainName . |
onPremisesImmutableId | user.attribute.labels.value (key: onPremisesImmutableId) | Mapeado diretamente a partir do campo onPremisesImmutableId no registo não processado e adicionado como uma etiqueta com a chave onPremisesImmutableId . |
onPremisesSamAccountName | user.userid, user.attribute.labels.value (key: onPremisesSamAccountName) | Mapeado para user.userid se sAMAccountName estiver vazio. Também adicionado como uma etiqueta com a chave onPremisesSamAccountName . |
onPremisesSecurityIdentifier | user.windows_sid | Mapeado diretamente a partir do campo onPremisesSecurityIdentifier no registo não processado. |
proxyAddresses | user.email_addresses, user.group_identifiers | Cada endereço na matriz proxyAddresses é mapeado para user.email_addresses ou user.group_identifiers , consoante comece por "smtp" ou "SMTP". Se o endereço começar por "smtp" ou "SMTP", o prefixo "smtp:" ou "SMTP:" é removido, e o endereço de email restante é extraído e mapeado para user.email_addresses . |
refreshTokensValidFromDateTime | user.attribute.labels.value (key: refreshTokensValidFromDateTime) | Mapeado diretamente a partir do campo refreshTokensValidFromDateTime no registo não processado e adicionado como uma etiqueta com a chave refreshTokensValidFromDateTime . |
sAMAccountName | user.userid | Mapeado diretamente a partir do campo sAMAccountName no registo não processado. |
estado | user.personal_address.state | Mapeado diretamente a partir do campo state no registo não processado. |
streetAddress | user.personal_address.name | Mapeado diretamente a partir do campo streetAddress no registo não processado. |
apelido | user.last_name | Mapeado diretamente a partir do campo surname no registo não processado. |
usageLocation | user.personal_address.country_or_region | Se country estiver vazio, o valor é mapeado para user.personal_address.country_or_region . |
userPrincipalName | user.email_addresses | Mapeado diretamente a partir do campo userPrincipalName no registo não processado. Se userPrincipalName começar por "svc-", user_role.type é definido como SERVICE_ACCOUNT . |
userType | user.attribute.roles.name | Mapeado diretamente a partir do campo userType no registo não processado e adicionado a user.attribute.roles.name . |
Parser Logic | Mapeamento de UDM | Lógica |
N/A | event.idm.entity.metadata.vendor_name | Definido como "Microsoft". |
N/A | event.idm.entity.metadata.product_name | Definido como "Azure Active Directory". |
N/A | event.idm.entity.metadata.entity_type | Definido como "USER". |
N/A | event.idm.entity.metadata.collected_timestamp | Definido para o campo create_time do registo não processado. |
accountEnabled | user.user_authentication_status, user.attribute.labels.value (key: accountEnabled) | Se accountEnabled for verdadeiro, user.user_authentication_status é definido como "ACTIVE" e é adicionada uma etiqueta com a chave accountEnabled e o valor "true". Caso contrário, é adicionada uma etiqueta com a chave accountEnabled e o valor "false". |
empmanager-src.accountEnabled | user.user_authentication_status, user.attribute.labels.value (key: accountEnabled) | Se manager estiver vazio e empmanager-src.accountEnabled for "true", user.user_authentication_status é definido como "ACTIVE" e é adicionada uma etiqueta com a chave accountEnabled e o valor "true". Caso contrário, é adicionada uma etiqueta com a chave accountEnabled e o valor "false". |
onPremisesDistinguishedName | user_role.type | Se a parte OU do nome distinto contiver "Admin", o valor user_role.type é definido como ADMINISTRATOR . Se contiver "Contas de serviço", o valor user_role.type é definido como SERVICE_ACCOUNT . |
userPrincipalName | user_role.type | Se userPrincipalName começar por "svc-", user_role.type é definido como SERVICE_ACCOUNT . |
empmanager-src.onPremisesDistinguishedName | manager_role.type | Se gopher-manager estiver vazio e a parte da UO do nome distinto do gestor contiver "Users", manager_role.type é definido como ADMINISTRATOR . Se contiver "Contas de serviço", o valor manager_role.type é definido como SERVICE_ACCOUNT . |
empmanager-src.userPrincipalName | manager_role.type | Se gopher-manager estiver vazio e empmanager-src.userPrincipalName começar por "svc-", manager_role.type é definido como SERVICE_ACCOUNT . |
user_role.type | Se mail começar por "svc-", user_role.type é definido como SERVICE_ACCOUNT . |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.