收集 Ansible AWX 日志

支持的语言:

概览

此解析器从 Ansible AWX 中提取 JSON 格式的日志数据,并将其转换为统一数据模型 (UDM)。它可处理各种日志格式,提取时间戳、IP 地址、主机信息和事件详情等相关字段,并将其映射到相应的 UDM 字段,同时还可处理特定的边缘情况,并使用标签和元数据丰富数据。

准备工作

确保您满足以下前提条件:

  • Google SecOps 实例。
  • 对 Ansible AWX 的特权访问权限。

设置 Feed

您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:

  • SIEM 设置 > Feed
  • 内容中心 > 内容包

通过“SIEM 设置”>“Feed”设置 Feed

如需配置 Feed,请按以下步骤操作:

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

设置来自内容中心的 Feed

为以下字段指定值:

  • 拆分分隔符:用于分隔日志行的分隔符,例如 \n

高级选项

  • Feed 名称:用于标识 Feed 的预填充值。
  • 来源类型:用于将日志收集到 Google SecOps 中的方法。
  • 资源命名空间:与 Feed 关联的命名空间。
  • 提取标签:应用于相应 Feed 中所有事件的标签。

  • 点击生成密钥,生成用于对此 Feed 进行身份验证的密钥。

  • 复制并存储密钥。您将无法再次查看此密钥。如有需要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥失效。

  • 详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。

为 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 密钥指定为标头,而不是在网址中指定。如果您的 Webhook 客户端不支持自定义标头,您可以使用以下格式的查询参数指定 API 密钥和密钥:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

替换以下内容:

  • ENDPOINT_URL:Feed 端点网址。
  • API_KEY:用于向 Google Security Operations 进行身份验证的 API 密钥。
  • SECRET:您生成的用于验证 Feed 的密钥。

在 Ansible AWX 中配置 Webhook

  1. 登录您的 AWX 实例。
  2. 前往管理下的通知部分。
  3. 点击添加
  4. 配置 Webhook 设置:

    • 名称:为 webhook 提供一个描述性名称(例如 Google SecOps Webhook)。
    • 类型:从列表中选择 Webhook
    • 目标网址:输入 Google SecOps API 端点网址。
    • HTTP Method:选择 POST

    可选:HTTP 标头:添加身份验证或内容类型所需的任何标头。例如,您可能需要添加包含不记名令牌的 Authorization 标头。如需了解具体的标头要求,请参阅 Google SecOps 文档。

  5. 点击保存以创建 Webhook。

  6. 前往资源下的项目

  7. 选择要与 Webhook 关联的项目。

  8. 在所选项目中,前往通知标签页。

  9. 为之前创建的 Webhook 通知选择要开启的触发器开始 | 成功 | 失败

现在,通知将应用于与项目关联的所有模板。您可以前往每个模板中的通知字段,手动停用这些通知。

UDM 映射表

