收集 CircleCI 审核日志

支持的平台:

此解析器会从 CSV 和 JSON 格式的 CircleCI 审核日志中提取字段,并将其转换为 Unified Data Model (UDM)。它可以处理这两种格式,执行数据转换和丰富,并将提取的字段映射到 event 对象中的相应 UDM 字段。该模块侧重于用户操作、资源访问和更新事件,对其进行分类,并填充相关的 UDM 字段,例如正文目标网络元数据

准备工作

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

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

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

为该网站钩子 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 进行身份验证而生成的密钥。

在 CircleCI 中配置 Webhook

  1. 登录 CircleCI 网页界面。
  2. 选择要从中提取日志的项目。
  3. 点击项目设置
  4. 选择网络钩子
  5. 点击 Add Webhook
  6. 为以下输入参数指定值:

    • Webhook 名称:提供描述性名称(例如 Google SecOps)。
    • Endpoint 网址(端点网址):输入 Google SecOps API 端点的 <ENDPOINT_URL>
    • 事件:选择应触发 Webhook 的 CircleCI 事件(例如,选择 workflow-completed 以在工作流完成后发送数据)。
  7. 点击保存以创建该 Webhook。

UDM 映射表

日志字段 UDM 映射 逻辑
account.id read_only_udm.about.resource.attribute.labels.value 系统会将原始日志中的 account.id 值分配给 UDM 字段 read_only_udm.about.resource.attribute.labels.value,其中相应的account_id
操作 read_only_udm.metadata.product_event_type 将原始日志中的 action 值分配给 UDM 字段 read_only_udm.metadata.product_event_type
actor.id read_only_udm.principal.user.product_object_id 将原始日志中的 actor.id 的值分配给 UDM 字段 read_only_udm.principal.user.product_object_id
actor.name read_only_udm.principal.user.userid 系统会从原始日志中的 actor.name 字段中移除“github:”前缀。其余值会分配给 UDM 字段 read_only_udm.principal.user.userid。如果原始日志中存在 actor.name,系统会将值 USER_RESOURCE_UPDATE_CONTENT 分配给 read_only_udm.metadata.event_type。否则,系统会分配 USER_RESOURCE_ACCESS
id read_only_udm.metadata.product_log_id 原始日志中的 id 值会分配给 UDM 字段 read_only_udm.metadata.product_log_id。解析器会将 read_only_udm.metadata.log_type 设置为 CIRCLECI。解析器将 read_only_udm.metadata.product_name 设置为 CIRCLECI。解析器将 read_only_udm.metadata.vendor_name 设置为 CIRCLECI
occurred_at read_only_udm.metadata.event_timestamp 系统会将原始日志中的 occurred_at 值解析为时间戳,并将其分配给 UDM 字段 read_only_udm.metadata.event_timestamp
organization.name read_only_udm.target.administrative_domain 系统会从原始日志中的 organization.name 字段中移除“github:”前缀。其余值会分配给 UDM 字段 read_only_udm.target.administrative_domain
payload.job.id read_only_udm.about.resource.attribute.labels.value 将原始日志中的 payload.job.id 的值分配给 UDM 字段 read_only_udm.about.resource.attribute.labels.value,其中相应的job_id
payload.job.job_name read_only_udm.about.resource.attribute.labels.value 将原始日志中的 payload.job.job_name 的值分配给 UDM 字段 read_only_udm.about.resource.attribute.labels.value,其中相应的job_name
payload.job.job_status read_only_udm.about.resource.attribute.labels.value 将原始日志中的 payload.job.job_status 的值分配给 UDM 字段 read_only_udm.about.resource.attribute.labels.value,其中相应的job_status
payload.workflow.id read_only_udm.about.resource.attribute.labels.value 将原始日志中的 payload.workflow.id 的值分配给 UDM 字段 read_only_udm.about.resource.attribute.labels.value,其中相应的workflow_id
request.id read_only_udm.network.session_id 原始日志中的 request.id 值会分配给 UDM 字段 read_only_udm.network.session_id
scope.id read_only_udm.about.resource.attribute.labels.value 将原始日志中的 scope.id 值分配给 UDM 字段 read_only_udm.about.resource.attribute.labels.value,其中相应的scope_id。解析器最初会将 sec_action 设置为 BLOCK。如果原始日志中的 success 字段为 true,则 sec_action 会更改为 ALLOW。然后,将 sec_action 的值分配给 UDM 字段 read_only_udm.security_result.action
target.id read_only_udm.target.resource.product_object_id 原始日志中的 target.id 值会分配给 UDM 字段 read_only_udm.target.resource.product_object_id
target.name read_only_udm.target.resource.name 系统会从原始日志中的 target.name 字段中移除“github:”前缀。其余值会分配给 UDM 字段 read_only_udm.target.resource.name。解析器将 read_only_udm.target.resource.resource_type 设置为 STORAGE_OBJECT
version read_only_udm.target.resource.attribute.labels.value 将原始日志中的 version 值转换为字符串,并将其分配给 UDM 字段 read_only_udm.target.resource.attribute.labels.value,其中相应的version

更改

2023-03-09

  • 新创建的解析器。