收集 WordPress CMS 日志

支持范围:

此解析器会从 JSON 或纯文本格式的消息中提取 WordPress CMS 日志。它可处理 JSON 和非 JSON 格式的日志,解析相关字段并将其映射到 UDM,包括用户详细信息、网络信息、资源属性和安全结果详细信息。解析器还会执行多项数据转换,例如转换数据类型、合并字段以及处理 Kubernetes 和其他资源的特定日志模式。

准备工作

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

  • Google SecOps 实例。
  • 对 WordPress 网站的特权访问权限。
  • 可启用网络钩子功能的插件(例如 WP Webhooks)。

设置 Feed

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

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

为 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 而生成的密钥。

配置 WordPress Webhook

  1. 通过 WordPress 插件目录安装并激活 WP Webhooks 插件(或您选择的 webhook 插件)。
  2. 在 WordPress 管理员菜单中,前往 WP Webhooks 子菜单(通常位于“设置”下)。
  3. 点击顶部栏菜单中的发送数据。
  4. 选择将触发 webhook 的 WordPress 操作。常见示例包括 publish_post(发布新帖子时)、user_register(新用户注册时)或 comment_post(发布新评论时)。这取决于您选择并发送到 Google SecOps 的数据。
  5. 点击添加网络钩子网址。
  6. 配置 Webhook:
    • 名称:为 webhook 指定一个描述性名称(例如,Google SecOps Feed)。
    • 网络钩子网址:粘贴 Google SecOps 端点网址。
  7. 点击 Save Webhook(保存 Webhook)。

UDM 映射表

