收集 Workday HCM 日志
支持的语言:
    
      
      
        
        
        
  
    
      Google SecOps
    
  
      
    
      
      
        
        
        
  
    
      SIEM
    
  
      
    
    
  本文档介绍了如何使用 API 将 Workday 日志注入到 Google Security Operations。解析器从 JSON 格式的日志中提取 Workday HCM 用户数据。它可处理各种数据转换,包括重命名字段、合并嵌套对象、解析日期,以及填充用户属性、就业详情和组织结构的 UDM 字段。此外,它还包含针对格式错误的 JSON 和缺少关键字段的错误处理。
准备工作
确保您满足以下前提条件:
- Google SecOps 实例。
 - 对 Workday 的特权访问权限。
 
配置 Workday API 身份验证
在 Workday 中创建集成系统用户 (ISU)
- 以管理员权限登录 Workday。
 - 在搜索栏中输入 
Create Integration System User,然后从结果中选择相应任务。 - 输入用户名。
 - 设置密码。
 - 将会话超时时间(分钟)设置为 
0,以防止 ISU 超时。 - 启用不允许界面会话,以通过限制界面登录来增强安全性。
 - 前往维护密码规则任务。
 - 将集成系统用户添加到不受密码过期限制的系统用户字段。
 
在 Workday 中创建集成安全组
- 在搜索栏中输入 
Create Security Group,然后从结果中选择相应任务。 - 找到租户安全组类型字段,然后选择集成系统安全组(不受限)。
 - 为安全组提供名称。
 - 点击确定。
 - 点击新创建的安全组对应的修改。
 - 将上一步中的集成系统用户分配给安全组。
 - 点击完成。
 
在 Workday 中向安全组授予网域访问权限
- 在搜索栏中输入为安全组维护权限,然后从搜索结果中选择该任务。
 - 从源安全组列表中选择您创建的安全组,以修改其权限。
 - 点击确定。
 - 依次前往维护安全组的权限 > 网域安全政策权限。
 - 为每个网域分配必要的权限,例如 GET 操作。
 - 点击确定。
 - 点击完成以保存更改。
 
在 Workday 中激活安全政策变更
- 在搜索栏中输入 
Activate Pending Security Policy Changes,然后从结果中选择相应任务。 - 在注释字段中输入审核原因,然后点击确定,开始执行激活待处理的安全政策变更任务。
 - 在下一个界面上,选择确认以完成任务,然后点击确定。
 
为集成配置 API 客户端
- 在搜索栏中,输入 
Register API Client for Integrations,然后选择该选项。 - 点击创建。
 - 提供以下配置详细信息:
