收集 Workday HCM 日志

支持的语言:

本文档介绍了如何使用 API 将 Workday 日志注入到 Google Security Operations。解析器从 JSON 格式的日志中提取 Workday HCM 用户数据。它可处理各种数据转换,包括重命名字段、合并嵌套对象、解析日期,以及填充用户属性、就业详情和组织结构的 UDM 字段。此外,它还包含针对格式错误的 JSON 和缺少关键字段的错误处理。

准备工作

确保您满足以下前提条件:

  • Google SecOps 实例。
  • 对 Workday 的特权访问权限。

配置 Workday API 身份验证

在 Workday 中创建集成系统用户 (ISU)

  1. 以管理员权限登录 Workday。
  2. 在搜索栏中输入 Create Integration System User,然后从结果中选择相应任务。
  3. 输入用户名
  4. 设置密码
  5. 会话超时时间(分钟)设置为 0,以防止 ISU 超时。
  6. 启用不允许界面会话,以通过限制界面登录来增强安全性。
  7. 前往维护密码规则任务。
  8. 将集成系统用户添加到不受密码过期限制的系统用户字段。

在 Workday 中创建集成安全组

  1. 在搜索栏中输入 Create Security Group,然后从结果中选择相应任务。
  2. 找到租户安全组类型字段,然后选择集成系统安全组(不受限)
  3. 为安全组提供名称
  4. 点击确定
  5. 点击新创建的安全组对应的修改
  6. 将上一步中的集成系统用户分配给安全组。
  7. 点击完成

在 Workday 中向安全组授予网域访问权限

  1. 在搜索栏中输入为安全组维护权限,然后从搜索结果中选择该任务。
  2. 源安全组列表中选择您创建的安全组,以修改其权限。
  3. 点击确定
  4. 依次前往维护安全组的权限 > 网域安全政策权限
  5. 为每个网域分配必要的权限,例如 GET 操作。
  6. 点击确定
  7. 点击完成以保存更改。

在 Workday 中激活安全政策变更

  1. 在搜索栏中输入 Activate Pending Security Policy Changes,然后从结果中选择相应任务。
  2. 在注释字段中输入审核原因,然后点击确定,开始执行激活待处理的安全政策变更任务。
  3. 在下一个界面上,选择确认以完成任务,然后点击确定

为集成配置 API 客户端

  1. 在搜索栏中,输入 Register API Client for Integrations,然后选择该选项。
  2. 点击创建
  3. 提供以下配置详细信息:
    • 客户端名称:输入 API 客户端的名称(例如 Google SecOps Client)。
    • 系统用户:选择您在上一步中创建的集成系统用户
    • 范围:选择 HCM API 或包含员工数据以及您要访问的其他区域的相关范围。
  4. 选择保存
  5. 点击确定以创建 API 客户端。
  6. 创建 API 客户端后,请保存客户端密钥。您退出此页面后,系统将不会再显示该值。

生成 OAuth 2.0 刷新令牌

  1. 在 Workday 搜索栏中,输入 Manage Refresh Tokens for Integrations,然后选择该选项。
  2. 点击 Generate New Refresh Token(生成新的刷新令牌)。
  3. Workday 账号字段中,搜索并选择您创建的集成系统用户
  4. 选择用户,然后点击确定
  5. 复制并保存显示的刷新令牌。

获取 API 端点网址

  1. 在 Workday 搜索栏中,输入 View API Clients,然后选择该选项。
  2. API Clients for Integrations 下,找到您创建的 Google SecOps Client
  3. 复制并保存以下详细信息:
    • 令牌端点:您将向其发送请求以获取访问令牌的 网址
    • Workday REST API 端点:您将用于配置与 Google SecOps 集成的 网址

生成 OAuth 访问令牌

  1. 使用 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}"
    
  2. 这将返回一个访问令牌(例如 "access_token": "abcd1234"

  3. 复制并保存访问令牌。

设置 Feed

您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:

  • SIEM 设置 > Feed
  • 内容中心 > 内容包

通过“SIEM 设置”>“Feed”设置 Feed

如需配置 Feed,请按以下步骤操作:

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  3. 在下一页上,点击配置单个 Feed
  4. Feed 名称字段中,输入 Feed 的名称(例如 Workday Logs)。
  5. 选择第三方 API 作为来源类型
  6. 选择 Workday 日志类型。
  7. 点击下一步
  8. 为以下输入参数指定值:
    • API 主机名:Workday REST API 端点的网址。
    • 租户:Workday API 端点的最后一个路径元素,用于标识您的实例。
    • 访问令牌:OAuth 访问令牌。
  9. 点击下一步
  10. 最终确定界面中检查 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 专业人士那里获得解答。