收集 Jenkins 日志

支持的平台:

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

准备工作

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

  • Google SecOps 实例。
  • 对 Google Cloud IAM 的特权访问权限。
  • 对 Google Cloud 存储空间的特权访问权限。
  • 对 Jenkins 的特权访问权限。

创建 Google Cloud 存储桶

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

创建 Google Cloud 服务账号

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

在 Jenkins 中安装 Google Cloud 存储插件

  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. 点击 添加 Add Credentials(添加凭证)。

  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 build 日志的文件名称,位于指定的存储路径下。
    • 存储位置:您要将日志上传到的存储桶的名称。存储桶必须可供您创建的服务账号访问。
  2. 测试日志上传。

设置 Feed

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

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

    • 存储桶 URI:gs://my-bucket/<value>/ 格式的 Google Cloud 存储桶网址。此网址必须以尾随正斜杠 (/) 结尾。
    • 源删除选项:根据您的偏好选择删除选项。
  9. 点击创建 Feed。

UDM 映射表

日志字段 UDM 映射 逻辑
act security_result.action_details 提取自 msg1 或 msg2 字段。表示执行的操作。移除了开头的空格。
数据 principal.user.userid 或 principal.ip 或 metadata.description 如果数据与 IP 地址模式匹配,则会映射到 principal.ip。如果与用户名模式匹配,则映射到 principal.user.userid。否则,它会映射到 metadata.description。
msg1 target.asset.product_object_id 或 security_result.action_details 用于提取 object 和 act。如果存在 /,则将其拆分为 object 和 act。如果存在 »,则将其拆分为 object 和 act。否则,将其视为 act 并可能进一步解析。
msg2 metadata.description 或 security_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 从 message 或 data 中提取。表示来源 IP 地址。
user principal.user.userid 从 message 或 data 中提取。表示与相应事件关联的用户。
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 由年、月、日、时间和 ampm 字段构造而成。

更新日志

查看相应解析器的更新日志

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。