收集 Microsoft Azure AD 上下文日志

支持的平台:

本文档介绍了如何通过设置 Google 安全运维 Feed 来收集 Microsoft Azure Active Directory (AD) 日志。

Azure Active Directory (AZURE_AD) 现已更名为 Microsoft Entra ID。Azure AD 审核日志 (AZURE_AD_AUDIT) 现已更名为 Microsoft Entra ID 审核日志。

如需了解详情,请参阅将数据提取到 Google 安全运营中心

注入标签标识将原始日志数据标准化为结构化 UDM 格式的解析器。

准备工作

如需完成本页中的任务,请确保您拥有以下各项:

  • 您可以登录的 Azure 订阅。
  • 全局管理员或 Azure AD 管理员角色。
  • Azure 中的 Azure AD(租户)。

配置 Azure AD

  1. 登录 Azure 门户。
  2. 依次前往首页 > 应用注册,选择已注册的应用,或者如果您尚未创建应用,则注册应用。
  3. 如需注册应用,请在应用注册部分中,点击新注册
  4. 名称字段中,提供应用的显示名称。
  5. Supported account types(支持的账号类型)部分,选择所需选项以指定哪些人可以使用该应用或访问该 API。
  6. 点击注册
  7. 前往概览页面,复制应用(客户端)ID 和目录(租户)ID,这些信息是配置 Google Security Operations Feed 所必需的。
  8. 点击 API 权限
  9. 点击添加权限,然后在新窗格中选择 Microsoft Graph
  10. 点击应用权限
  11. 选择 AuditLog.Read.AllDirectory.Read.AllSecurityEvents.Read.All 权限。确保权限是应用权限,而不是委托权限
  12. 点击为默认目录授予管理员同意书。在用户或管理员在意见征求流程中向应用授予权限后,应用便可以调用 API。
  13. 依次前往设置 > 管理
  14. 点击证书和 Secret
  15. 点击 New client secret(新建客户端密钥)。 Value 字段中会显示客户端密钥。
  16. 复制客户端密钥值。此值仅在创建时显示,并且是进行 Azure 应用注册和配置 Google 安全运营 Feed 所必需的。

在 Google Security Operations 中配置 Feed 以提取 Azure AD 上下文日志

  1. 依次选择 SIEM 设置 > Feed
  2. 点击新增
  3. Feed 名称输入一个具有唯一性的名称。
  4. 选择第三方 API 作为来源类型
  5. 选择 Azure AD Organizational Context 作为日志类型
  6. 点击下一步
  7. 配置以下必需的输入参数:
    • OAUTH 客户端 ID:指定您之前获取的客户端 ID。
    • OAUTH 客户端密钥:指定您之前获取的客户端密钥。
    • 租户 ID:指定您之前获得的租户 ID。
  8. 点击下一步,然后点击提交

如需详细了解 Google Security Operations Feed,请参阅 Google Security Operations Feed 文档。如需了解每种 Feed 类型的要求,请参阅按类型配置 Feed。如果您在创建 Feed 时遇到问题,请与 Google 安全运营支持团队联系

字段映射参考文档

此解析器代码会将 Azure Active Directory 中的原始 JSON 格式日志转换为统一数据模型 (UDM)。它会提取用户和经理信息(包括属性、角色、关系和标签),同时处理各种数据不一致问题,并使用标准化字段丰富输出。

UDM 映射表

