收集 JFrog Artifactory 日志
支持的平台:
Google SecOps
SIEM
此解析器可处理两种不同的 JFrog Artifactory 日志格式。它使用 Grok 模式从每种格式中识别和提取字段。然后,它会将这些字段映射到 UDM,处理其中一种格式的 JSON 载荷,并丢弃与这两种格式都不匹配的日志。
准备工作
- 确保您拥有 Google SecOps 实例。
- 确保您拥有对 JFrog 的特权访问权限。
在 Google SecOps 中配置 Feed 以提取 JFrog Artifactory 日志
- 依次前往 SIEM 设置 > Feed。
- 点击新增。
- 在Feed 名称字段中,输入 Feed 的名称(例如 JFrog Artifactory 日志)。
- 选择 Webhook 作为来源类型。
- 选择 JFrog Artifactory 作为日志类型。
- 点击下一步。
- 可选:为以下输入参数指定值:
- 分隔符:用于分隔日志行(例如
\n
)的分隔符。 - 资源命名空间:资源命名空间。
- 提取标签:应用于此 Feed 中的事件的标签。
- 分隔符:用于分隔日志行(例如
- 点击下一步。
- 在最终确定界面中查看 Feed 配置,然后点击提交。
- 点击生成 Secret 密钥,生成用于对此 Feed 进行身份验证的 Secret 密钥。
- 复制并存储密钥。您将无法再查看此密钥。如有必要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥过时。
- 在详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。
- 点击完成。
为该 Webhook 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 进行身份验证而生成的密钥。
在 JFrog Artifactory 中创建一个 webhook,以将数据发送到 Google SecOps
- 使用您的管理员凭据登录 JFrog 实例。
- 依次前往管理 > 常规 > Webhook。
- 点击 + 新建网络钩子。
配置以下 webhook 设置:
- Webhook 密钥:提供描述性名称(例如 Google SecOps)。
网址:输入 Google SecOps API 端点的
<ENDPOINT_URL>
。事件:选择应触发 Webhook 的 Artifactory 事件,选择与您的安全监控需求相关的事件(例如已部署、已下载、已删除)。
网域:如果您使用的是虚拟代码库,请选择相关网域。否则,请将此字段保留为任何本地。
代码库:根据您的需求,选择特定代码库或将其保留为任何远程代码库或任何本地代码库。
点击测试,系统会向 Google SecOps 发送测试事件。
点击保存。
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
- 新创建的解析器。