收集 Microsoft Azure AD Context 日志

支持的语言:

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

Azure Active Directory (AZURE_AD) 现在称为 Microsoft Entra ID。Azure AD 审核日志 (AZURE_AD_AUDIT) 现在称为 Microsoft Entra ID 审核日志。

如需了解详情,请参阅将数据注入 Google Security Operations

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

准备工作

确保您满足以下前提条件:

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

如何配置 Azure AD

  1. 登录 Azure 门户。
  2. 前往首页 > 应用注册,选择已注册的应用,或者如果您尚未创建应用,请注册应用。
  3. 如需注册应用,请在应用注册部分中点击新注册
  4. 名称字段中,提供应用的显示名称。
  5. 支持的账号类型部分,选择所需选项以指定哪些人可以使用应用或访问 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. 点击证书和密钥
  15. 点击 New client secret(新建客户端密钥)。 在字段中,系统会显示客户端密钥。
  16. 复制客户端密钥值。该值仅在创建时显示,并且是 Azure 应用注册和配置 Google Security Operations Feed 所必需的。

设置 Feed

您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:

  • SIEM 设置 > Feed > 添加新 Feed
  • 内容中心 > 内容包 > 开始

如何设置 Microsoft Azure AD Context Feed

  1. 点击 Azure 平台包。
  2. 找到 Azure AD Organizational Context 日志类型。
  3. 为以下字段指定值:

    • 来源类型:第三方 API(推荐)
    • OAuth 客户端 ID:指定您之前获得的客户端 ID。
    • OAuth 客户端密钥:指定您之前获得的客户端密钥。
    • 租户 ID:指定您之前获得的租户 ID。
    • 检索设备:是否在用户上下文中检索设备信息。
    • 检索群组:是否在用户上下文中检索群组成员资格信息。
    • API 完整路径:Microsoft Graph REST API 端点网址。
    • API 身份验证端点:Microsoft Active Directory 身份验证端点。

    高级选项

    • Feed 名称:用于标识 Feed 的预填充值。
    • 资产命名空间与 Feed 关联的命名空间
    • 提取标签:应用于相应 Feed 中所有事件的标签。
  4. 点击创建 Feed

如需详细了解如何为相应产品系列中的不同日志类型配置多个 Feed,请参阅按产品配置 Feed

如需详细了解 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 使用 RFC 3339 格式从原始日志的 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 数组中的每个地址都会根据其是否以“smtp”或“SMTP”开头映射到 empmanager.email_addressesempmanager.group_identifiers
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 数组中的每个地址都会根据其是否以“smtp”或“SMTP”开头映射到 empmanager.email_addressesempmanager.group_identifiers
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 如果标识名的组织单位部分包含“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

需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。