收集 Jenkins 日志

支持的平台:

概览

此解析器会从 JSON 和 SYSLOG 格式的日志中提取时间戳、用户 ID、来源 IP、操作和对象 ID 等关键信息。它使用 Grok 模式来匹配各种日志消息格式,处理结构差异,并使用提取的字段填充统一数据模型 (UDM)。解析器还会根据是否存在用户或 IP 信息对事件进行分类。

准备工作

  • 确保您拥有 Google SecOps 实例。
  • 确保您拥有 Google Cloud IAM 的特权访问权限。
  • 确保您拥有对 Google Cloud Storage 的特权访问权限。
  • 确保您拥有对 Jenkins 的超级用户访问权限。

创建 Google Cloud Storage 存储分区

  1. 前往 Cloud Storage
  2. 创建一个新存储桶。选择一个具有唯一性的名称和适当的区域。
  3. 确保存储桶具有适当的访问控制(例如,只有已获授权的服务账号可以向其写入)。

创建 Google Cloud 服务账号

  1. 依次前往 IAM 和管理 > 服务账号
  2. 创建新的服务账号。为其指定一个描述性名称(例如 jenkins-logs)。
  3. 向服务账号授予您在上一步中创建的 GCS 存储桶的 Storage Object Creator 角色。
  4. 为您的服务账号创建 SSH 密钥:创建和删除服务账号密钥
  5. 下载服务账号的 JSON 密钥文件。

在 Jenkins 中安装 Google Cloud Storage 插件

  1. 依次前往管理 Jenkins > 插件
  2. 选择可用插件
  3. 搜索 Google Cloud Storage 插件。
  4. 安装该插件并根据需要重启 Jenkins。

在 Jenkins 中安装 Google OAuth 凭据插件

  1. 依次前往管理 Jenkins > 插件
  2. 选择可用的插件
  3. 搜索 Google OAuth 凭据插件。
  4. 安装该插件并根据需要重启 Jenkins。

将 Jenkins 配置为对 Google Cloud 进行身份验证

  1. 依次前往 Manage Jenkins > Credentials > System

  2. 依次点击 添加 添加凭据

  3. Kind(类型):选择 Google Service Account from private key(私钥中的 Google 服务账号)。

  4. 项目名称:为凭据设置名称。

  5. 上传您在创建 Google Cloud 服务账号时获取的 JSON 密钥文件。

  6. 点击创建

配置 Jenkins 日志以上传 Google SecOps

  1. 在 Jenkins 作业配置中,在构建后操作中添加 Google Storage Build Log Upload,并使用以下参数:
    • Google 凭据:您在上一步中创建的 Google 凭据的名称。
    • 日志名称:在指定存储路径下存储 Jenkins 构建日志的文件的名称。
    • 存储位置:您要将日志上传到的存储桶的名称。您创建的服务账号必须能够访问该存储桶。
  2. 测试日志上传。

在 Google SecOps 中配置 Feed 以注入 Jenkins 日志

  1. 依次前往 SIEM 设置 > Feed
  2. 点击新增
  3. Feed 名称字段中,输入 Feed 的名称(例如 Jenkins 日志)。
  4. 选择 Google Cloud Storage 作为来源类型
  5. 选择 Jenkins 作为日志类型
  6. 点击获取服务账号,作为 Chronicle 服务账号
  7. 点击下一步
  8. 为以下输入参数指定值:

    • 存储桶 URI:采用 gs://my-bucket/<value> 格式的 Google Cloud Storage 存储桶网址。
    • URI 是:选择包含子目录的目录
    • 来源删除选项:根据您的偏好选择删除选项。
    • 资源命名空间资源命名空间
    • 提取标签:应用于此 Feed 中的事件的标签。
  9. 点击下一步

  10. 最终确定界面中查看新的 Feed 配置,然后点击提交

UDM 映射表

日志字段 UDM 映射 逻辑
act security_result.action_details msg1msg2 字段中提取。表示执行的操作。系统会移除开头空格。
data principal.user.useridprincipal.ipmetadata.description 如果 data 与 IP 地址模式匹配,则会映射到 principal.ip。如果它与用户名模式匹配,则会映射到 principal.user.userid。否则,它会映射到 metadata.description
msg1 target.asset.product_object_idsecurity_result.action_details 用于提取对象操作。如果存在 /,则将其拆分为对象操作。如果存在 »,则将其拆分为对象操作。否则,将其视为操作,并可能进行进一步解析。
msg2 metadata.descriptionsecurity_result.action_details 如有,最初映射到 metadata.description。如果它包含“completed:”,系统会提取后面的值并将其映射到 security_result.action_details
对象 target.asset.product_object_id msg1 中提取。表示要执行操作的对象。
object_id target.resource.attribute.labels.value 如果存在 /,则从对象中提取。表示更具体的对象标识符。该键已硬编码为“插件名称”。
src_ip principal.ip 消息数据中提取。表示来源 IP 地址。
用户 principal.user.userid 消息数据中提取。表示与事件相关联的用户。
metadata.event_timestamp 从计算出的 @timestamp 字段复制。
metadata.event_type 由解析器逻辑决定。如果存在 user,则设置为 USER_UNCATEGORIZED;如果存在 src_ip,则设置为 STATUS_UNCATEGORIZED;否则,设置为 GENERIC_EVENT
metadata.product_name 硬编码为 Jenkins
metadata.product_version 硬编码为 Jenkins
metadata.vendor_name 硬编码为 JENKINS
metadata.event_timestamp yearmonthdaytimeampm 字段构建而成。

变化

2023-11-27

  • 新创建的解析器。