收集 Microsoft Azure AD 內容記錄
本文說明如何設定 Google Security Operations 動態饋給,收集 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 動態饋給時所需。
- 按一下「API 權限」。
- 按一下「新增權限」,然後在新的窗格中選取「Microsoft Graph」。
- 按一下「應用程式權限」。
- 選取「AuditLog.Read.All」、「Directory.Read.All」和「SecurityEvents.Read.All」權限。請確認權限為「應用程式權限」,而非「委派權限」。
- 按一下「Grant admin consent for default directory」。在同意程序中,如果使用者或管理員授予應用程式權限,則應用程式可呼叫 API。
- 依序前往「設定」>「管理」。
- 按一下「憑證和密鑰」。
- 按一下「New client secret」。在「Value」欄位中,會顯示用戶端密碼。
- 複製用戶端密鑰值。這個值只會在建立時顯示,而且是註冊 Azure 應用程式和設定 Google Security Operations 動態饋給的必要條件。
設定動態饋給
在 Google SecOps 平台中,有兩個不同的入口可用來設定動態消息:
- SIEM 設定 > 動態饋給
- 內容中心 > 內容包
依序前往「SIEM 設定」>「動態」設定動態
如要針對這個產品系列中的不同記錄類型設定多個動態饋給,請參閱「依產品設定動態饋給」。
如要設定單一動態饋給,請按照下列步驟操作:
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在下一頁中,按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給的名稱,例如「Azure AD 內容記錄」。
- 將「來源類型」設為「第三方 API」。
- 選取「Azure AD 組織內容」做為「記錄類型」。
- 點選「下一步」。
- 設定下列必要輸入參數:
- OAuth 用戶端 ID:指定您先前取得的用戶端 ID。
- OAuth 用戶端密鑰:指定先前取得的用戶端密鑰。
- 用戶群 ID:指定先前取得的用戶群 ID。
- 依序點選「下一步」和「提交」。
如要進一步瞭解 Google Security Operations 動態饋給,請參閱 Google Security Operations 動態饋給說明文件。如要瞭解各個動態饋給類型的規定,請參閱「依類型分類的動態饋給設定」。如果在建立動態饋給時遇到問題,請與 Google 安全作業支援團隊聯絡。
透過內容中心設定動態饋給
指定下列欄位的值:
- OAuth 用戶端 ID:指定您先前取得的用戶端 ID。
- OAuth 用戶端密鑰:指定先前取得的用戶端密鑰。
- 用戶群 ID:指定先前取得的用戶群 ID。
進階選項
- 動態饋給名稱:預先填入的值,用於識別動態饋給。
- 來源類型:用於收集記錄並匯入 Google SecOps 的方法。
- 資產命名空間:與動態饋給相關聯的命名空間。
- 攝入標籤:套用至這個動態饋給中所有事件的標籤。
欄位對應參考資料
這個剖析器程式碼會將 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 (key: employeeType) | 直接從原始記錄中的 employeeType 欄位對應,並以 employeeType 鍵新增為標籤。 |
extension_employeeNumber | user.employee_id | 如果 employeeId 為空白,就會對應至 user.employee_id 。 |
extension_wfc_AccountType | event.idm.entity.entity.labels.value (key: wfc_AccountType) | 直接從原始記錄中的 extension_wfc_AccountType 欄位對應,並以 wfc_AccountType 鍵新增為標籤。 |
extension_wfc_AccountingUnitName | event.idm.entity.entity.labels.value (key: extension_wfc_AccountingUnitName) | 直接從原始記錄中的 extension_wfc_AccountingUnitName 欄位對應,並以 extension_wfc_AccountingUnitName 鍵新增為標籤。 |
extension_wfc_execDescription | event.idm.entity.entity.labels.value (key: extension_wfc_execDescription) | 直接從原始記錄中的 extension_wfc_execDescription 欄位對應,並以 extension_wfc_execDescription 鍵新增為標籤。 |
extension_wfc_groupDescription | event.idm.entity.entity.labels.value (key: extension_wfc_groupDescription) | 直接從原始記錄中的 extension_wfc_groupDescription 欄位對應,並以 extension_wfc_groupDescription 鍵新增為標籤。 |
extension_wfc_orgDescription | event.idm.entity.entity.labels.value (key: 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 (key: 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 (key: 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 (key: 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 (key: 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 (key: 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 (key: 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 做為索引鍵。系統會擷取專屬名稱的 OU 部分,並將其對應為標籤,並使用 onPremisesDistinguishedName-OU data 做為鍵。如果 OU 部分包含「Admin」,user_role.type 會設為 ADMINISTRATOR 。如果包含「Service Accounts」,user_role.type 會設為 SERVICE_ACCOUNT 。 |
onPremisesDomainName | user.group_identifiers、user.attribute.labels.value (鍵:onPremisesDomainName) | 直接對應至 user.group_identifiers ,並以 onPremisesDomainName 鍵新增為標籤。 |
onPremisesImmutableId | user.attribute.labels.value (key: onPremisesImmutableId) | 直接從原始記錄中的 onPremisesImmutableId 欄位對應,並以 onPremisesImmutableId 鍵新增為標籤。 |
onPremisesSamAccountName | user.userid, user.attribute.labels.value (key: onPremisesSamAccountName) | 如果 sAMAccountName 為空白,就會對應至 user.userid 。並以鍵 onPremisesSamAccountName 的形式新增為標籤。 |
onPremisesSecurityIdentifier | user.windows_sid | 直接從原始記錄中的 onPremisesSecurityIdentifier 欄位對應。 |
proxyAddresses | user.email_addresses, user.group_identifiers | proxyAddresses 陣列中的每個地址會根據開頭是否為「smtp」或「SMTP」對應至 user.email_addresses 或 user.group_identifiers 。如果地址開頭為「smtp」或「SMTP」,系統會移除「smtp:」或「SMTP:」前置字串,並擷取剩餘的電子郵件地址,然後對應至 user.email_addresses 。 |
refreshTokensValidFromDateTime | user.attribute.labels.value (key: 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 (key: accountEnabled) | 如果 accountEnabled 為 true,user.user_authentication_status 就會設為「ACTIVE」,並新增標籤,其中鍵為 accountEnabled ,值為「true」。否則,系統會新增標籤,其中鍵為 accountEnabled ,值為「false」。 |
empmanager-src.accountEnabled | user.user_authentication_status, user.attribute.labels.value (key: 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 。如果包含「Service Accounts」,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 。如果包含「Service Accounts」,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 。 |
異動
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
修正錯誤:
- 新增了對「accountEnabled」欄位的檢查,以便將正確值剖析至「entity.user.attribute.labels.value」欄位。
2024-03-14
- 將「onPremisesImmutableId」對應至「entity.user.attribute.labels」。
- 將「gopher-manager.onPremisesImmutableId」對應至「entity.user.attribute.labels」。
2024-01-12
修正錯誤:
- 將「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
修正錯誤
- 新增空值檢查和「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」欄位資料前,新增空值檢查。
- 新增 gsub,從「proxyAddresses」欄位擷取電子郵件地址。
2023-01-23
- 如果「onPremisesExtensionAttributes.extensionAttribute4」是「Employee」,則會將「onPremisesExtensionAttributes.extensionAttribute4」對應至「entity.entity.user.attribute.labels」。
- 新增「onPremisesDistinguishedName」的 gsub,以移除多餘的反斜線。
2022-12-15
修正錯誤:
- 將「mailNickname」對應至「entity.user.attribute.labels」。
- 如果「empmanager-src.usageLocation」為空值,則只會將「country_n_code」對應至「user.manager.personal_address.country_or_region」。
2022-09-19
- 修正錯誤:
- 將「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 專家尋求解答。