mcpField
K
kibana-audit

kibana-audit

github.com/elastic安全6022.8k 次安装今天更新
代码仓库

关于 kibana-audit

kibana-audit 是用于配置和调查 Kibana 审计日志的技能,面向负责 Kibana 安全与合规的运维人员。它涵盖事件筛选、日志轮转,以及通过 trace.id 与 Elasticsearch 审计记录关联。

主要功能

  1. 01配置 Kibana 审计日志
  2. 02设置文件或控制台输出
  3. 03按事件和类别过滤日志
  4. 04调查登录、对象及空间事件
  5. 05通过 trace.id 关联 Elasticsearch 日志
  6. 06使用 Filebeat 发送日志至 Elasticsearch

适用场景

  1. 01为合规要求启用审计记录
  2. 02追查仪表板或其他保存对象的删除
  3. 03降低 saved_object_find 事件产生的日志量
  4. 04关联 Kibana 操作与 Elasticsearch 请求

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/elastic/agent-skills --skill kibana-audit

安装后在 Claude Code 中输入/kibana-audit确认已加载。

附带文件references/api-reference.md

详细介绍

Kibana 审计日志

通过 kibana.yml 启用并配置 Kibana 审计日志。Kibana 审计日志涵盖 Elasticsearch 无法感知的应用层安全事件:保存对象的增删改查(仪表板、可视化、索引模式、规则、案例)、登录/注销、会话过期、空间操作,以及 Kibana 级别的 RBAC 强制执行。

如需了解 Elasticsearch 审计日志(身份验证失败、访问授权/拒绝、安全配置变更),请参阅 elasticsearch-audit。如需了解身份验证和 API 密钥管理,请参阅 elasticsearch-authn。如需了解角色和用户管理,请参阅 elasticsearch-authz。

如需了解详细的事件类型、架构和关联查询,请参阅 references/api-reference.md。

部署说明: Kibana 审计配置因部署类型而异。详情请参阅 部署兼容性。

待完成的任务

  • 启用或禁用 Kibana 审计日志
  • 配置审计日志输出(滚动文件、控制台)
  • 过滤掉嘈杂的事件(例如 saved_object_find)
  • 调查保存对象的访问或删除事件
  • 跟踪 Kibana 登录/注销和会话活动
  • 监控空间的创建、修改和删除
  • 通过 trace.id 关联 Kibana 审计事件与 Elasticsearch 审计日志
  • 将 Kibana 审计日志发送到 Elasticsearch,以便统一查询

前提条件

项目说明
Kibana 访问权限有权访问 kibana.yml 文件系统(自管理)或 Cloud 控制台(ECH)
许可证审计日志需要 gold、platinum、enterprise 或 trial 许可证
Elasticsearch URL用于查询 .security-audit-* 以进行关联的集群端点

请向用户询问缺失的值。

启用 Kibana 审计日志

Kibana 审计通过 kibana.yml 静态配置(而非通过 API)。更改后必须重启 Kibana。

xpack.security.audit.enabled: true
xpack.security.audit.appender:
  type: rolling-file
  fileName: /path/to/kibana/data/audit.log
  policy:
    type: time-interval
    interval: 24h
  strategy:
    type: numeric
    max: 10

要禁用审计日志,请将 xpack.security.audit.enabled 设为 false,然后重启 Kibana。

Appender 类型
类型说明
rolling-file按轮转策略将日志写入文件。推荐使用。
console将日志写入标准输出。适用于容器化部署。

事件类型

Kibana 审计事件使用 ECS 格式,包含与 ES 审计相同的核心字段(event.action、event.outcome、user.name、 trace.id、@timestamp),以及 Kibana 专用字段,例如 kibana.saved_object.type、kibana.saved_object.id 和 kibana.space_id。

主要事件操作:

事件操作描述类别
saved_object_create创建了一个已保存对象database
saved_object_get读取了一个已保存对象database
saved_object_update更新了一个已保存对象database
saved_object_delete删除了一个已保存对象database
saved_object_find执行了已保存对象搜索database
saved_object_open_point_in_time为已保存对象打开了一个 PITdatabase
saved_object_close_point_in_time为已保存对象关闭了一个 PITdatabase
saved_object_resolve解析了一个已保存对象(别名重定向)database
login用户登录(成功或失败)authentication
logout用户已登出authentication
session_cleanup清理了一个过期会话authentication
access_agreement_acknowledged用户接受了访问协议authentication
space_create创建了一个 Kibana 空间web
space_update更新了一个 Kibana 空间web
space_delete删除了一个 Kibana 空间web
space_get检索了一个 Kibana 空间web

完整事件架构请参见 references/api-reference.md。

过滤策略

在 kibana.yml 中使用 ignore_filters 抑制嘈杂事件:

xpack.security.audit.ignore_filters:
  - actions: [saved_object_find]
    categories: [database]
过滤字段类型描述
actions列表要忽略的事件操作
categories列表要忽略的事件类别

如果事件匹配单个过滤器条目中指定的所有字段,则会被过滤掉。

与 Elasticsearch 审计日志关联

当 Kibana 代表用户向 Elasticsearch 发出请求时,两个系统都会记录相同的 trace.id(通过 X-Opaque-Id 标头传递)。这是关联两个审计日志中事件的主键。

