收集 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
您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:
- SIEM 设置 > Feed
- 内容中心 > 内容包
通过“SIEM 设置”>“Feed”设置 Feed
如需配置 Feed,请按以下步骤操作:
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在Feed 名称字段中,输入 Feed 的名称(例如
Workday Logs
)。 - 选择第三方 API 作为来源类型。
- 选择 Workday 日志类型。
- 点击下一步。
- 为以下输入参数指定值:
- API 主机名:Workday REST API 端点的网址。
- 租户:Workday API 端点的最后一个路径元素,用于标识您的实例。
- 访问令牌:OAuth 访问令牌。
- 点击下一步。
- 在最终确定界面中检查 Feed 配置,然后点击提交。
设置来自内容中心的 Feed
为以下字段指定值:
- API 主机名:Workday REST API 端点的 FQDN。
- 租户:Workday API 端点的最后一个路径元素,用于标识您的实例。
- 访问令牌:OAuth 访问令牌。
高级选项
- Feed 名称:用于标识 Feed 的预填充值。
- 来源类型:用于将日志收集到 Google SecOps 中的方法。
- 资源命名空间:与 Feed 关联的命名空间。
- 提取标签:应用于相应 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 专业人士那里获得解答。