收集 Datadog 日志
概览
此解析器会从 Datadog 日志中提取字段,执行几项更改和 Grok 匹配以对数据进行结构化,并将提取的字段映射到 UDM。它会处理 message 字段中的不同日志格式,包括键值对和 JSON 对象,并将特定字段转换为符合 UDM 要求的标签和其他字段。
准备工作
- 确保您拥有 Google SecOps 实例。
- 确保您拥有 Google Cloud IAM 的特权访问权限。
- 确保您拥有对 Google Cloud Storage 的特权访问权限。
- 确保您拥有对 Datadog 的
logs_write_archive
用户访问权限。
方案 1:通过 Cloud Storage 配置共享 Datadog 日志
配置 Datadog 与 Google Cloud Platform 的集成
创建 Google Cloud Storage 存储分区
- 登录 Google Cloud 控制台。
前往 Cloud Storage 存储分区页面。
点击创建。
在创建存储桶页面上,输入您的存储桶信息。完成以下每个步骤后,点击继续以进入下一步:
在开始使用部分中,执行以下操作:
- 输入一个符合存储分区名称要求的唯一名称(例如 datadog-data)。
如需启用分层命名空间,请点击展开箭头以展开 Optimize for file oriented and data-intensive workloads 部分,然后选择 Enable Hierarchical namespace on this bucket。
如需添加存储分区标签,请点击展开箭头以展开标签部分。
点击添加标签,然后为标签指定键和值。
在选择数据存储位置部分中,执行以下操作:
- 选择位置类型。
- 使用位置类型下拉菜单选择一个位置,用于永久存储存储分区中的对象数据。
- 如果您选择双区域位置类型,还可以使用相关复选框选择启用增强型复制。
- 如需设置跨存储分区复制,请展开设置跨存储分区复制部分。
在为数据选择一个存储类别部分中,为存储分区选择默认存储类别,或者选择 Autoclass 对存储分区数据进行自动存储类别管理。
在选择如何控制对对象的访问权限部分中,选择否以强制执行禁止公开访问,然后为存储分区对象选择访问权限控制模型。
在选择如何保护对象数据部分中,执行以下操作:
- 在数据保护下,选择您要为存储分区设置的任何选项。
- 如需选择对象数据的加密方式,请点击标有数据加密的展开箭头,然后选择数据加密方法。
点击创建。
创建 Google Cloud 服务账号
- 依次前往 IAM 和管理 > 服务账号。
- 创建新的服务账号。
- 为其指定一个描述性名称(例如 datadog-user)。
- 向服务账号授予您在上一步中创建的 Cloud Storage 存储分区的 Storage Object Admin 角色。
- 为服务账号创建 SSH 密钥。
- 下载服务账号的 JSON 密钥文件。请妥善保管此文件。
配置 Datadog 以将日志发送到 Cloud Storage
- 使用特权账号登录 Datadog。
- 依次前往日志 > 日志转发。
- 点击 + 创建新的归档文件。
- 选择 Google Cloud Storage。
- 输入所需参数,然后点击保存。
方案 2:通过 Webhook 配置共享 Datadog 日志
在 Google SecOps 中配置 Feed 以提取 Datadog 日志
- 依次前往 SIEM 设置 > Feed。
- 点击新增。
- 在Feed 名称字段中,输入 Feed 的名称(例如 Datadog 日志)。
- 选择 Webhook 作为来源类型。
- 选择 Datadog 作为日志类型。
- 点击下一步。
- 可选:为以下输入参数指定值:
- 分隔符:用于分隔日志行(例如
\n
)的分隔符。 - 资源命名空间:资源命名空间。
- 提取标签:应用于此 Feed 中的事件的标签。
- 分隔符:用于分隔日志行(例如
- 点击下一步。
- 在最终确定界面中查看 Feed 配置,然后点击提交。
- 点击生成 Secret 密钥,生成用于对此 Feed 进行身份验证的 Secret 密钥。
- 复制并存储密钥。您将无法再查看此密钥。如有必要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥过时。
- 在详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。
- 点击完成。
为该 Webhook Feed 创建 API 密钥
依次前往 Google Cloud 控制台 > 凭据。
点击创建凭据,然后选择 API 密钥。
限制 API 密钥对 Chronicle 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 进行身份验证而生成的密钥。
配置 Datadog 以将日志发送到 webhook
- 使用特权账号登录 Datadog。
- 依次前往日志 > 日志转发。
- 选择自定义目标平台。
- 点击 + 创建新目标。
- 为以下输入参数指定值:
- 选择目标类型:选择 HTTP。
- 为目标位置命名:为该网络钩子提供一个描述性名称(例如 Google SecOps Webhook)。
- 配置目标位置:依次输入 ENDPOINT_网址、API_KEY 和 SECRET。
- 配置身份验证设置:添加一个常规标头(如下所示),这样不会破坏 HTTP 请求,并允许 Datadog 完成网络钩子创建。
- 标题名称:
Accept
。 - 标头值:
application/json
。
- 标题名称:
- 点击保存。
参考链接
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
_id |
read_only_udm.metadata.product_log_id |
直接从 _id 字段映射。 |
alert |
read_only_udm.security_result.about.resource.attribute.labels |
从 alert 字段中提取,并作为标签添加到 security_result 对象中。 |
attributes.@timestamp |
read_only_udm.metadata.event_timestamp |
系统会从 attributes.@timestamp 字段中提取事件时间戳,并将其转换为秒和纳秒。 |
attributes.@version |
read_only_udm.metadata.product_version |
直接从 attributes.@version 字段映射。 |
attributes.level_value |
read_only_udm.security_result.about.resource.attribute.labels |
从 attributes.level_value 字段中提取,并作为标签添加到 security_result 对象中。 |
attributes.logger_name |
read_only_udm.principal.application |
直接从 attributes.logger_name 字段映射。 |
attributes._trace.baggage._sli_service |
read_only_udm.additional.fields |
直接从 attributes._trace.baggage._sli_service 字段映射,并添加为其他字段。 |
attributes._trace.baggage.device_id |
read_only_udm.principal.asset.asset_id |
直接从 attributes._trace.baggage.device_id 字段映射,前缀为“Device Id:”。 |
attributes._trace.origin.operation |
read_only_udm.metadata.product_event_type |
直接从 attributes._trace.origin.operation 字段映射。 |
caller |
read_only_udm.security_result.about.resource.attribute.labels |
从 caller 字段中提取,并作为标签添加到 security_result 对象中。 |
component |
read_only_udm.security_result.about.resource.attribute.labels |
从 component 字段中提取,并作为标签添加到 security_result 对象中。 |
context.AlertName |
read_only_udm.security_result.threat_name |
直接从 context.AlertName 字段映射。 |
context.BusArch |
read_only_udm.security_result.about.resource.attribute.labels |
从 context.BusArch 字段中提取,并作为标签添加到 security_result 对象中。 |
context.CANDBVersion |
read_only_udm.security_result.about.resource.attribute.labels |
从 context.CANDBVersion 字段中提取,并作为标签添加到 security_result 对象中。 |
context.esn |
read_only_udm.security_result.about.resource.attribute.labels |
从 context.esn 字段中提取,并作为标签添加到 security_result 对象中。 |
context.ftcpVersion |
read_only_udm.security_result.about.resource.attribute.labels |
从 context.ftcpVersion 字段中提取,并作为标签添加到 security_result 对象中。 |
context.ingestMessageId |
read_only_udm.security_result.about.resource.attribute.labels |
从 context.ingestMessageId 字段中提取,并作为标签添加到 security_result 对象中。 |
context.redactedVin |
read_only_udm.security_result.about.resource.attribute.labels |
从 context.redactedVin 字段中提取,并作为标签添加到 security_result 对象中。 |
context.vehicleId |
read_only_udm.security_result.about.resource.attribute.labels |
从 context.vehicleId 字段中提取,并作为标签添加到 security_result 对象中。 |
date |
read_only_udm.metadata.collected_timestamp |
系统会从 date 字段(在解析器中重命名为 date1 )中提取收集的时间戳,并将其转换为秒和纳秒。 |
host |
read_only_udm.principal.hostname |
直接从 host 字段映射。 |
message |
read_only_udm.security_result.about.resource.attribute.labels |
系统会解析 message 字段,并使用其中的部分内容来填充 summary 和 json_data 字段。其余部分会被视为键值对,并作为标签添加到 security_result 对象中。 |
msg |
read_only_udm.security_result.about.resource.attribute.labels |
从 msg 字段中提取,并作为标签添加到 security_result 对象中。 |
service |
read_only_udm.metadata.product_name |
直接从 service 字段映射。 |
status |
read_only_udm.security_result.severity |
严重程度取决于 status 字段。“INFO”“DEBUG”“debug”和“info”映射到“LOW”“WARN”映射到“MEDIUM”,其他值在提供的代码段中未明确映射。 |
tags |
read_only_udm.additional.fields |
系统会将 tags 数组中的每个标记解析为键值对,并将其添加为其他字段。 |
不适用 | read_only_udm.metadata.event_type |
如果存在 host 字段,则设置为“STATUS_UPDATE”;否则,设置为“GENERIC_EVENT”。 |
更改
2023-07-21
- 已创建解析器。