如何在Kibana 8.5.3中对特定用户屏蔽部分字段值?
Kibana 8.5.3 特定用户屏蔽/隐藏字段数值的解决方案
方法一:字段级安全(Field-Level Security)(官方推荐,权限层面控制)
这是最安全的方案,通过角色权限严格限制用户对字段的访问:
- 配置Elasticsearch角色
进入Kibana的Stack Management → Roles,新建或编辑目标角色:
- 在Index Privileges区域添加目标索引/索引模式;
- 在Field Security模块选择模式:
- 选Exclude:输入需要屏蔽的字段名(如
phone,email),该角色下用户将完全无法访问这些字段; - 选Include:仅列出允许查看的字段,反向实现敏感字段屏蔽。
- 选Exclude:输入需要屏蔽的字段名(如
- 配置Elasticsearch角色
- 关联用户与角色
进入Stack Management → Users,找到目标用户,在Roles选项卡添加上述配置好的角色,保存生效。
- 关联用户与角色
方法二:索引模式隐藏字段(界面层隐藏)
若仅需在Kibana界面隐藏字段(底层仍可通过Dev Tools查询,适合非敏感场景):
- 进入Stack Management → Index Patterns,找到目标索引模式;
- 点击Edit pattern,在Fields列表中找到目标字段,点击右侧菜单选择Hide field from index pattern;
- 保存修改后,该索引模式下所有用户均无法在Discover、可视化等界面看到该字段。
方法三:脚本字段替换敏感内容(保留字段但屏蔽部分值)
如果需要保留字段显示,但对内容打码(如手机号中间四位隐藏):
- 进入Stack Management → Index Patterns,选择目标索引模式后点击Scripted fields;
- 点击Add scripted field,设置字段名(如
masked_phone),脚本类型选Painless;
- 点击Add scripted field,设置字段名(如
- 输入Painless脚本实现内容替换,示例(手机号打码):
def phone = doc['phone.keyword'].value; if (phone != null && phone.length() == 11) { return phone.substring(0,3) + '****' + phone.substring(7); } return phone;
- 保存后,在Discover或可视化中使用该脚本字段替代原字段,同时可通过方法二隐藏原字段,实现内容屏蔽。
内容的提问来源于stack exchange,提问作者Mr White
相关产品推荐
相关产品推荐

