Coletar registros de contexto do Microsoft Azure AD
Neste documento, descrevemos como coletar registros do Microsoft Azure Active Directory (AD) configurando um feed do Google Security Operations.
O Azure Active Directory (AZURE_AD
) agora se chama Microsoft Entra ID. 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 no Google Security Operations.
Um rótulo de ingestão identifica o analisador que normaliza dados de registro brutos para o formato UDM estruturado.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Uma assinatura do Azure em que você pode fazer login
- Uma função de administrador global ou do Azure AD
- Um Azure AD (locatário) no Azure
Como configurar o Azure AD
- Faça login no portal do Azure.
- Acesse Página inicial > Registro de app, selecione um aplicativo registrado ou registre um se ainda não tiver criado um.
- Para registrar um aplicativo, na seção Registro do app, clique em Novo registro.
- No campo Nome, insira 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 (locatário), que são necessários para configurar o feed do Google Security Operations.
- Clique em Permissões da API.
- Clique em Adicionar uma permissão e selecione Microsoft Graph no novo painel.
- Clique em Permissões do aplicativo.
- Selecione as permissões AuditLog.Read.All, Directory.Read.All e SecurityEvents.Read.All. Verifique se as permissões são permissões de aplicativo 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 segredos.
- 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 feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds
- Central de conteúdo > Pacotes de conteúdo
Configure feeds em Configurações do SIEM > Feeds
Para configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.
Para configurar um único feed, siga estas etapas:
- 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, Registros de contexto do Azure AD.
- 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 feed por tipo. Se você tiver problemas ao criar feeds, entre em contato com o suporte do Google Security Operations.
Configurar feeds na Central de conteúdo
Especifique valores para os seguintes campos:
- 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.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Tipo de origem: método usado para coletar registros no Google SecOps.
- Namespace do recurso: namespace associado ao feed.
- Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
Referência de mapeamento de campos
Esse código de analisador transforma registros brutos formatados em JSON do Azure Active Directory em um modelo de dados unificado (UDM). Ele extrai informações de usuários e administradores, incluindo atributos, funções, relações e rótulos, além de processar 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á extraído de usageLocation . |
createdDateTime | user.attribute.creation_time | Convertido para um carimbo de data/hora do campo createdDateTime no registro bruto usando o formato RFC 3339. |
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á extraído de extension_employeeNumber . |
employeeType | user.attribute.labels.value (key: employeeType) | Mapeado diretamente do campo employeeType no registro bruto e adicionado como um rótulo 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 (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 (key: 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 como UNIDIRECTIONAL . |
gopher-groups | event.idm.entity.relations | Cada grupo na matriz gopher-groups é mapeado para uma entrada de relação separada. O id é mapeado para product_object_id , e o displayName é mapeado para group_display_name . A relação é definida como MEMBER e a direção 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 gopher-manager.country e gopher-manager.usageLocation estiverem vazios, o campo será deixado em branco. |
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. |
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. |
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 (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 | 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á mapeado para empmanager.email_addresses ou empmanager.group_identifiers , dependendo se ele começa com "smtp" ou "SMTP". |
gopher-manager.refreshTokensValidFromDateTime | empmanager.attribute.labels.value (key: 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 | 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 | 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 (key: signInType), user.attribute.labels.value (key: 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-", o 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 | 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 manager.country e manager.usageLocation estiverem vazios, o campo será deixado em branco. |
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. |
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. |
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 será mapeado para empmanager.email_addresses ou empmanager.group_identifiers , dependendo se ele começa com "smtp" ou "SMTP". |
manager.refreshTokensValidFromDateTime | empmanager.attribute.labels.value (key: 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 | 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 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 | 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 (key: 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 (key: onPremisesSamAccountName) | 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 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 restante do endereço de e-mail será extraído e mapeado para user.email_addresses . |
refreshTokensValidFromDateTime | user.attribute.labels.value (key: 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-", o 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 do 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 | Definido como o campo create_time do registro bruto. |
accountEnabled | user.user_authentication_status, user.attribute.labels.value (key: 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 (key: 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-", o user_role.type será definido como SERVICE_ACCOUNT . |
empmanager-src.onPremisesDistinguishedName | manager_role.type | Se gopher-manager estiver vazio e a parte da OU do nome distinto do gerente contiver "Users", 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-", o user_role.type será definido como SERVICE_ACCOUNT . |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.