日志字段 UDM 映射 逻辑
businessPhones user.phone_numbers 直接从原始日志中的 businessPhones 字段映射而来。系统会提取多个电话号码,并将其映射为单独的条目。
city user.personal_address.city 直接从原始日志中的 city 字段映射。
companyName user.company_name 直接从原始日志中的 companyName 字段映射。
国家/地区 user.personal_address.country_or_region 直接从原始日志中的 country 字段映射而来。如果 country 为空,则该值取自 usageLocation
createdDateTime user.attribute.creation_time 使用 RFC3339 格式将原始日志中的 createdDateTime 字段转换为时间戳。
部门 user.department 直接从原始日志中的 department 字段映射而来。系统会提取多个部门,并将其映射为单独的条目。
displayName user.user_display_name 直接从原始日志中的 displayName 字段映射。
employeeId user.employee_id 直接从原始日志中的 employeeId 字段映射而来。如果 employeeId 为空,则该值取自 extension_employeeNumber
employeeType user.attribute.labels.value(键:employeeType) 直接从原始日志中的 employeeType 字段映射,并作为键为 employeeType 的标签添加。
extension_employeeNumber user.employee_id 如果 employeeId 为空,则映射到 user.employee_id
extension_wfc_AccountType event.idm.entity.entity.labels.value(键:wfc_AccountType) 直接从原始日志中的 extension_wfc_AccountType 字段映射,并作为键为 wfc_AccountType 的标签添加。
extension_wfc_AccountingUnitName event.idm.entity.entity.labels.value(键:extension_wfc_AccountingUnitName) 直接从原始日志中的 extension_wfc_AccountingUnitName 字段映射,并作为键为 extension_wfc_AccountingUnitName 的标签添加。
extension_wfc_execDescription event.idm.entity.entity.labels.value(键:extension_wfc_execDescription) 直接从原始日志中的 extension_wfc_execDescription 字段映射,并作为键为 extension_wfc_execDescription 的标签添加。
extension_wfc_groupDescription event.idm.entity.entity.labels.value(键:extension_wfc_groupDescription) 直接从原始日志中的 extension_wfc_groupDescription 字段映射,并作为键为 extension_wfc_groupDescription 的标签添加。
extension_wfc_orgDescription event.idm.entity.entity.labels.value(键:extension_wfc_orgDescription) 直接从原始日志中的 extension_wfc_orgDescription 字段映射,并作为键为 extension_wfc_orgDescription 的标签添加。
givenName user.first_name 直接从原始日志中的 givenName 字段映射。
gopher-devices event.idm.entity.relations gopher-devices 数组中的每台设备都会映射到一个单独的关系条目。deviceId 映射到 product_object_idoperatingSystemoperatingSystemVersion 组合形成 platform_versionmodel 直接映射,createdDateTime 转换为时间戳并映射到 created_timestamp。将关系设置为 OWNS,并将方向设置为 UNIDIRECTIONAL
gopher-groups event.idm.entity.relations gopher-groups 数组中的每个组都会映射到单独的关系条目。id 会映射到 product_object_iddisplayName 会映射到 group_display_name。将关系设置为 MEMBER,并将方向设置为 UNIDIRECTIONAL
gopher-manager.businessPhones empmanager.phone_numbers 如果 manager 为空,则映射到 empmanager.phone_numbers
gopher-manager.country empmanager.personal_address.country_or_region 如果 manager 为空,则映射到 empmanager.personal_address.country_or_region。如果 gopher-manager.countrygopher-manager.usageLocation 均为空,则该字段会留空。
gopher-manager.department empmanager.department 如果 manager 为空,则映射到 empmanager.department
gopher-manager.displayName empmanager.user_display_name 如果 manager 为空,则映射到 empmanager.user_display_name
gopher-manager.employeeId empmanager.employee_id 如果 manager 为空且 gopher-manager.employeeId 不为空,则映射到 empmanager.employee_id
gopher-manager.extension_employeeNumber empmanager.employee_id 如果 managergopher-manager.employeeId 为空,而 gopher-manager.extension_employeeNumber 不为空,则映射到 empmanager.employee_id
gopher-manager.givenName empmanager.first_name 如果 manager 为空,则映射到 empmanager.first_name
gopher-manager.id empmanager.product_object_id 如果 manager 为空,则映射到 empmanager.product_object_id
gopher-manager.jobTitle empmanager.title 如果 manager 为空,则映射到 empmanager.title
gopher-manager.mail empmanager.email_addresses 如果 manager 为空,则映射到 empmanager.email_addresses
gopher-manager.onPremisesImmutableId user.attribute.labels.value(键:gopher-manager onPremisesImmutableId) 映射为键为 gopher-manager onPremisesImmutableId 的标签。
gopher-manager.onPremisesSamAccountName empmanager.userid 如果 manager 为空,则映射到 empmanager.userid
gopher-manager.onPremisesSecurityIdentifier empmanager.windows_sid 如果 manager 为空,则映射到 empmanager.windows_sid
gopher-manager.proxyAddresses empmanager.email_addresses, empmanager.group_identifiers 如果 manager 为空,则 gopher-manager.proxyAddresses 数组中的每个地址都会映射到 empmanager.email_addressesempmanager.group_identifiers,具体取决于其是以“smtp”还是“SMTP”开头。
gopher-manager.refreshTokensValidFromDateTime empmanager.attribute.labels.value(键:refreshTokensValidFromDateTime) 如果 manager 为空,则映射为键为 refreshTokensValidFromDateTime 的标签。
gopher-manager.streetAddress empmanager.personal_address.name 如果 manager 为空,则映射到 empmanager.personal_address.name
gopher-manager.surname empmanager.last_name 如果 manager 为空,则映射到 empmanager.last_name
gopher-manager.usageLocation user.attribute.labels.value(键:manager_src_usageLocation) 映射为键为 manager_src_usageLocation 的标签。
gopher-manager.userType empmanager.attribute.roles.name 如果 manager 为空,则映射到 empmanager.attribute.roles.name
id user.product_object_id 直接从原始日志中的 id 字段映射。
身份 user.attribute.labels.value(键:signInType)、user.attribute.labels.value(键:userPrincipalName) signInType 会映射为键为 signInType 的标签。如果 signInTypeuserPrincipalName 不为空,则会合并并映射为键为 userPrincipalName 的标签。
jobTitle user.title 直接从原始日志中的 jobTitle 字段映射。
mail user.email_addresses 直接从原始日志中的 mail 字段映射而来。如果 mail 以“svc-”开头,则 user_role.type 会设为 SERVICE_ACCOUNT
mailNickname user.attribute.labels.value(键:mailNickname) 直接从原始日志中的 mailNickname 字段映射,并作为键为 mailNickname 的标签添加。
manager.businessPhones empmanager.phone_numbers 如果 gopher-manager 为空,则映射到 empmanager.phone_numbers
manager.city empmanager.personal_address.city 如果 gopher-manager 为空,则映射到 empmanager.personal_address.city
manager.companyName empmanager.company_name 如果 gopher-manager 为空,则映射到 empmanager.company_name
manager.country empmanager.personal_address.country_or_region 如果 gopher-manager 为空,则映射到 empmanager.personal_address.country_or_region。如果 manager.countrymanager.usageLocation 均为空,则该字段会留空。
manager.department empmanager.department 如果 gopher-manager 为空,则映射到 empmanager.department
manager.displayName empmanager.user_display_name 如果 gopher-manager 为空,则映射到 empmanager.user_display_name
manager.employeeId empmanager.employee_id 如果 gopher-manager 为空且 manager.employeeId 不为空,则映射到 empmanager.employee_id
manager.extension_employeeNumber empmanager.employee_id 如果 gopher-managermanager.employeeId 为空,而 manager.extension_employeeNumber 不为空,则映射到 empmanager.employee_id
manager.givenName empmanager.first_name 如果 gopher-manager 为空,则映射到 empmanager.first_name
manager.id empmanager.product_object_id 如果 gopher-manager 为空,则映射到 empmanager.product_object_id
manager.jobTitle empmanager.title 如果 gopher-manager 为空,则映射到 empmanager.title
manager.mail empmanager.email_addresses 如果 gopher-manager 为空,则映射到 empmanager.email_addresses
manager.onPremisesSamAccountName empmanager.userid 如果 gopher-manager 为空,则映射到 empmanager.userid
manager.onPremisesSecurityIdentifier empmanager.windows_sid 如果 gopher-manager 为空,则映射到 empmanager.windows_sid
manager.proxyAddresses empmanager.email_addresses, empmanager.group_identifiers 如果 gopher-manager 为空,则 manager.proxyAddresses 数组中的每个地址都会映射到 empmanager.email_addressesempmanager.group_identifiers,具体取决于其是否以“smtp”或“SMTP”开头。
manager.refreshTokensValidFromDateTime empmanager.attribute.labels.value(键:refreshTokensValidFromDateTime) 如果 gopher-manager 为空,则映射为键为 refreshTokensValidFromDateTime 的标签。
manager.state empmanager.personal_address.state 如果 gopher-manager 为空,则映射到 empmanager.personal_address.state
manager.streetAddress empmanager.personal_address.name 如果 gopher-manager 为空,则映射到 empmanager.personal_address.name
manager.surname empmanager.last_name 如果 gopher-manager 为空,则映射到 empmanager.last_name
manager.usageLocation user.attribute.labels.value(键:manager_src_usageLocation)、empmanager.personal_address.country_or_region 映射为键为 manager_src_usageLocation 的标签。如果 manager.country 为空,则该值也会映射到 empmanager.personal_address.country_or_region
manager.userType empmanager.attribute.roles.name 如果 gopher-manager 为空,则映射到 empmanager.attribute.roles.name
onPremisesDistinguishedName user.attribute.labels.value(键:onPremisesDistinguishedName),user.attribute.labels.value(键:onPremisesDistinguishedName-OU 数据) 完整标识名会映射为键值为 onPremisesDistinguishedName 的标签。系统会提取标识名的组织部门部分,并将其映射为键为 onPremisesDistinguishedName-OU data 的标签。如果 OU 部分包含“Admin”,则 user_role.type 会设置为 ADMINISTRATOR。如果它包含“服务账号”,则 user_role.type 会设为 SERVICE_ACCOUNT
onPremisesDomainName user.group_identifiers、user.attribute.labels.value(键:onPremisesDomainName) 直接映射到 user.group_identifiers,并作为键为 onPremisesDomainName 的标签添加。
onPremisesImmutableId user.attribute.labels.value(键:onPremisesImmutableId) 直接从原始日志中的 onPremisesImmutableId 字段映射,并作为键为 onPremisesImmutableId 的标签添加。
onPremisesSamAccountName user.userid、user.attribute.labels.value(键:onPremisesSamAccountName) 如果 sAMAccountName 为空,则映射到 user.userid。还会作为键为 onPremisesSamAccountName 的标签添加。
onPremisesSecurityIdentifier user.windows_sid 直接从原始日志中的 onPremisesSecurityIdentifier 字段映射。
proxyAddresses user.email_addresses、user.group_identifiers proxyAddresses 数组中的每个地址都会映射到 user.email_addressesuser.group_identifiers,具体取决于其是以“smtp”还是“SMTP”开头。如果地址以“smtp”或“SMTP”开头,系统会移除“smtp:”或“SMTP:”前缀,并提取剩余的电子邮件地址并将其映射到 user.email_addresses
refreshTokensValidFromDateTime user.attribute.labels.value(键:refreshTokensValidFromDateTime) 直接从原始日志中的 refreshTokensValidFromDateTime 字段映射,并作为键为 refreshTokensValidFromDateTime 的标签添加。
sAMAccountName user.userid 直接从原始日志中的 sAMAccountName 字段映射。
state user.personal_address.state 直接从原始日志中的 state 字段映射。
streetAddress user.personal_address.name 直接从原始日志中的 streetAddress 字段映射。
surname user.last_name 直接从原始日志中的 surname 字段映射。
usageLocation user.personal_address.country_or_region 如果 country 为空,则该值会映射到 user.personal_address.country_or_region
userPrincipalName user.email_addresses 直接从原始日志中的 userPrincipalName 字段映射而来。如果 userPrincipalName 以“svc-”开头,则 user_role.type 会设为 SERVICE_ACCOUNT
userType user.attribute.roles.name 直接从原始日志中的 userType 字段映射并添加到 user.attribute.roles.name
解析器逻辑 UDM 映射 逻辑
不适用 event.idm.entity.metadata.vendor_name 设置为“Microsoft”。
不适用 event.idm.entity.metadata.product_name 设置为“Azure Active Directory”。
不适用 event.idm.entity.metadata.entity_type 设置为“USER”。
不适用 event.idm.entity.metadata.collected_timestamp 设置为原始日志中的 create_time 字段。
accountEnabled user.user_authentication_status、user.attribute.labels.value(键:accountEnabled) 如果 accountEnabled 为 true,则 user.user_authentication_status 会设为“ACTIVE”,并添加键为 accountEnabled 且值为“true”的标签。否则,系统会添加键为 accountEnabled 且值为“false”的标签。
empmanager-src.accountEnabled user.user_authentication_status、user.attribute.labels.value(键:accountEnabled) 如果 manager 为空且 empmanager-src.accountEnabled 为“true”,则 user.user_authentication_status 会设为“ACTIVE”,并添加一个键为 accountEnabled 且值为“true”的标签。否则,系统会添加键为 accountEnabled 且值为“false”的标签。
onPremisesDistinguishedName user_role.type 如果标识名的 OU 部分包含“Admin”,则 user_role.type 会设为 ADMINISTRATOR。如果它包含“服务账号”,则 user_role.type 会设为 SERVICE_ACCOUNT
userPrincipalName user_role.type 如果 userPrincipalName 以“svc-”开头,则 user_role.type 会设为 SERVICE_ACCOUNT
empmanager-src.onPremisesDistinguishedName manager_role.type 如果 gopher-manager 为空,并且经理标识名的 OU 部分包含“Users”,则 manager_role.type 会设为 ADMINISTRATOR。如果它包含“服务账号”,则 manager_role.type 会设为 SERVICE_ACCOUNT
empmanager-src.userPrincipalName manager_role.type 如果 gopher-manager 为空且 empmanager-src.userPrincipalName 以“svc-”开头,则 manager_role.type 会设为 SERVICE_ACCOUNT
mail user_role.type 如果 mail 以“svc-”开头,则 user_role.type 会设为 SERVICE_ACCOUNT

