收集 CircleCI 审核日志
支持的平台:
Google SecOps
SIEM
此解析器会从 CSV 和 JSON 格式的 CircleCI 审核日志中提取字段,并将其转换为 Unified Data Model (UDM)。它可以处理这两种格式,执行数据转换和丰富,并将提取的字段映射到 event 对象中的相应 UDM 字段。该模块侧重于用户操作、资源访问和更新事件,对其进行分类,并填充相关的 UDM 字段,例如正文、目标、网络和元数据。
准备工作
- 确保您拥有 Google SecOps 实例。
- 确保您拥有对 CircleCI 的特权访问权限。
在 Google SecOps 中配置 Feed 以提取 CircleCI 日志
- 依次前往 SIEM 设置 > Feed。
- 点击新增。
- 在 Feed 名称字段中,输入 Feed 的名称(例如 CircleCI 日志)。
- 选择 Webhook 作为来源类型。
- 选择 CircleCI 作为日志类型。
- 点击下一步。
- 可选:为以下输入参数指定值:
- 分隔符:用于分隔日志行(例如
\n
)的分隔符。 - 资源命名空间:资源命名空间。
- 提取标签:应用于此 Feed 中的事件的标签。
- 分隔符:用于分隔日志行(例如
- 点击下一步。
- 在最终确定界面中查看 Feed 配置,然后点击提交。
- 点击生成 Secret 密钥,生成用于对此 Feed 进行身份验证的 Secret 密钥。
- 复制并存储密钥。您将无法再查看此密钥。如有必要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥过时。
- 在详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。
- 点击完成。
为该网站钩子 Feed 创建 API 密钥
依次前往 Google Cloud 控制台 > 凭据。
点击创建凭据,然后选择 API 密钥。
限制 API 密钥对 Google Security Operations API 的访问权限。
指定端点网址
- 在客户端应用中,指定 webhook Feed 中提供的 HTTPS 端点网址。
通过在自定义标头中指定 API 密钥和密钥(格式如下)来启用身份验证:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
建议:将 API 密钥作为标头指定,而不是在网址中指定。
如果您的 webhook 客户端不支持自定义标头,您可以使用以下格式的查询参数指定 API 密钥和密钥:
ENDPOINT_URL?key=API_KEY&secret=SECRET
替换以下内容:
ENDPOINT_URL
:Feed 端点网址。API_KEY
:用于对 Google SecOps 进行身份验证的 API 密钥。SECRET
:您为对 Feed 进行身份验证而生成的密钥。
在 CircleCI 中配置 Webhook
- 登录 CircleCI 网页界面。
- 选择要从中提取日志的项目。
- 点击项目设置。
- 选择网络钩子。
- 点击 Add Webhook。
为以下输入参数指定值:
- Webhook 名称:提供描述性名称(例如 Google SecOps)。
- Endpoint 网址(端点网址):输入 Google SecOps API 端点的
<ENDPOINT_URL>
。
- 事件:选择应触发 Webhook 的 CircleCI 事件(例如,选择 workflow-completed 以在工作流完成后发送数据)。
点击保存以创建该 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
- 新创建的解析器。