前提条件: 必须通过集群设置 API 启用 Elasticsearch 审计。有关设置说明、事件类型和 ES 专用过滤策略,请参阅 elasticsearch-audit 技能。

关联工作流
  1. 在 Kibana 审计日志中找到可疑事件。
  2. 提取其 trace.id 值。
  3. 在 ES 审计索引(.security-audit-*)中搜索所有具有相同 trace.id 的事件。
  4. 查看合并后的时间线,了解 Kibana 操作触发了哪些 ES 层面的操作。

elasticsearch-audit 技能也从 ES 端介绍了此工作流——如果从 ES 审计 事件开始查找其来源 Kibana 操作,请使用该技能。

按 trace ID 搜索 ES 审计

对于一个可疑的 Kibana 事件(例如删除已保存对象),提取其 trace.id 并搜索 ES 审计索引:

curl -X POST "${ELASTICSEARCH_URL}/.security-audit-*/_search" \
  <auth_flags> \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "bool": {
        "filter": [
          { "term": { "trace.id": "'"${TRACE_ID}"'" } },
          { "range": { "@timestamp": { "gte": "now-24h" } } }
        ]
      }
    },
    "sort": [{ "@timestamp": { "order": "asc" } }]
  }'

次要关联字段:user.name、source.ip 和 @timestamp(按时间窗口关联)。

将 Kibana 审计日志发送到 Elasticsearch

若要同时查询 Kibana 审计事件和 ES 审计事件,请使用 Filebeat 将 Kibana 审计日志文件发送到 Elasticsearch 索引:

filebeat.inputs:
  - type: log
    paths: ["/path/to/kibana/data/audit.log"]
    json.keys_under_root: true
    json.add_error_key: true

output.elasticsearch:
  hosts: ["https://localhost:9200"]
  index: "kibana-audit-%{+yyyy.MM.dd}"

完成索引后,可以使用按 trace.id 筛选的多索引查询,同时搜索 .security-audit-*(ES)和 kibana-audit-*(Kibana)。

示例

启用 Kibana 审计以满足合规要求

请求:“启用 Kibana 审计日志,并保留 10 个轮转日志文件。”

xpack.security.audit.enabled: true
xpack.security.audit.appender:
  type: rolling-file
  fileName: /var/log/kibana/audit.log
  policy:
    type: time-interval
    interval: 24h
  strategy:
    type: numeric
    max: 10

应用后重启 Kibana。

调查已删除的仪表板

请求:“有人删除了一个仪表板。检查 Kibana 审计日志。”

在 Kibana 审计日志(或已索引的 kibana-audit-* 数据)中搜索 saved_object_delete 事件,并筛选 kibana.saved_object.type: dashboard。提取 trace.id,并与 ES 审计索引交叉对照,以查看底层的 Elasticsearch 操作。

减少已保存对象搜索产生的审计噪声

请求:“Kibana 审计日志太大了,因为不断产生 saved_object_find 事件。”

xpack.security.audit.ignore_filters:
  - actions: [saved_object_find]
    categories: [database]

这样可以抑制大量读取操作,同时保留创建、更新和删除事件。

指南

始终同时启用 Elasticsearch 审计

若要实现全面覆盖,请同时在 kibana.yml 和 Elasticsearch 中启用审计。如果没有 Kibana 审计,已保存对象访问和 Kibana 登录事件将不可见。如果没有 ES 审计,集群级操作将不可见。有关 ES 端设置,请参阅 elasticsearch-audit 技能。

使用 trace.id 进行关联

调查 Kibana 事件时,务必提取 trace.id,并在 ES 审计索引(.security-audit-*)中搜索。这样可以揭示单个 Kibana 操作触发的完整操作链。有关查询,请参阅上文的 与 Elasticsearch 审计日志关联。

筛除噪声较多的读取事件

在繁忙的 Kibana 实例中,saved_object_find 会产生大量事件。除非确实需要审计读取访问,否则请将其抑制。

将日志发送到 Elasticsearch,以便统一查询

Kibana 审计日志默认写入文件。通过 Filebeat 将其发送到 Elasticsearch,即可与 ES 审计事件一并进行程序化查询。

适当轮转和保留日志

配置滚动文件轮转,以避免磁盘空间耗尽。合规场景下,通常保留 30-90 天。

部署兼容性

功能自行管理ECHServerless
Kibana 审计(kibana.yml)是通过 Cloud UI不可用
滚动文件 appender是通过 Cloud UI不可用
控制台 appender是是不可用
忽略筛选器是通过 Cloud UI不可用
通过 trace.id 关联是是不可用
通过 Filebeat 发送到 ES是是不可用

**ECH 说明:**在 Cloud 控制台的部署编辑页面中启用 Kibana 审计。可通过 Cloud 控制台的部署日志访问日志文件。

Serverless 说明:

  • Serverless 上的 Kibana 审计日志记录无法由用户配置。安全事件由 Elastic 作为平台的一部分进行管理。
  • 如果用户询问 Serverless 上的 Kibana 审计,请引导其联系 Elastic Cloud 控制台或其客户团队。

评论

支持 Markdown