- 客户端名称:输入 API 客户端的名称(例如 
Google SecOps Client)。 - 系统用户:选择您在上一步中创建的集成系统用户。
 - 范围:选择 HCM API 或包含员工数据以及您要访问的其他区域的相关范围。
 
 - 客户端名称:输入 API 客户端的名称(例如 
 - 选择保存。
 - 点击确定以创建 API 客户端。
 - 创建 API 客户端后,请保存客户端密钥。您退出此页面后,系统将不会再显示该值。
 
生成 OAuth 2.0 刷新令牌
- 在 Workday 搜索栏中,输入 
Manage Refresh Tokens for Integrations,然后选择该选项。 - 点击 Generate New Refresh Token(生成新的刷新令牌)。
 - 在 Workday 账号字段中,搜索并选择您创建的集成系统用户。
 - 选择用户,然后点击确定。
 - 复制并保存显示的刷新令牌。
 
获取 API 端点网址
- 在 Workday 搜索栏中,输入 
View API Clients,然后选择该选项。 - 在 API Clients for Integrations 下,找到您创建的 
Google SecOps Client。 - 复制并保存以下详细信息:
- 令牌端点:您将向其发送请求以获取访问令牌的 网址。
 - Workday REST API 端点:您将用于配置与 Google SecOps 集成的 网址。
 
 
生成 OAuth 访问令牌
使用 curl 或类似的 HTTP 客户端向令牌端点发送 POST 请求:
curl -X POST "https://{hostname}/ccx/oauth2/token" \ -d "grant_type=refresh_token" \ -d "client_id={your_client_id}" \ -d "client_secret={your_client_secret}" \ -d "refresh_token={your_refresh_token}"这将返回一个访问令牌(例如
"access_token": "abcd1234")复制并保存访问令牌。
设置 Feed
如需配置 Feed,请按以下步骤操作:
- 依次前往 SIEM 设置 > Feed。
 - 点击添加新 Feed。
 - 在下一页上,点击配置单个 Feed。
 - 在Feed 名称字段中,输入 Feed 的名称(例如 
Workday Logs)。 - 选择第三方 API 作为来源类型。
 - 选择 Workday 日志类型。
 - 点击下一步。
 - 为以下输入参数指定值:
- API 主机名:Workday REST API 端点的网址。
 - 租户:Workday API 端点的最后一个路径元素,用于标识您的实例。
 - 访问令牌:OAuth 访问令牌。
 
 - 点击下一步。
 - 在最终确定界面中检查 Feed 配置,然后点击提交。
 
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 | 
|---|---|---|
@timestamp | 
read_only_udm.metadata.event_timestamp.seconds | 
原始日志的 @timestamp 字段已重命名为 timestamp,并解析为自纪元以来的时间戳(以秒为单位)。 | 
businessTitle | 
read_only_udm.entity.entity.user.title | 
直接从原始日志中的 businessTitle 字段映射。 | 
descriptor | 
read_only_udm.entity.entity.user.user_display_name | 
直接从原始日志中的 descriptor 字段映射。 | 
Employee_ID | 
read_only_udm.entity.entity.user.employee_id | 
直接从原始日志中的 Employee_ID 字段映射。 | 
Employee_ID | 
read_only_udm.entity.metadata.product_entity_id | 
当 id 不存在时,直接从原始日志中的 Employee_ID 字段映射。 | 
gopher-supervisor.descriptor | 
read_only_udm.entity.entity.user.managers.user_display_name | 
直接从原始日志中的 gopher-supervisor.descriptor 字段映射,重命名为 empmanager.user_display_name,然后合并到 managers 中。 | 
gopher-supervisor.id | 
read_only_udm.entity.entity.user.managers.product_object_id | 
直接从原始日志中的 gopher-supervisor.id 字段映射,重命名为 empmanager.product_object_id,然后合并到 managers 中。 | 
gopher-supervisor.primaryWorkEmail | 
read_only_udm.entity.entity.user.managers.email_addresses | 
直接从原始日志中的 gopher-supervisor.primaryWorkEmail 字段映射,然后合并到 managers 中。 | 
gopher-time-off.date | 
read_only_udm.entity.entity.user.time_off.interval.start_time | 
在原始日志中,从 gopher-time-off 数组内的 gopher-time-off.date 字段解析为日期。 | 
gopher-time-off.descriptor | 
read_only_udm.entity.entity.user.time_off.description | 
直接从原始日志中 gopher-time-off 数组内的 gopher-time-off.descriptor 字段映射而来。 | 
Hire_Date | 
read_only_udm.entity.entity.user.hire_date | 
从原始日志的 Hire_Date 字段中解析为日期。 | 
id | 
read_only_udm.entity.metadata.product_entity_id | 
如果原始日志中存在,则直接从 id 字段映射。 | 
Job_Profile | 
read_only_udm.entity.entity.user.title | 
当 businessTitle 不存在时,直接从原始日志中的 Job_Profile 字段映射。 | 
Legal_Name_First_Name | 
read_only_udm.entity.entity.user.first_name | 
直接从原始日志中的 Legal_Name_First_Name 字段映射。 | 
Legal_Name_Last_Name | 
read_only_udm.entity.entity.user.last_name | 
直接从原始日志中的 Legal_Name_Last_Name 字段映射。 | 
location.descriptor | 
read_only_udm.entity.entity.location.city | 
直接从原始日志中的 location.descriptor 字段映射,重命名为 _location.city,然后重命名为 entity.entity.location.city。 | 
primarySupervisoryOrganization.descriptor | 
read_only_udm.entity.entity.user.department | 
直接从原始日志中的 primarySupervisoryOrganization.descriptor 字段映射。 | 
primaryWorkEmail | 
read_only_udm.entity.entity.user.email_addresses | 
直接从原始日志中的 primaryWorkEmail 字段映射。 | 
primaryWorkPhone | 
read_only_udm.entity.entity.user.phone_numbers | 
直接从原始日志中的 primaryWorkPhone 字段映射。 | 
Termination_Date | 
read_only_udm.entity.entity.user.termination_date | 
从原始日志的 Termination_Date 字段中解析为日期。 | 
Work_Email | 
read_only_udm.entity.entity.user.email_addresses | 
当 primaryWorkEmail 不存在时,直接从原始日志中的 Work_Email 字段映射。 | 
collection_time | 
read_only_udm.metadata.event_timestamp.collected_timestamp | 
日志的 collection_time 会映射到 collected_timestamp。 | 
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。