收集 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
- 登录 Azure 门户。
- 前往首页 > 应用注册,选择已注册的应用,或者如果您尚未创建应用,请注册应用。
- 如需注册应用,请在应用注册部分点击新注册。
- 在名称字段中,提供应用的显示名称。
- 在支持的账号类型部分,选择所需选项以指定哪些人可以使用应用或访问 API。
- 点击注册。
- 前往概览页面,然后复制应用(客户端)ID 和目录(租户)ID,这些信息是配置 Google Security Operations Feed 所必需的。
- 点击 API 权限。
- 点击添加权限,然后在新窗格中选择 Microsoft Graph。
- 点击应用权限。
- 选择 AuditLog.Read.All、Directory.Read.All 和 SecurityEvents.Read.All 权限。确保权限是应用权限,而不是委托权限。
- 点击为默认目录授予管理员同意书。当应用在许可流程中获得用户或管理员授予的权限时,便有权调用 API。
- 依次前往设置 > 管理。
- 点击证书和密钥。
- 点击 New client secret(新建客户端密钥)。 在值字段中,系统会显示客户端密钥。
- 复制客户端密钥值。该值仅在创建时显示,并且是 Azure 应用注册和配置 Google Security Operations Feed 所必需的。
设置 Feed
您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:
- SIEM 设置 > Feed
- 内容中心 > 内容包
通过“SIEM 设置”>“Feed”设置 Feed
如需为相应产品系列中的不同日志类型配置多个 Feed,请参阅按产品配置 Feed。
如需配置单个 Feed,请按以下步骤操作:
- 依次前往 SIEM 设置> Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称,例如 Azure AD 上下文日志。
- 选择第三方 API 作为来源类型。
- 选择 Azure AD Organizational Context 作为日志类型。
- 点击下一步。
- 配置以下必需的输入参数:
- OAuth 客户端 ID:指定您之前获得的客户端 ID。
- OAuth 客户端密钥:指定您之前获得的客户端密钥。
- 租户 ID:指定您之前获得的租户 ID。
- 点击下一步,然后点击提交。
如需详细了解 Google Security Operations Feed,请参阅 Google Security Operations Feed 文档。如需了解每种 Feed 类型的要求,请参阅按类型划分的 Feed 配置。 如果您在创建 Feed 时遇到问题,请与 Google 安全运营支持团队联系。
设置来自内容中心的 Feed
为以下字段指定值:
- OAuth 客户端 ID:指定您之前获得的客户端 ID。
- OAuth 客户端密钥:指定您之前获得的客户端密钥。
- 租户 ID:指定您之前获得的租户 ID。
高级选项
- Feed 名称:用于标识 Feed 的预填充值。
- 来源类型:用于将日志收集到 Google SecOps 中的方法。
- 资产命名空间:与 Feed 关联的命名空间。
- 提取标签:应用于相应 Feed 中所有事件的标签。
字段映射参考
此解析器代码可将 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_id ,operatingSystem 和 operatingSystemVersion 组合形成 platform_version ,model 直接映射,createdDateTime 转换为时间戳并映射到 created_timestamp 。关系设置为 OWNS ,方向设置为 UNIDIRECTIONAL 。 |
gopher-groups | event.idm.entity.relations | gopher-groups 数组中的每个组都映射到一个单独的关系条目。id 映射到 product_object_id ,displayName 映射到 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.country 和 gopher-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 | 如果 manager 和 gopher-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_addresses 或 empmanager.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 的标签。如果 signInType 和 userPrincipalName 不为空,则将它们合并并映射为键为 userPrincipalName 的标签。 |
jobTitle | user.title | 直接从原始日志中的 jobTitle 字段映射。 |
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.country 和 manager.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-manager 和 manager.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_addresses 或 empmanager.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_addresses 或 user.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 。 |
user_role.type | 如果 mail 以“svc-”开头,则 user_role.type 会设置为 SERVICE_ACCOUNT 。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。