变化

2024-04-29

  • 将“officeLocation”映射到“entity.location.name”。
  • 将“extension_wfc_groupDescription”“extension_wfc_execDescription”“extension_wfc_orgDescription”“extension_wfc_AccountingUnitName”和“extension_wfc_AccountType”映射到“entity.labels”。

2024-05-02

bug 修复:

  • 添加了对“accountEnabled”字段的检查,以将正确的值解析为“entity.user.attribute.labels.value”字段。

2024-03-14

  • 将“onPremisesImmutableId”映射到“entity.user.attribute.labels”。
  • 将“gopher-manager.onPremisesImmutableId”映射到“entity.user.attribute.labels”。

2024-01-12

bug 修复:

  • 将“empmanager-src.usageLocation”映射从“entity.user.personal_address.country_or_region”更改为“entity.user.attribute.labels”。

2023-11-24

改进

  • 将“employeeType”属性映射到“entity.user.attribute.labels”。
  • 丢弃了标记为“TAG_MALFORMED_MESSAGE”的格式有误的 JSON 日志。

2023-10-25

bug 修复

  • 添加了 null 检查和针对缺失值的“on_error”检查。

2023-09-25

改进

  • 添加了重命名函数(而非替换函数),用于将“group.displayName”映射到“relation_entity.entity.group.group_display_name”。
  • 将“country”映射到“user.personal_address.country_or_region”。如果不存在“country”,则将“usageLocation”映射到“user.personal_address.country_or_region”。

