收集 Okta 使用者情境記錄
本文說明如何使用第三方 API 設定 Google Security Operations 資訊提供,藉此收集 Okta 使用者環境記錄。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- Okta 租戶或管理控制台的特殊存取權
- Okta 中的 API 權杖建立權限
設定 IP 許可清單
建立動態饋給前,請先在 Okta 防火牆或網路設定中,將 Google SecOps IP 範圍加入允許清單。
取得 Google SecOps IP 範圍
- 從 Google IP 位址範圍 JSON 檔案擷取 IP 範圍。
將 IP 範圍新增至 Okta 使用者情境
- 登入 Okta 管理控制台。
- 依序前往「安全性」>「網路」。
- 在「IP 位址限制」下方,按一下「編輯」。
- 以 CIDR 標記法將每個 Google SecOps IP 範圍新增至信任的 IP 位址。
- 按一下 [儲存]。
設定 Okta User Context API 存取權
如要讓 Google SecOps 擷取使用者環境資料,請建立具備讀取權限的 API 權杖。
建立 API 權杖
- 登入 Okta 管理控制台。
- 依序前往「安全性」>「API」。
- 選取「權杖」分頁標籤。
- 按一下「建立權杖」。
- 請提供下列設定詳細資料:
- 名稱:輸入描述性名稱 (例如
Google SecOps Integration)。 - 說明 (選填):輸入說明。
- 名稱:輸入描述性名稱 (例如
- 按一下「建立權杖」。
記錄 API 憑證
建立 API 權杖後,您會收到下列憑證:
- API 權杖:您的 API 權杖值 (例如
00QCGr-1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1)
必要的 API 權限
API 權杖必須在 Okta 中具備下列權限:
| 權限/角色 | 存取層級 | 目的 |
|---|---|---|
| 唯讀管理員 | 讀取 | 存取使用者個人資料 |
| 超級管理員 | 讀取 | 完整存取所有使用者資料 |
設定動態饋給
如要設定動態消息,請按照下列步驟操作:
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Okta User Context)。 - 選取「第三方 API」做為「來源類型」。
- 選取「Okta 使用者環境」做為「記錄類型」。
- 點選「下一步」。
指定下列輸入參數的值:
驗證 HTTP 標頭:輸入驗證憑證,格式如下:
Authorization:SSWS your-api-token- 例如:
Authorization:SSWS 00QCGr-1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1
- 例如:
API 主機名稱:Okta 執行個體的完整網域名稱 (例如 example.okta.com,而非任何可能設定的自訂網域)。
- 例如:
company.okta.com
- 例如:
管理員 ID 參照欄位:使用非 Okta ID 參照管理員時的必要 ID (選用)。
資產命名空間:資產命名空間。
擷取標籤:要套用至這個動態饋給事件的標籤。
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
設定完成後,動態消息就會開始依時間順序從 Okta 使用者環境例項擷取記錄。
地區端點
Okta 會根據貴機構的所在區域,使用不同的 API 端點:
| 區域 | 基準網址 / 主機名稱 |
|---|---|
| 美國 (預設) | {org-name}.okta.com |
| 歐盟 (歐洲、中東和非洲地區) | {org-name}.okta-emea.com |
| 亞太地區 | {org-name}.okta.com.au |
| 預覽 (測試) | {org-name}.oktapreview.com |
請使用與 Okta 執行個體區域對應的主機名稱。
API 頻率限制
Okta API 的頻率限制如下:
- 預設頻率限制:大多數端點每分鐘 600 項要求
- 系統記錄 API:每分鐘 60 項要求
- 使用者端點:每分鐘 600 個要求
Google SecOps 會自動以指數輪詢方式處理頻率限制。如有問題,請與 Okta 支援團隊聯絡,提高 API 上限。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
activated |
event.idm.entity.entity.labels |
如果存在 activated,系統會將其值新增為鍵/值組合,並以「activated」做為鍵。 |
created |
event.idm.entity.entity.labels |
如果 created 存在,系統會將其值新增為鍵/值組合,並以「created」做為鍵。 |
profile.costCenter |
event.idm.entity.entity.labels |
如果 profile.costCenter 存在,系統會將其值新增為鍵/值組合,並以「costCenter」做為鍵。 |
profile.Function |
event.idm.entity.entity.labels |
如果 profile.Function 存在,系統會將其值新增為鍵/值組合,並以「Function」做為鍵。 |
statusChanged |
event.idm.entity.entity.labels |
如果 statusChanged 存在,系統會將其值新增為鍵/值組合,並以「statusChanged」做為鍵。 |
type.id |
event.idm.entity.entity.labels |
如果 type.id 存在,系統會將其值新增為鍵/值組合,並以「type_id」做為鍵。 |
profile.location |
event.idm.entity.entity.location.name |
取自 profile.location 的值。 |
profile.AD_ObjectGUID |
event.idm.entity.entity.user.attribute.labels |
如果 profile.AD_ObjectGUID 存在,系統會將其值新增為鍵/值組合,並以「AD_ObjectGUID」做為鍵。 |
profile.ADpwdLastSet |
event.idm.entity.entity.user.attribute.labels |
如果 profile.ADpwdLastSet 存在,系統會將其值新增為鍵/值組合,並以「ADpwdLastSet」做為鍵。 |
profile.AFF_Code |
event.idm.entity.entity.user.attribute.labels |
如果 profile.AFF_Code 存在,系統會將其值新增為鍵/值組合,並以「AFF_Code」做為鍵。 |
profile.Desk_Location_WD |
event.idm.entity.entity.user.attribute.labels |
如果 profile.Desk_Location_WD 存在,系統會將其值新增為鍵/值組合,並以「Desk_Location_WD」做為鍵。 |
profile.Mailing_Address_WD |
event.idm.entity.entity.user.attribute.labels |
如果 profile.Mailing_Address_WD 存在,系統會將其值新增為鍵/值組合,並以「Mailing_Address_WD」做為鍵。 |
profile.Manager_UPN |
event.idm.entity.entity.user.attribute.labels |
如果 profile.Manager_UPN 存在,系統會將其值新增為鍵/值組合,並以「Manager_UPN」做為鍵。 |
profile.PRIVATE_CONF_Profile |
event.idm.entity.entity.user.attribute.labels |
如果 profile.PRIVATE_CONF_Profile 存在,系統會將其值新增為鍵/值組合,並以「PRIVATE_CONF_Profile」做為鍵。 |
profile.Region_WD |
event.idm.entity.entity.user.attribute.labels |
如果 profile.Region_WD 存在,系統會將其值新增為鍵/值組合,並以「Region_WD」做為鍵。 |
profile.Subsidiary_Company |
event.idm.entity.entity.user.attribute.labels |
如果存在 profile.Subsidiary_Company,系統會將其值新增為鍵/值組合,並以「Subsidiary_Company」做為鍵。 |
profile.Telephone_Work |
event.idm.entity.entity.user.attribute.labels |
如果 profile.Telephone_Work 存在,系統會將其值新增為鍵/值組合,並以「Telephone_Work」做為鍵。 |
profile.Temp_WD_Primary_Email |
event.idm.entity.entity.user.attribute.labels |
如果 profile.Temp_WD_Primary_Email 存在,系統會將其值新增為鍵/值組合,並以「Temp_WD_Primary_Email」做為鍵。 |
profile.VMware_WS1_Username |
event.idm.entity.entity.user.attribute.labels |
如果 profile.VMware_WS1_Username 存在,系統會將其值新增為鍵/值組合,並以「VMware_WS1_Username」做為鍵。 |
profile.Work_Street_Address_WD |
event.idm.entity.entity.user.attribute.labels |
如果 profile.Work_Street_Address_WD 存在,系統會將其值新增為鍵/值組合,並以「Work_Street_Address_WD」做為鍵。 |
profile.Workato_WD_Primary_Email |
event.idm.entity.entity.user.attribute.labels |
如果 profile.Workato_WD_Primary_Email 存在,系統會將其值新增為鍵/值組合,並以「Workato_WD_Primary_Email」做為鍵。 |
profile.Workday_ID |
event.idm.entity.entity.user.attribute.labels |
如果 profile.Workday_ID 存在,系統會將其值新增為鍵/值組合,並以「Workday_ID」做為鍵。 |
profile.Worker_Type_WD |
event.idm.entity.entity.user.attribute.labels |
如果 profile.Worker_Type_WD 存在,系統會將其值新增為鍵/值組合,並以「Worker_Type_WD」做為鍵。 |
profile.businessUnit |
event.idm.entity.entity.user.attribute.labels |
如果 profile.businessUnit 存在,系統會將其值新增為鍵/值組合,並以「businessUnit」做為鍵。 |
profile.companyName |
event.idm.entity.entity.user.attribute.labels |
如果 profile.companyName 存在,系統會將其值新增為鍵/值組合,並以「companyName」做為鍵。 |
profile.contingentSupplierName |
event.idm.entity.entity.user.attribute.labels |
如果存在 profile.contingentSupplierName,系統會將其值新增為鍵/值組合,並以「contingentSupplierName」做為鍵。 |
profile.conversationId |
event.idm.entity.entity.user.attribute.labels |
如果 profile.conversationId 存在,系統會將其值新增為鍵/值組合,並以「conversationId」做為鍵。 |
profile.distinguishedName |
event.idm.entity.entity.user.attribute.labels |
如果 profile.distinguishedName 存在,系統會將其值新增為鍵/值組合,並以「distinguishedName」做為鍵。 |
profile.division |
event.idm.entity.entity.user.attribute.labels |
如果 profile.division 存在,系統會將其值新增為鍵/值組合,並以「division」做為鍵。 |
profile.emailPrefix |
event.idm.entity.entity.user.attribute.labels |
如果 profile.emailPrefix 存在,系統會將其值新增為鍵/值組合,並以「emailPrefix」做為鍵。 |
profile.employeeType |
event.idm.entity.entity.user.attribute.labels |
如果 profile.employeeType 存在,系統會將其值新增為鍵/值組合,並以「employeeType」做為鍵。 |
profile.homePostalAddress |
event.idm.entity.entity.user.attribute.labels |
如果 profile.homePostalAddress 存在,系統會將其值新增為鍵/值組合,並以「homePostalAddress」做為鍵。 |
profile.isManager |
event.idm.entity.entity.user.attribute.labels |
如果 profile.isManager 存在,系統會將其值新增為鍵/值組合,並以「isManager」做為鍵。 |
lastLogin |
event.idm.entity.entity.user.attribute.labels |
如果 lastLogin 存在,系統會將其值新增為鍵/值組合,並以「lastLogin」做為鍵。 |
profile.leaveOfAbsence |
event.idm.entity.entity.user.attribute.labels |
如果 profile.leaveOfAbsence 存在,系統會將其值新增為鍵/值組合,並以「leaveOfAbsence」做為鍵。 |
profile.managerDn |
event.idm.entity.entity.user.attribute.labels |
如果 profile.managerDn 存在,系統會將其值新增為鍵/值組合,並以「managerDn」做為鍵。 |
profile.payGroup |
event.idm.entity.entity.user.attribute.labels |
如果 profile.payGroup 存在,系統會將其值新增為鍵/值組合,並以「payGroup」做為鍵。 |
profile.wdemployeeID |
event.idm.entity.entity.user.attribute.labels |
如果 profile.wdemployeeID 存在,系統會將其值新增為鍵/值組合,並以「wdemployeeID」做為鍵。 |
profile.zipCode |
event.idm.entity.entity.user.attribute.labels |
如果 profile.zipCode 存在,系統會將其值新增為鍵/值組合,並以「zipCode」做為鍵。 |
profile.userType |
event.idm.entity.entity.user.attribute.roles |
如果存在 profile.userType,其值會新增至角色陣列。 |
profile.organization、profile.company |
event.idm.entity.entity.user.company_name |
從 profile.organization 取得的值,如果前者不存在,則從 profile.company 取得。 |
profile.department |
event.idm.entity.entity.user.department |
取自 profile.department 的值。 |
profile.email、profile.secondEmail、profile.login |
event.idm.entity.entity.user.email_addresses |
系統會將 profile.email、profile.secondEmail 和 profile.login 的值 (如果是電子郵件且不重複) 合併到這個欄位。 |
profile.employeeNumber |
event.idm.entity.entity.user.employee_id |
取自 profile.employeeNumber 的值。 |
profile.firstName、profile.Preferred_First_Name |
event.idm.entity.entity.user.first_name |
從 profile.firstName 取得的值,如果前者不存在,則從 profile.Preferred_First_Name 取得。 |
profile.EmployeeWorkGroup |
event.idm.entity.entity.user.group_identifiers |
取自 profile.EmployeeWorkGroup 的值。 |
profile.HireDate、profile.hiredate |
event.idm.entity.entity.user.hire_date |
如果前者不存在,系統會從 profile.HireDate 或 profile.hiredate 剖析值。 |
profile.lastName、profile.preferred_Last_Name |
event.idm.entity.entity.user.last_name |
如果存在 profile.lastName 或 profile.preferred_Last_Name,則取自 profile.lastName 的值。 |
lastLogin |
event.idm.entity.entity.user.last_login_time |
值是從 lastLogin 剖析而來。 |
passwordChanged |
event.idm.entity.entity.user.last_password_change_time |
值是從 passwordChanged 剖析而來。 |
profile.manager、profile.managerEmail、profile.managerId |
event.idm.entity.entity.user.managers |
填入的物件包含 profile.manager 中的 user_display_name、profile.managerEmail 中的 email_addresses,以及 profile.managerId 中的 employee_id。 |
profile.city、profile.firstBaseCity |
event.idm.entity.entity.user.office_address.city |
從 profile.city 取得的值,如果前者不存在,則從 profile.firstBaseCity 取得。 |
profile.countryCode、profile.country |
event.idm.entity.entity.user.office_address.country_or_region |
從 profile.countryCode 取得的值,如果前者不存在,則從 profile.country 取得。 |
profile.streetAddress |
event.idm.entity.entity.user.personal_address.name |
取自 profile.streetAddress 的值。 |
profile.state |
event.idm.entity.entity.user.personal_address.state |
取自 profile.state 的值。 |
profile.primaryPhone、profile.mobilePhone、profile.mobile |
event.idm.entity.entity.user.phone_numbers |
profile.primaryPhone、profile.mobilePhone 和 profile.mobile 的值會合併至這個欄位。 |
profile.terminationDate、profile.terminationdate |
event.idm.entity.entity.user.termination_date |
如果前者不存在,系統會從 profile.terminationDate 或 profile.terminationdate 剖析值。 |
profile.title |
event.idm.entity.entity.user.title |
取自 profile.title 的值。 |
status |
event.idm.entity.entity.user.user_authentication_status |
從 status 對應:ACTIVE/RECOVERY/LOCKED_OUT/PASSWORD_EXPIRED -> ACTIVE;SUSPENDED -> SUSPENDED;DEPROVISIONED -> DELETED;否則為 UNKNOWN_AUTHENTICATION_STATUS。 |
profile.displayName |
event.idm.entity.entity.user.user_display_name |
取自 profile.displayName 的值。 |
profile.samAccountName、profile.samaccountname、profile.login、profile.ldapUid |
event.idm.entity.entity.user.userid |
依優先順序填入:profile.samAccountName、profile.samaccountname、profile.login (如果不是電子郵件)、profile.ldapUid (如果 profile.login 不是電子郵件)。 |
event.idm.entity.metadata.entity_type |
設為 USER。 |
|
id |
event.idm.entity.metadata.product_entity_id |
取自 id 的值。 |
event.idm.entity.metadata.product_name |
設為 Identity Cloud。 |
|
event.idm.entity.metadata.vendor_name |
設為 Okta。 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。