如何将现有身份认证服务与Kibana、OpenDistro集成实现用户身份验证
自定义Node.js身份认证服务与OpenDistro Kibana集成方案
前置准备
- 你的Node.js认证服务需支持OIDC 1.0协议或者SAML 2.0协议,优先选OIDC,适配成本更低
- 确认OpenDistro版本,不同版本的security插件配置项存在差异,配置前先核对对应版本文档的参数规则
- 提前拿到Node.js认证服务的三个核心参数:授权端点地址、Token校验端点地址、用户信息拉取端点地址,以及提前在认证服务中配置好Kibana的回调地址(一般是
https://<你的kibana域名>/auth/openid/login)
核心配置步骤
第一步:修改OpenDistro Security配置
调整Elasticsearch侧的config/opendistro-security/config.yml配置,修改authc模块内容:
opendistro_security: authc: openid_auth_domain: http_enabled: true transport_enabled: true order: 0 http_authenticator: type: openid challenge: false config: openid_connect_url: "你的Node.js认证服务的OIDC元数据地址" subject_key: "preferred_username" # 对应你认证服务返回的用户名字段,可自定义修改 roles_key: "roles" # 对应你认证服务返回的用户角色字段,可自定义修改 authentication_backend: type: noop # 身份校验全部走OIDC服务,不需要额外后端校验
修改完成后执行securityadmin脚本把配置推送到ES集群,命令参考:sh plugins/opendistro_security/tools/securityadmin.sh -cd config/opendistro-security/ -icl -nhnv -cacert config/root-ca.pem -cert config/kirk.pem -key config/kirk-key.pem
证书路径根据你实际部署的路径调整即可。
第二步:修改Kibana配置文件(kibana.yml)
添加如下OIDC相关配置:
opendistro_security.auth.type: "openid" opendistro_security.openid.connect_url: "你的Node.js认证服务的OIDC元数据地址" opendistro_security.openid.client_id: "你在Node.js认证服务中注册的Kibana客户端ID" opendistro_security.openid.client_secret: "你在Node.js认证服务中注册的Kibana客户端密钥" opendistro_security.openid.base_redirect_url: "https://<你的kibana域名>" opendistro_security.openid.scope: "openid profile roles email" # 按需调整请求的权限范围 opendistro_security.cookie.secure: true # 如果Kibana是HTTPS访问必须开启,HTTP的话设为false
修改完成后重启Kibana服务生效。
第三步:角色映射配置
你需要把Node.js认证服务返回的用户角色,和OpenDistro内置的Kibana访问权限做映射,修改config/opendistro-security/roles_mapping.yml:
# 示例:把认证服务返回的kibana_admin角色映射到OpenDistro的all_access权限 all_access: reserved: false backend_roles: - "kibana_admin" users: [] # 示例:把普通用户角色映射到kibana_user只读权限 kibana_user: reserved: false backend_roles: - "普通用户角色标识" users: []
修改完成后同样执行securityadmin脚本推送配置到ES集群即可。
常见调试问题
- 如果跳转认证服务后报错,优先检查回调地址是否和你在Node.js认证服务中注册的完全一致,包括端口、路径、HTTP/HTTPS协议
- 如果登录成功后跳转Kibana报权限不足,检查roles_key配置的字段是否和认证服务返回的用户信息里的角色字段名称完全匹配,同时确认角色映射配置正确
- 如果token校验失败,检查认证服务返回的id_token签名算法是否是OpenDistro支持的RS256等非对称加密算法,不要用HS256
内容的提问来源于stack exchange,提问作者Shahana N
相关产品推荐
相关产品推荐

