Coletar registros de contexto do Microsoft Azure AD
Este documento descreve como coletar registros do Microsoft Azure Active Directory (AD) configurando um feed de operações de segurança do Google.
O Azure Active Directory (AZURE_AD
) agora é chamado de ID do Microsoft Entra. Os registros de auditoria do Azure AD
(AZURE_AD_AUDIT
) agora são registros de auditoria do ID do Microsoft Entra.
Para mais informações, consulte Ingestão de dados para as operações de segurança do Google.
Um rótulo de transferência identifica o analisador que normaliza os dados de registro brutos para o formato estruturado do UDM.
Antes de começar
Para concluir as tarefas desta página, confira se você tem o seguinte:
- Uma assinatura do Azure em que você pode fazer login.
- Uma função de administrador global ou administrador do Azure AD.
- Um Azure AD (locatário) no Azure.
Configurar o Azure AD
- Faça login no portal do Azure.
- Acesse Início > Registro de apps, selecione um app registrado ou registre um app se você ainda não criou um.
- Para registrar um aplicativo, clique em Novo registro na seção Registro do app.
- No campo Nome, informe o nome de exibição do aplicativo.
- Na seção Tipos de contas compatíveis, selecione a opção necessária para especificar quem pode usar o aplicativo ou acessar a API.
- Clique em Registrar.
- Acesse a página Visão geral e copie o ID do aplicativo (cliente) e o ID do diretório (tenant), que são necessários para configurar o feed das Operações de segurança do Google.
- Clique em Permissões da API.
- Clique em Adicionar uma permissão e selecione Microsoft Graph no novo painel.
- Clique em Permissões do app.
- Selecione as permissões AuditLog.Read.All, Directory.Read.All e SecurityEvents.Read.All. Verifique se as permissões são permissões do app e não permissões delegadas.
- Clique em Conceder consentimento de administrador para o diretório padrão. Os aplicativos são autorizados a chamar APIs quando recebem permissões de usuários ou administradores como parte do processo de consentimento.
- Acesse Configurações > Gerenciar.
- Clique em Certificados e chaves secretas.
- Clique em New client secret. No campo Valor, a chave secreta do cliente aparece.
- Copie o valor da chave secreta do cliente. O valor é mostrado apenas no momento da criação e é necessário para o registro do app do Azure e para configurar o feed do Google Security Operations.
Configurar um feed nas Operações de segurança do Google para processar registros de contexto do Azure AD
- Selecione Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- Insira um nome exclusivo para o nome do feed.
- Selecione API de terceiros como o Tipo de origem.
- Selecione Contexto organizacional do Azure AD como o Tipo de registro.
- Clique em Próxima.
- Configure os seguintes parâmetros de entrada obrigatórios:
- ID do cliente OAUTH: especifique o ID do cliente que você recebeu anteriormente.
- Chave secreta do cliente OAUTH: especifique a chave secreta do cliente que você recebeu anteriormente.
- ID do locatário: especifique o ID do locatário que você recebeu anteriormente.
- Clique em Próxima e em Enviar.
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 feeds por tipo. Se você tiver problemas ao criar feeds, entre em contato com o suporte da Google Security Operations.
Referência do mapeamento de campo
Esse código de analisador transforma registros formatados em JSON brutos do Azure Active Directory em um modelo de dados unificado (UDM, na sigla em inglês). Ele extrai informações de usuários e administradores, incluindo atributos, funções, relações e rótulos, além de lidar com várias inconsistências de dados e enriquecer a saída com campos padronizados.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
businessPhones | user.phone_numbers | Mapeado diretamente do campo businessPhones no registro bruto. Vários números de telefone são extraídos e mapeados como entradas separadas. |
cidade | user.personal_address.city | Mapeado diretamente do campo city no registro bruto. |
companyName | user.company_name | Mapeado diretamente do campo companyName no registro bruto. |
país | user.personal_address.country_or_region | Mapeado diretamente do campo country no registro bruto. Se country estiver vazio, o valor será retirado de usageLocation . |
createdDateTime | user.attribute.creation_time | Convertido em um carimbo de data/hora do campo createdDateTime no registro bruto usando o formato RFC3339. |
departamento | user.department | Mapeado diretamente do campo department no registro bruto. Vários departamentos são extraídos e mapeados como entradas separadas. |
displayName | user.user_display_name | Mapeado diretamente do campo displayName no registro bruto. |
employeeId | user.employee_id | Mapeado diretamente do campo employeeId no registro bruto. Se employeeId estiver vazio, o valor será retirado de extension_employeeNumber . |
employeeType | user.attribute.labels.value (chave: employeeType) | Mapeado diretamente do campo employeeType no registro bruto e adicionado como um rótulo com a chave employeeType . |
extension_employeeNumber | user.employee_id | Será mapeado para user.employee_id se employeeId estiver vazio. |
extension_wfc_AccountType | event.idm.entity.entity.labels.value (chave: wfc_AccountType) | Mapeado diretamente do campo extension_wfc_AccountType no registro bruto e adicionado como um rótulo com a chave wfc_AccountType . |
extension_wfc_AccountingUnitName | event.idm.entity.entity.labels.value (chave: extension_wfc_AccountingUnitName) | Mapeado diretamente do campo extension_wfc_AccountingUnitName no registro bruto e adicionado como um rótulo com a chave extension_wfc_AccountingUnitName . |
extension_wfc_execDescription | event.idm.entity.entity.labels.value (chave: extension_wfc_execDescription) | Mapeado diretamente do campo extension_wfc_execDescription no registro bruto e adicionado como um rótulo com a chave extension_wfc_execDescription . |
extension_wfc_groupDescription | event.idm.entity.entity.labels.value (chave: extension_wfc_groupDescription) | Mapeado diretamente do campo extension_wfc_groupDescription no registro bruto e adicionado como um rótulo com a chave extension_wfc_groupDescription . |
extension_wfc_orgDescription | event.idm.entity.entity.labels.value (chave: extension_wfc_orgDescription) | Mapeado diretamente do campo extension_wfc_orgDescription no registro bruto e adicionado como um rótulo com a chave extension_wfc_orgDescription . |
givenName | user.first_name | Mapeado diretamente do campo givenName no registro bruto. |
gopher-devices | event.idm.entity.relations | Cada dispositivo na matriz gopher-devices é mapeado para uma entrada de relação separada. O deviceId é mapeado para product_object_id , operatingSystem e operatingSystemVersion são combinados para formar platform_version , model é mapeado diretamente e createdDateTime é convertido em um carimbo de data/hora e mapeado para created_timestamp . A relação é definida como OWNS e a direção é definida como UNIDIRECTIONAL . |
gopher-groups | event.idm.entity.relations | Cada grupo na matriz gopher-groups é mapeado para uma entrada de relação separada. id é mapeado para product_object_id , e displayName é mapeado para group_display_name . A relação é definida como MEMBER e a direção é definida como UNIDIRECTIONAL . |
gopher-manager.businessPhones | empmanager.phone_numbers | Será 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 gopher-manager.country e gopher-manager.usageLocation estiverem vazios, o campo vai ficar vazio. |
gopher-manager.department | empmanager.department | Será mapeado para empmanager.department se manager estiver vazio. |
gopher-manager.displayName | empmanager.user_display_name | Será mapeado para empmanager.user_display_name se manager estiver vazio. |
gopher-manager.employeeId | empmanager.employee_id | Será associado a empmanager.employee_id se manager estiver vazio e gopher-manager.employeeId não estiver. |
gopher-manager.extension_employeeNumber | empmanager.employee_id | Será 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 | Será 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 | Será mapeado para empmanager.title se manager estiver vazio. |
gopher-manager.mail | empmanager.email_addresses | Será mapeado para empmanager.email_addresses se manager estiver vazio. |
gopher-manager.onPremisesImmutableId | user.attribute.labels.value (chave: gopher-manager onPremisesImmutableId) | Mapeado como um rótulo 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 | Será 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 será associado a empmanager.email_addresses ou empmanager.group_identifiers , dependendo se ele começa com "smtp" ou "SMTP". |
gopher-manager.refreshTokensValidFromDateTime | empmanager.attribute.labels.value (chave: refreshTokensValidFromDateTime) | Mapeado como um rótulo 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 | Será mapeado para empmanager.last_name se manager estiver vazio. |
gopher-manager.usageLocation | user.attribute.labels.value (chave: manager_src_usageLocation) | Mapeado como um rótulo com a chave manager_src_usageLocation . |
gopher-manager.userType | empmanager.attribute.roles.name | Será mapeado para empmanager.attribute.roles.name se manager estiver vazio. |
id | user.product_object_id | Mapeado diretamente do campo id no registro bruto. |
identidades | user.attribute.labels.value (chave: signInType), user.attribute.labels.value (chave: userPrincipalName) | O signInType é mapeado como um rótulo com a chave signInType . Se signInType e userPrincipalName não estiverem vazios, eles serão combinados e mapeados como um rótulo com a chave userPrincipalName . |
jobTitle | user.title | Mapeado diretamente do campo jobTitle no registro bruto. |
carta | user.email_addresses | Mapeado diretamente do campo mail no registro bruto. Se mail começar com "svc-", user_role.type será definido como SERVICE_ACCOUNT . |
mailNickname | user.attribute.labels.value (chave: mailNickname) | Mapeado diretamente do campo mailNickname no registro bruto e adicionado como um rótulo com a chave mailNickname . |
manager.businessPhones | empmanager.phone_numbers | Será mapeado para empmanager.phone_numbers se gopher-manager estiver vazio. |
manager.city | empmanager.personal_address.city | Será mapeado para empmanager.personal_address.city se gopher-manager estiver vazio. |
manager.companyName | empmanager.company_name | Será mapeado para empmanager.company_name se gopher-manager estiver vazio. |
manager.country | empmanager.personal_address.country_or_region | Será mapeado para empmanager.personal_address.country_or_region se gopher-manager estiver vazio. Se manager.country e manager.usageLocation estiverem vazios, o campo vai ficar vazio. |
manager.department | empmanager.department | Será mapeado para empmanager.department se gopher-manager estiver vazio. |
manager.displayName | empmanager.user_display_name | Será mapeado para empmanager.user_display_name se gopher-manager estiver vazio. |
manager.employeeId | empmanager.employee_id | Será associado a empmanager.employee_id se gopher-manager estiver vazio e manager.employeeId não estiver. |
manager.extension_employeeNumber | empmanager.employee_id | Será 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 | Será mapeado para empmanager.first_name se gopher-manager estiver vazio. |
manager.id | empmanager.product_object_id | Será mapeado para empmanager.product_object_id se gopher-manager estiver vazio. |
manager.jobTitle | empmanager.title | Será mapeado para empmanager.title se gopher-manager estiver vazio. |
manager.mail | empmanager.email_addresses | Será mapeado para empmanager.email_addresses se gopher-manager estiver vazio. |
manager.onPremisesSamAccountName | empmanager.userid | Será mapeado para empmanager.userid se gopher-manager estiver vazio. |
manager.onPremisesSecurityIdentifier | empmanager.windows_sid | Será 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 será associado a empmanager.email_addresses ou empmanager.group_identifiers , dependendo se ele começa com "smtp" ou "SMTP". |
manager.refreshTokensValidFromDateTime | empmanager.attribute.labels.value (chave: refreshTokensValidFromDateTime) | Mapeado como um rótulo 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 | Será mapeado para empmanager.personal_address.name se gopher-manager estiver vazio. |
manager.surname | empmanager.last_name | Será mapeado para empmanager.last_name se gopher-manager estiver vazio. |
manager.usageLocation | user.attribute.labels.value (chave: manager_src_usageLocation), empmanager.personal_address.country_or_region | Mapeado como um rótulo com a chave manager_src_usageLocation . Se manager.country estiver vazio, o valor também será mapeado para empmanager.personal_address.country_or_region . |
manager.userType | empmanager.attribute.roles.name | Será mapeado para empmanager.attribute.roles.name se gopher-manager estiver vazio. |
onPremisesDistinguishedName | user.attribute.labels.value (chave: onPremisesDistinguishedName), user.attribute.labels.value (chave: onPremisesDistinguishedName-OU data) | O nome completo é mapeado como um rótulo com a chave onPremisesDistinguishedName . A parte da UO do nome distinto é extraída e mapeada como um rótulo com a chave onPremisesDistinguishedName-OU data . Se a parte da UO contiver "Admin", o user_role.type será definido como ADMINISTRATOR . Se ele contiver "Contas de serviço", o user_role.type será definido como SERVICE_ACCOUNT . |
onPremisesDomainName | user.group_identifiers, user.attribute.labels.value (chave: onPremisesDomainName) | Mapeado diretamente para user.group_identifiers e adicionado como um rótulo com a chave onPremisesDomainName . |
onPremisesImmutableId | user.attribute.labels.value (chave: onPremisesImmutableId) | Mapeado diretamente do campo onPremisesImmutableId no registro bruto e adicionado como um rótulo com a chave onPremisesImmutableId . |
onPremisesSamAccountName | user.userid, user.attribute.labels.value (chave: onPremisesSamAccountName) | Será mapeado para user.userid se sAMAccountName estiver vazio. Também adicionado como um rótulo com a chave onPremisesSamAccountName . |
onPremisesSecurityIdentifier | user.windows_sid | Mapeado diretamente do campo onPremisesSecurityIdentifier no registro bruto. |
proxyAddresses | user.email_addresses, user.group_identifiers | Cada endereço na matriz proxyAddresses é mapeado para user.email_addresses ou user.group_identifiers , dependendo se ele começa com "smtp" ou "SMTP". Se o endereço começar com "smtp" ou "SMTP", o prefixo "smtp:" ou "SMTP:" será removido, e o endereço de e-mail restante será extraído e mapeado para user.email_addresses . |
refreshTokensValidFromDateTime | user.attribute.labels.value (chave: refreshTokensValidFromDateTime) | Mapeado diretamente do campo refreshTokensValidFromDateTime no registro bruto e adicionado como um rótulo com a chave refreshTokensValidFromDateTime . |
sAMAccountName | user.userid | Mapeado diretamente do campo sAMAccountName no registro bruto. |
estado | user.personal_address.state | Mapeado diretamente do campo state no registro bruto. |
streetAddress | user.personal_address.name | Mapeado diretamente do campo streetAddress no registro bruto. |
sobrenome | user.last_name | Mapeado diretamente do campo surname no registro bruto. |
usageLocation | user.personal_address.country_or_region | Se country estiver vazio, o valor será mapeado para user.personal_address.country_or_region . |
userPrincipalName | user.email_addresses | Mapeado diretamente do campo userPrincipalName no registro bruto. Se userPrincipalName começar com "svc-", user_role.type será definido como SERVICE_ACCOUNT . |
userType | user.attribute.roles.name | Mapeado diretamente do campo userType no registro bruto e adicionado a user.attribute.roles.name . |
Lógica do analisador | Mapeamento de UDM | Lógica |
N/A | event.idm.entity.metadata.vendor_name | Defina como "Microsoft". |
N/A | event.idm.entity.metadata.product_name | Defina como "Azure Active Directory". |
N/A | event.idm.entity.metadata.entity_type | Defina como "USER". |
N/A | event.idm.entity.metadata.collected_timestamp | Defina o campo create_time do registro bruto. |
accountEnabled | user.user_authentication_status, user.attribute.labels.value (chave: accountEnabled) | Se accountEnabled for verdadeiro, user.user_authentication_status será definido como "ACTIVE" e um rótulo com a chave accountEnabled e o valor "true" será adicionado. Caso contrário, um rótulo com a chave accountEnabled e o valor "false" será adicionado. |
empmanager-src.accountEnabled | user.user_authentication_status, user.attribute.labels.value (chave: accountEnabled) | Se manager estiver vazio e empmanager-src.accountEnabled for "true", user.user_authentication_status será definido como "ACTIVE" e um rótulo com a chave accountEnabled e o valor "true" será adicionado. Caso contrário, um rótulo com a chave accountEnabled e o valor "false" será adicionado. |
onPremisesDistinguishedName | user_role.type | Se a parte da UO do nome distinto contiver "Admin", o user_role.type será definido como ADMINISTRATOR . Se ele contiver "Contas de serviço", o user_role.type será definido como SERVICE_ACCOUNT . |
userPrincipalName | user_role.type | Se userPrincipalName começar com "svc-", user_role.type será definido como SERVICE_ACCOUNT . |
empmanager-src.onPremisesDistinguishedName | manager_role.type | Se gopher-manager estiver vazio e a parte da unidade organizacional do nome distinto do administrador contiver "Usuários", manager_role.type será definido como ADMINISTRATOR . Se ele contiver "Contas de serviço", o manager_role.type será definido como SERVICE_ACCOUNT . |
empmanager-src.userPrincipalName | manager_role.type | Se gopher-manager estiver vazio e empmanager-src.userPrincipalName começar com "svc-", manager_role.type será definido como SERVICE_ACCOUNT . |
carta | user_role.type | Se mail começar com "svc-", user_role.type será definido como SERVICE_ACCOUNT . |
Alterações
2024-04-29
- "officeLocation" foi mapeado para "entity.location.name".
- Mapeou "extension_wfc_groupDescription", "extension_wfc_execDescription", "extension_wfc_orgDescription", "extension_wfc_AccountingUnitName" e "extension_wfc_AccountType" para "entity.labels".
2024-05-02
Correção de bugs:
- Foram adicionadas verificações para o campo "accountEnabled" para analisar o valor correto no campo "entity.user.attribute.labels.value".
2024-03-14
- Mapeamos "onPremisesImmutableId" para "entity.user.attribute.labels".
- "gopher-manager.onPremisesImmutableId" foi mapeado para "entity.user.attribute.labels".
2024-01-12
Correção de bugs:
- O mapeamento "empmanager-src.usageLocation" mudou de "entity.user.personal_address.country_or_region" para "entity.user.attribute.labels".
2023-11-24
Melhoria
- O atributo "employeeType" foi mapeado para "entity.user.attribute.labels".
- Registros JSON malformados com a tag "TAG_MALFORMED_MESSAGE" foram descartados.
2023-10-25
Correção de bugs
- Foram adicionadas verificações de valores nulos e uma verificação "on_error" para valores ausentes.
2023-09-25
Melhoria
- A função de renomeação foi adicionada em vez de substituir para mapear "group.displayName" para "relation_entity.entity.group.group_display_name".
- "country" foi mapeado para "user.personal_address.country_or_region". Se "country" não estiver presente, mapeie "usageLocation" para "user.personal_address.country_or_region".
2023-02-09
Melhoria
- Adição de uma verificação de valor nulo antes do mapeamento de dados para o campo "onPremisesDistinguishedName".
- Adicionado gsub para extrair o endereço de e-mail do campo "proxyAddresses".
2023-01-23
- Mapeou "onPremisesExtensionAttributes.extensionAttribute4" para "entity.entity.user.attribute.labels" se "onPremisesExtensionAttributes.extensionAttribute4" for "Employee".
- Adição de gsub para "onPremisesDistinguishedName" para remover barras invertidas extras.
2022-12-15
Correção de bugs:
- "mailNickname" foi mapeado para "entity.user.attribute.labels".
- Mapeou apenas "country_n_code" para "user.manager.personal_address.country_or_region" se "empmanager-src.usageLocation" for nulo.
2022-09-19
- Correção de bugs:
- Mapeamos "entity.user.attribute.roles" para "ADMINISTRATOR", em que a OU inclui "Administrador"
2022-08-11
- "accountEnabled" foi associado a "user.attribute.labels".
2022-05-16
- Mapeamentos adicionados para os seguintes campos:
- "createdDateTime" mapeado para "entity.user.attribute.creation_time"
- "accountEnabled" mapeado para "entity.user.user_authentication_status"
2022-05-09
- Melhoria: campos mapeados que começam com extension_GUID_sbuxXXXXXXX para user.attribute.labels ou manager.attribute.labels, dependendo da ocorrência no registro.
2022-03-24
- Melhoria: adição de alguns campos ausentes
- onPremisesSamAccountName, onPremisesDomainName, onPremisesDistinguishedName mapeados para entity.user.attribute.labels.
- Para signInType, userPrincipalName é mapeado para entity.user.attribute.labels.