收集 JFrog Artifactory 日志

支持的平台:

此解析器可处理两种不同的 JFrog Artifactory 日志格式。它使用 Grok 模式从每种格式中识别和提取字段。然后,它会将这些字段映射到 UDM,处理其中一种格式的 JSON 载荷,并丢弃与这两种格式都不匹配的日志。

准备工作

  • 确保您拥有 Google SecOps 实例。
  • 确保您拥有对 JFrog 的特权访问权限。

在 Google SecOps 中配置 Feed 以提取 JFrog Artifactory 日志

  1. 依次前往 SIEM 设置 > Feed
  2. 点击新增
  3. Feed 名称字段中,输入 Feed 的名称(例如 JFrog Artifactory 日志)。
  4. 选择 Webhook 作为来源类型
  5. 选择 JFrog Artifactory 作为日志类型
  6. 点击下一步
  7. 可选:为以下输入参数指定值:
    • 分隔符:用于分隔日志行(例如 \n)的分隔符。
    • 资源命名空间资源命名空间
    • 提取标签:应用于此 Feed 中的事件的标签。
  8. 点击下一步
  9. 最终确定界面中查看 Feed 配置,然后点击提交
  10. 点击生成 Secret 密钥,生成用于对此 Feed 进行身份验证的 Secret 密钥。
  11. 复制并存储密钥。您将无法再查看此密钥。如有必要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥过时。
  12. 详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。
  13. 点击完成

为该 Webhook Feed 创建 API 密钥

  1. 依次前往 Google Cloud 控制台 > 凭据

    转到“凭据”页面

  2. 点击创建凭据,然后选择 API 密钥

  3. 限制 API 密钥对 Google Security Operations API 的访问权限。

指定端点网址

  1. 在客户端应用中,指定 webhook Feed 中提供的 HTTPS 端点网址。
  2. 通过在自定义标头中指定 API 密钥和密钥(格式如下)来启用身份验证:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    建议:将 API 密钥作为标头指定,而不是在网址中指定。

  3. 如果您的 webhook 客户端不支持自定义标头,您可以使用以下格式的查询参数指定 API 密钥和密钥:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    替换以下内容:

    • ENDPOINT_URL:Feed 端点网址。
    • API_KEY:用于对 Google SecOps 进行身份验证的 API 密钥。
    • SECRET:您为对 Feed 进行身份验证而生成的密钥。

在 JFrog Artifactory 中创建一个 webhook,以将数据发送到 Google SecOps

  1. 使用您的管理员凭据登录 JFrog 实例。
  2. 依次前往管理 > 常规 > Webhook
  3. 点击 + 新建网络钩子
  4. 配置以下 webhook 设置:

    • Webhook 密钥:提供描述性名称(例如 Google SecOps)。
    • 网址:输入 Google SecOps API 端点的 <ENDPOINT_URL>

    • 事件:选择应触发 Webhook 的 Artifactory 事件,选择与您的安全监控需求相关的事件(例如已部署已下载已删除)。

    • 网域:如果您使用的是虚拟代码库,请选择相关网域。否则,请将此字段保留为任何本地

    • 代码库:根据您的需求,选择特定代码库或将其保留为任何远程代码库任何本地代码库

  5. 点击测试,系统会向 Google SecOps 发送测试事件。

  6. 点击保存

UDM 映射表

日志字段 UDM 映射 逻辑
操作 read_only_udm.metadata.product_event_type 系统会将原始日志中的 action 值转换为小写并进行映射。
datetime read_only_udm.metadata.event_timestamp 系统会解析原始日志的 datetime 字段,并将其转换为时间戳。
hostname read_only_udm.principal.hostname 直接从原始日志的主机名字段映射而来。
id read_only_udm.metadata.product_log_id 直接从原始日志的 id 字段(来自 JSON 载荷)映射而来。
ip read_only_udm.principal.ip 直接从原始日志的 ip 字段映射而来。已硬编码为“USER_RESOURCE_ACCESS”。已硬编码为“JFROG_ARTIFACTORY”。已硬编码为“Artifactory”。已硬编码为“JFROG”。
owner read_only_udm.principal.user.userid 如果原始日志(来自 JSON 载荷)中不存在用户名,则会进行映射。
repo_name read_only_udm.target.resource.name 直接从原始日志的 repo_name 字段映射而来。
repo_type read_only_udm.target.resource.resource_subtype 直接从原始日志的 repo_type 字段映射而来。
scope read_only_udm.target.resource.name 直接从原始日志的 scope 字段(来自 JSON 载荷)映射而来。
scope read_only_udm.target.resource.resource_subtype 如果原始日志中存在 scope,则硬编码为“scope”。
sequenceId read_only_udm.metadata.product_log_id 系统会从 sequenceId 字段中移除引号,然后进行映射。
subject read_only_udm.about.labels.key 如果原始日志中存在subject,则硬编码为“subject”。
subject read_only_udm.about.labels.value 直接从原始日志的主题字段(来自 JSON 载荷)映射而来。
type read_only_udm.metadata.product_event_type 直接从原始日志的 type 字段(来自 JSON 载荷)映射而来。
用户 read_only_udm.principal.user.userid 直接从原始日志的 user 字段映射而来。
username read_only_udm.principal.user.userid 直接从原始日志的 username 字段(来自 JSON 载荷)映射而来。

更改

2024-09-23

  • 增强功能:
  • 添加了对解析未解析日志的支持。
  • 将“target_ip”映射到“target.ip”和“target.asset.ip”。
  • 将“desc”映射到“metadata.description”。
  • 将“method”映射到“network.http.method”。
  • 将“url”映射到“target.url”。
  • 将“prin_url”映射到“principal.url”。
  • 将“response_code”映射到“network.http.response_code”。
  • 将“RequestMethod”映射到“network.http.method”。
  • 将“RequestPath”映射到“target.url”。
  • 将“DownstreamContentSize”和“DownstreamStatus”映射到“Additional.Fields”。
  • 将“ServiceAddr”映射到“principal.hostname”和“principal.port”。
  • 将“ClientAddr”映射到“target.ip”和“target.port”。
  • 将“user_agent”映射到“network.http.user_agent”。
  • 将“level”映射到“security_result.severity”。
  • 将“msg”映射到“security_result.description”。
  • 将“protocol”映射到“network.application_protocol”。

2023-08-25

  • 新创建的解析器。