日志字段 UDM 映射 逻辑
agent.ephemeral_id observer.labels.value 原始日志中的 agent.ephemeral_id 值。
agent.hostname observer.hostname 原始日志中的 agent.hostname 值。
agent.id observer.asset_id “filebeat:”与原始日志中 agent.id 的值的串联。
agent.name observer.user.userid 原始日志中的 agent.name 值。
agent.type observer.application 原始日志中的 agent.type 值。
agent.version observer.platform_version 原始日志中的 agent.version 值。
cloud.availability_zone principal.resource.attribute.labels.value 原始日志中的 cloud.availability_zone 值。
cloud.instance.id principal.resource.product_object_id 原始日志中的 cloud.instance.id 值。
cloud.instance.name principal.resource.name 原始日志中的 cloud.instance.name 值。
cloud.machine.type principal.resource.attribute.labels.value 原始日志中的 cloud.machine.type 值。
cloud.provider principal.resource.attribute.labels.value 原始日志中的 cloud.provider 值。
event1 metadata.description 原始日志中的 event1 值。如果不存在 event1,则使用 message 的值。
event1_data.host principal.hostname 原始日志中的 event1_data.host 值。如果不存在 host_namehost,则用作后备。
event1_data.remote_addr principal.ip 使用 Grok 模式从 event1_data.remote_addr 中提取的 IP 地址。
event1_data.task security_result.detection_fields.value 原始日志中的 event1_data.task 值。
event1_data.task_path principal.process.file.full_path 原始日志中的 event1_data.task_path 值。
event1_data.task_uuid security_result.detection_fields.value 原始日志中的 event1_data.task_uuid 值。
event1_data.uuid metadata.product_log_id 原始日志中的 event1_data.uuid 值。
event1_display security_result.description 原始日志中的 event1_display 值。
host principal.hostname 原始日志中的 host 值。如果不存在 host_name,则用作后备。如果它是数字,则会转换为字符串。
host.architecture target.asset.hardware.cpu_platform 原始日志中的 host.architecture 值。
host.fqdn target.administrative_domain 原始日志中的 host.fqdn 值。
host.hostname target.hostname 原始日志中的 host.hostname 值。
host.id target.asset.asset_id “主机 ID:”与原始日志中的 host.id 值串联。
host.ip target.asset.ip 原始日志中 host.ip 数组的值。
host.mac target.mac 原始日志中 host.mac 数组的值。
host.os.codename target.asset.attribute.labels.value 原始日志中的 host.os.codename 值。
host.os.kernel target.platform_patch_level 原始日志中的 host.os.kernel 值。
host.os.name target.asset.attribute.labels.value 原始日志中的 host.os.name 值。
host.os.platform target.platform 如果 host.os.platform 的值为“debian”,则 UDM 字段设置为“LINUX”。
host.os.version target.platform_version 原始日志中的 host.os.version 值。
host_name principal.hostname 原始日志中的 host_name 值。
input.type network.ip_protocol 如果 input.type 的值为“tcp”,则 UDM 字段设置为“TCP”。
level security_result.severity 根据 level 的值:“DEBUG”“INFO”“AUDIT”映射到“INFORMATIONAL”;“ERROR”映射到“ERROR”;“WARNING”映射到“MEDIUM”。
level security_result.severity_details 原始日志中的 level 值。
log.source.address principal.ip 使用 Grok 模式从 log.source.address 中提取的 IP 地址。
log.source.address principal.port 使用 grok 模式从 log.source.address 中提取的端口。
logger_name intermediary.application 原始日志中的 logger_name 值。
message metadata.description 原始日志中的 message 值。如果不存在 event1,则用作后备。
metadata.event_type metadata.event_type 由解析器逻辑根据是否存在某些字段来确定。如果存在 log.source.addresshost.ip,则为“NETWORK_CONNECTION”。如果存在 principal_hostnameevent1_data.remote_addr,则为“STATUS_UPDATE”。否则为“GENERIC_EVENT”。
metadata.log_type metadata.log_type 硬编码为“ANSIBLE_AWX”。
metadata.product_name metadata.product_name 硬编码为“ANSIBLE_AWX”。
metadata.vendor_name metadata.vendor_name 硬编码为“ANSIBLE_AWX”。
parent_uuid security_result.detection_fields.value 原始日志中的 parent_uuid 值。
principal.resource.resource_type principal.resource.resource_type 如果存在 cloud.instance.name,则硬编码为“VIRTUAL_MACHINE”。
observer.labels.key observer.labels.key 硬编码为“ephemeral_id”。
principal.resource.attribute.labels.key principal.resource.attribute.labels.key 根据所映射的字段,硬编码为“machine_type”“provider”或“availability_zone”。
security_result.detection_fields.key security_result.detection_fields.key 根据所映射的字段,硬编码为“parent_uuid”“task”或“task_uuid”。
target.asset.attribute.labels.key target.asset.attribute.labels.key 根据要映射的字段硬编码为“codename”或“os_name”。
timestamp metadata.event_timestamp 原始日志中的 timestamp 值,经过解析并转换为时间戳。
timestamp timestamp 原始日志中的 timestamp 值,经过解析并转换为时间戳。

需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。