Kibana 权限控制详细配置详解(基于 X-Pack Security)
Kibana 的权限控制是 Elastic Stack 安全体系的重要组成部分,通过集成 Elasticsearch 的 X-Pack Security(现为 Elastic Security) 模块,实现用户认证、角色授权、空间隔离、数据访问控制等能力。
本文将从 基础概念、启用安全、用户管理、角色配置、空间隔离、索引级权限、实战示例 等多个维度,全面详解 Kibana 的权限控制机制。
一、权限控制核心组件
| 组件 | 说明 |
|---|---|
| Authentication(认证) | 验证用户身份(用户名/密码、LDAP、SAML、OAuth 等) |
| Authorization(授权) | 控制用户能访问哪些功能和数据(通过角色 Role 实现) |
| Roles(角色) | 一组权限的集合,可分配给用户 |
| Users(用户) | 具体的登录账户,关联一个或多个角色 |
| Spaces(工作空间) | 多租户隔离机制,实现不同团队/环境的仪表盘隔离 |
| Index Privileges(索引权限) | 控制用户对特定索引的读写权限(如 read, read_cross_cluster, all) |
✅ 所有安全功能由 Elasticsearch 提供,Kibana 仅作为前端展示和交互入口。
二、前提条件
- Elasticsearch 和 Kibana 版本 ≥ 6.8 或 7.x / 8.x
- 已安装 X-Pack(免费版已包含基础安全功能)
- 启用
security功能(默认在 8.x 开启)
三、启用安全功能(Security)
3.1 在 elasticsearch.yml 中启用安全
# elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.http.ssl.enabled: false # 可选,生产建议开启 HTTPS
修改后重启 Elasticsearch。
3.2 在 kibana.yml 中配置认证
# kibana.yml
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
# Kibana 自身账户(用于连接 ES)
elasticsearch.username: "kibana_system"
elasticsearch.password: "your_kibana_system_password"
# 启用登录界面
xpack.security.enabled: true
# 设置语言(可选)
i18n.locale: "zh-CN"
重启 Kibana。
3.3 初始化内置用户密码
Elasticsearch 提供多个内置用户:
| 用户 | 用途 |
|---|---|
elastic | 超级管理员(拥有所有权限) |
kibana_system | Kibana 连接 ES 使用 |
logstash_system | Logstash 使用 |
beats_system | Beats 使用 |
设置密码方式:
# 自动生成所有内置用户密码
bin/elasticsearch-setup-passwords auto
# 或交互式设置
bin/elasticsearch-setup-passwords interactive
记录
elastic用户的密码,用于首次登录 Kibana。
四、登录 Kibana 并进入安全管理
- 浏览器访问:
http://your-kibana:5601 - 使用
elastic用户登录 - 进入左侧菜单 → Stack Management → Security
五、用户(Users)管理
5.1 创建新用户
路径:Stack Management → Security → Users → Create user
| 字段 | 示例值 | 说明 |
|---|---|---|
| Username | analyst_user | 登录名 |
| Full name | 数据分析员 | 显示名称 |
analyst@company.com | 邮箱 | |
| Password | StrongPass123! | 密码 |
| Roles | kibana_analyst, viewer | 分配角色 |
✅ 支持批量创建(通过 API)
5.2 通过 API 创建用户(可自动化)
POST http://localhost:9200/_security/user/data_analyst
Content-Type: application/json
{
"password": "MySecurePass123!",
"roles": [ "kibana_analyst", "viewer" ],
"full_name": "数据分析师",
"email": "analyst@company.com"
}
六、角色(Roles)配置(核心)
角色定义了用户“能做什么”。
6.1 内置角色(常用)
| 角色 | 权限说明 |
|---|---|
superuser | 超级管理员,全量权限(慎用) |
kibana_admin | 可访问所有 Kibana 功能 |
kibana_user | 可使用 Kibana,但不能管理用户 |
viewer | 只读权限(Discover、Dashboard 只读) |
monitoring_user | 可查看集群监控 |
machine_learning_user | 可使用 ML 功能 |
可组合使用,如
kibana_user + viewer
6.2 自定义角色(推荐)
路径:Stack Management → Security → Roles → Create role
示例:创建 sales_dashboard_viewer 角色
{
"name": "sales_dashboard_viewer",
"elasticsearch": {
"indices": [
{
"names": [ "sales-*" ],
"privileges": [ "read", "view_index_metadata" ]
}
]
},
"kibana": [
{
"feature": {
"dashboard": [ "read" ],
"discover": [ "read" ],
"visualize": [ "read" ]
},
"spaces": [ "sales" ] // 仅限 sales 空间
}
]
}
✅ 实现:只能在
sales空间中查看sales-*索引的仪表盘。
七、工作空间(Spaces)隔离(多租户)
Spaces 是 Kibana 的“多租户”方案,用于隔离不同团队、项目或环境。
7.1 创建 Space
路径:Stack Management → Spaces → Create space
| 字段 | 示例 |
|---|---|
| Space ID | devops(唯一标识) |
| Name | 运维监控 |
| Description | 生产环境监控仪表盘 |
| Color / Icon | 自定义 |
7.2 为 Space 分配角色权限
在创建 Space 后,可为每个角色设置访问权限:
All Kibana privileges:管理员Read-only:只读用户Custom:自定义功能权限
例如:让
devops_team角色在devops空间中拥有编辑权限。
八、索引级权限控制(数据隔离)
通过角色中的 elasticsearch.indices 配置,实现 字段级、索引级数据访问控制。
8.1 示例:限制只能查看特定索引
"elasticsearch": {
"indices": [
{
"names": [ "app-logs-prod-*" ],
"privileges": [ "read", "view_index_metadata" ]
}
]
}
8.2 字段级安全(Field-Level Security)
隐藏敏感字段(如 user.password, credit_card):
"fields": {
"except": [ "user.password", "credit_card" ] // 隐藏这些字段
}
或仅允许查看某些字段:
"fields": {
"include": [ "user.name", "user.email", "timestamp" ]
}
⚠️ 用户在 Discover 中将看不到被隐藏的字段。
8.3 文档级安全(Document-Level Security)
使用查询 DSL 过滤可访问的文档:
"query": "{\"match\": {\"region\": \"华东\"}}"
效果:用户只能看到
region: 华东的日志。
九、实战案例:搭建“销售团队只读仪表盘”
需求:
- 销售团队只能查看
sales-*索引 - 只能在
sales空间中查看 Dashboard - 不能修改、删除、导出
- 隐藏客户手机号字段
步骤:
1. 创建 Space:sales
2. 创建角色:sales_viewer
{
"name": "sales_viewer",
"elasticsearch": {
"indices": [
{
"names": [ "sales-*" ],
"privileges": [ "read", "view_index_metadata" ],
"fields": { "except": [ "customer.phone" ] }
}
]
},
"kibana": [
{
"feature": {
"dashboard": [ "read" ],
"discover": [ "read" ],
"visualize": [ "read" ]
},
"spaces": [ "sales" ]
}
]
}
3. 创建用户:sales_user,分配 sales_viewer 角色
4. 在 sales 空间中导入销售 Dashboard
5. 测试登录:sales_user 只能查看销售数据,且看不到手机号
十、高级认证方式(企业级)
| 认证方式 | 说明 |
|---|---|
| LDAP / Active Directory | 与企业 AD 集成,统一登录 |
| SAML SSO | 支持 Okta、Azure AD、OneLogin 等 |
| OpenID Connect | 与 Keycloak、Auth0 等集成 |
| PKI(证书认证) | 基于客户端证书登录 |
需在
elasticsearch.yml和kibana.yml中配置,适合大型企业。
十一、最佳实践建议
- 最小权限原则:不要随意赋予
superuser权限 - 使用 Spaces 隔离环境:
dev/test/prod - 定期审计用户权限:通过 API 导出用户角色列表
- 启用审计日志(Audit Log):
# elasticsearch.yml
xpack.security.audit.enabled: true
xpack.security.audit.log.events.include: ["access_denied", "authentication_failed"]
- 密码策略:设置复杂度、过期时间
- 备份角色和用户配置:避免误删
十二、常见问题排查
| 问题 | 解决方案 |
|---|---|
| 用户登录失败 | 检查用户名密码、账户是否被禁用 |
| 无法看到 Dashboard | 检查 Space 是否匹配、角色是否有 read 权限 |
| Discover 看不到数据 | 检查索引权限、字段是否被隐藏 |
| 权限修改不生效 | 清除浏览器缓存,重新登录 |
Kibana 报错 Forbidden | 检查 kibana_system 用户密码是否正确 |
十三、参考资源
-
官方文档:
👉 https://www.elastic.co/guide/en/kibana/current/security-overview.html -
角色权限矩阵:
👉 https://www.elastic.co/guide/en/kibana/current/kibana-privileges.html -
REST API 文档:
👉 https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api.html
结语
Kibana 的权限控制体系强大而灵活,结合 角色、空间、索引、字段、文档级安全,可实现精细化的多租户数据隔离与访问控制。
合理配置权限,不仅能保障数据安全,还能提升团队协作效率。
376

被折叠的 条评论
为什么被折叠?