2023-02-09

改进

  • 在为“onPremisesDistinguishedName”字段映射数据之前添加了 null 检查。
  • 添加了 gsub,用于从“proxyAddresses”字段中提取电子邮件地址。

2023-01-23

  • 如果“onPremisesExtensionAttributes.extensionAttribute4”为“Employee”,则将“onPremisesExtensionAttributes.extensionAttribute4”映射到“entity.entity.user.attribute.labels”。
  • 为“onPremisesDistinguishedName”添加了 gsub,以移除多余的反斜线。

2022-12-15

bug 修复:

  • 将“mailNickname”映射到“entity.user.attribute.labels”。
  • 如果“empmanager-src.usageLocation”为 null,则仅将“country_n_code”映射到“user.manager.personal_address.country_or_region”。

2022-09-19

  • bug 修复:
  • 将“entity.user.attribute.roles”映射到“ADMINISTRATOR”,其中 OU 包含“Admin”

2022-08-11

  • 将“accountEnabled”映射到“user.attribute.labels”

2022-05-16

  • 添加了以下字段的映射:
  • “createdDateTime”映射到“entity.user.attribute.creation_time”
  • “accountEnabled”已映射到“entity.user.user_authentication_status”

2022-05-09

  • 增强功能 - 将以 extension_GUID_sbuxXXXXXXX 开头的字段映射到 user.attribute.labels 或 manager.attribute.labels,具体取决于其在日志中的出现位置。

2022-03-24

  • 增强功能 - 添加了一些缺失的字段
  • onPremisesSamAccountName、onPremisesDomainName、onPremisesDistinguishedName 已映射到 entity.user.attribute.labels。
  • 对于 signInType,userPrincipalName 已映射到 entity.user.attribute.labels。

需要更多帮助?向社区成员和 Google SecOps 专业人士寻求解答。