关于 kibana-audit
kibana-audit 是用于配置和调查 Kibana 审计日志的技能,面向负责 Kibana 安全与合规的运维人员。它涵盖事件筛选、日志轮转,以及通过 trace.id 与 Elasticsearch 审计记录关联。
主要功能
- 01配置 Kibana 审计日志
- 02设置文件或控制台输出
- 03按事件和类别过滤日志
- 04调查登录、对象及空间事件
- 05通过 trace.id 关联 Elasticsearch 日志
- 06使用 Filebeat 发送日志至 Elasticsearch
适用场景
- 01为合规要求启用审计记录
- 02追查仪表板或其他保存对象的删除
- 03降低 saved_object_find 事件产生的日志量
- 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 | 为已保存对象打开了一个 PIT | database |
saved_object_close_point_in_time | 为已保存对象关闭了一个 PIT | database |
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 技能。
关联工作流
- 在 Kibana 审计日志中找到可疑事件。
- 提取其
trace.id值。 - 在 ES 审计索引(
.security-audit-*)中搜索所有具有相同trace.id的事件。 - 查看合并后的时间线,了解 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 天。
部署兼容性
| 功能 | 自行管理 | ECH | Serverless |
|---|---|---|---|
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 控制台或其客户团队。