日志字段 UDM 映射 逻辑
ClientIP principal.ip 客户端的 IP 地址是从原始日志中的 ClientIP 字段中提取的。
Code target.resource.attribute.labels.key 值“Code”被指定为 target.resource.attribute.labels 对象中的键。
Code target.resource.attribute.labels.value 原始日志中 Code 字段的值会作为 target.resource.attribute.labels 对象中的值进行分配。
CurrentUserID target.user.userid 原始日志中的 CurrentUserID 会转换为字符串,并映射到 target.user.userid 字段。
EditUserLink target.url 原始日志中的 EditUserLink 会映射到 target.url 字段。
EventType metadata.product_event_type 原始日志中的 EventType 会映射到 metadata.product_event_type 字段。
FirstName target.user.first_name 原始日志中的 FirstName 会映射到 target.user.first_name 字段。
insertId metadata.product_log_id 原始日志中的 insertId 会映射到 metadata.product_log_id 字段。
labels.compute.googleapis.com/resource_name additional.fields.key 值“Resource Name”被指定为 additional.fields 对象中的键。
labels.compute.googleapis.com/resource_name additional.fields.value.string_value 原始日志中的 labels.compute.googleapis.com/resource_name 值会作为字符串值分配给 additional.fields 对象。
labels.k8s-pod/app_kubernetes_io/instance target.resource.attribute.labels.key 值“Kubernetes IO Instance”被指定为 target.resource.attribute.labels 对象中的键。
labels.k8s-pod/app_kubernetes_io/instance target.resource.attribute.labels.value 原始日志中 labels.k8s-pod/app_kubernetes_io/instance 的值会作为 target.resource.attribute.labels 对象中的值进行分配。
labels.k8s-pod/app_kubernetes_io/managed-by target.resource.attribute.labels.key 值“Kubernetes IO Instance Manager”被指定为 target.resource.attribute.labels 对象中的键。
labels.k8s-pod/app_kubernetes_io/managed-by target.resource.attribute.labels.value 原始日志中 labels.k8s-pod/app_kubernetes_io/managed-by 的值会作为 target.resource.attribute.labels 对象中的值进行分配。
labels.k8s-pod/app_kubernetes_io/name target.resource.attribute.labels.key 值“Kubernetes IO Instance Name”被指定为 target.resource.attribute.labels 对象中的键。
labels.k8s-pod/app_kubernetes_io/name target.resource.attribute.labels.value 原始日志中 labels.k8s-pod/app_kubernetes_io/name 的值会作为 target.resource.attribute.labels 对象中的值进行分配。
labels.k8s-pod/controller-revision-hash target.resource.attribute.labels.key 值“Controller Revision Hash”被指定为 target.resource.attribute.labels 对象中的键。
labels.k8s-pod/controller-revision-hash target.resource.attribute.labels.value 原始日志中 labels.k8s-pod/controller-revision-hash 的值会作为 target.resource.attribute.labels 对象中的值进行分配。
labels.k8s-pod/helm_sh/chart target.resource.attribute.labels.key 值“Kubernetes IO Instance Manager SH”被指定为 target.resource.attribute.labels 对象中的键。
labels.k8s-pod/helm_sh/chart target.resource.attribute.labels.value 原始日志中 labels.k8s-pod/helm_sh/chart 的值会作为 target.resource.attribute.labels 对象中的值进行分配。
labels.k8s-pod/k8s-app target.resource.attribute.labels.key 值“Application”被指定为 target.resource.attribute.labels 对象中的键。
labels.k8s-pod/k8s-app target.resource.attribute.labels.value 原始日志中 labels.k8s-pod/k8s-app 的值会作为 target.resource.attribute.labels 对象中的值进行分配。
labels.k8s-pod/pod-template-generation target.resource.attribute.labels.key 值“Pod Template Generation”被指定为 target.resource.attribute.labels 对象中的键。
labels.k8s-pod/pod-template-generation target.resource.attribute.labels.value 原始日志中 labels.k8s-pod/pod-template-generation 的值会作为 target.resource.attribute.labels 对象中的值进行分配。
labels.k8s-pod/pod-template-hash target.resource.attribute.labels.key 值“Pod Template Hash”被指定为 target.resource.attribute.labels 对象中的键。
labels.k8s-pod/pod-template-hash target.resource.attribute.labels.value 原始日志中 labels.k8s-pod/pod-template-hash 的值会作为 target.resource.attribute.labels 对象中的值进行分配。
LastName target.user.last_name 原始日志中的 LastName 会映射到 target.user.last_name 字段。
logName target.resource.attribute.labels.key 值“Log Name”被指定为 target.resource.attribute.labels 对象中的键。
logName target.resource.attribute.labels.value 原始日志中 logName 字段的值会作为 target.resource.attribute.labels 对象中的值进行分配。
receiveTimestamp metadata.event_timestamp 系统会解析原始日志中的 receiveTimestamp,并将其映射到 metadata.event_timestamp 字段。
resource.labels.cluster_name additional.fields.key 值“Cluster Name”被指定为 additional.fields 对象中的键。
resource.labels.cluster_name additional.fields.value.string_value 原始日志中的 resource.labels.cluster_name 值会作为字符串值分配给 additional.fields 对象。
resource.labels.cluster_name target.resource.resource_type 如果存在 resource.labels.cluster_name,则系统会将值“CLUSTER”分配给 target.resource.resource_type。
resource.labels.container_name metadata.product_event_type 如果 resource.type 为“k8s_container”,则 resource.labels.container_name 的值以及 resource.labels.namespace_name 用于构造 metadata.product_event_type。
resource.labels.container_name target.resource.name 原始日志中的 resource.labels.container_name 值会分配给 target.resource.name 字段。
resource.labels.location target.location.country_or_region 原始日志中的 resource.labels.location 值会分配给 target.location.country_or_region 字段。
resource.labels.namespace_name additional.fields.key 值“Namespace Name”被指定为 additional.fields 对象中的键。
resource.labels.namespace_name additional.fields.value.string_value 原始日志中的 resource.labels.namespace_name 值会作为字符串值分配给 additional.fields 对象。
resource.labels.namespace_name metadata.product_event_type 如果 resource.type 为“k8s_container”,则 resource.labels.namespace_name 的值以及 resource.labels.container_name 用于构造 metadata.product_event_type。
resource.labels.node_name metadata.product_event_type 如果 resource.type 为“k8s_node”,则 resource.labels.node_name 的值用于构造 metadata.product_event_type。
resource.labels.pod_name additional.fields.key 值“Pod Name”被指定为 additional.fields 对象中的键。
resource.labels.pod_name additional.fields.value.string_value 原始日志中的 resource.labels.pod_name 值会作为字符串值分配给 additional.fields 对象。
resource.labels.project_id additional.fields.key “项目 ID”值会作为键分配给 additional.fields 对象。
resource.labels.project_id additional.fields.value.string_value 原始日志中的 resource.labels.project_id 值会作为字符串值分配给 additional.fields 对象。
resource.type target.resource.resource_subtype 原始日志中的 resource.type 值会分配给 target.resource.resource_subtype 字段。
Roles target.user.user_role 原始日志中的 Roles 字段会转换为大写,并映射到 target.user.user_role 字段。
SessionID network.session_id 原始日志中的 SessionID 会映射到 network.session_id 字段。
sev security_result.severity sev 字段的值决定了 security_result.severity 的值。“INFO”或“NOTICE”映射到“INFORMATIONAL”,“WARN”映射到“MEDIUM”,“ERR”映射到“ERROR”。
TargetUsername target.user.user_display_name 原始日志中的 TargetUsername 会映射到 target.user.user_display_name 字段。
textPayload metadata.description 如果 resource.type 为“k8s_node”,则 textPayload 的值会映射到 metadata.description 字段。
textPayload network.application_protocol 系统会使用 grok 模式从 textPayload 字段中提取协议(例如 HTTP)。
textPayload network.http.method 使用 grok 模式从 textPayload 字段中提取 HTTP 方法(例如 GET、POST)。
textPayload network.http.referral_url 系统会使用 grok 模式从 textPayload 字段中提取网址。
textPayload network.http.response_code 系统会使用 grok 模式从 textPayload 字段中提取 HTTP 响应代码,并将其转换为整数。
textPayload network.received_bytes 使用 grok 模式从 textPayload 字段中提取接收的字节,并将其转换为无符号整数。
textPayload principal.ip 系统会使用 grok 模式从 textPayload 字段中提取来源 IP 地址。
textPayload security_result.description 说明是使用 grok 模式从 textPayload 字段中提取的。
textPayload target.file.full_path 系统会使用 grok 模式从 textPayload 字段中提取路径。
UserAgent network.http.user_agent 原始日志中的 UserAgent 会映射到 network.http.user_agent 字段。值“USER_RESOURCE_ACCESS”已分配给 metadata.event_type。

更新日志

查看此解析器的更新日志

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