Azure AD-Keycloak-Kibana SSO用户/组角色映射配置咨询
可行性结论
你提出的「Azure AD - Keycloak - Kibana全链路SSO权限透传」方案完全可实现,全程不需要在Kibana侧单独维护独立的用户、组、角色体系。核心逻辑很简单:让Keycloak把从Azure AD同步拿到的用户组、角色属性,以标准化的令牌声明形式传给Kibana,由Kibana直接消费这些声明匹配自身权限规则即可。
前置校验项
在做透传配置前,先把现有链路的基础逻辑核对清楚,避免后面配置走弯路:
- 验证Keycloak和Azure AD的组映射真的生效:找一个已经加入Azure AD指定组的测试账号,在Keycloak的用户详情页查看生成的会话令牌,确认令牌里已经携带完整的Azure AD组名、角色属性,不存在字段空值、组名被截断、权限丢失的情况。
- 确认Keycloak给Kibana使用的客户端协议匹配:如果Kibana通过OIDC协议对接Keycloak,先梳理好需要透传的权限字段,避免后续被客户端的权限范围规则把字段拦截。
核心配置步骤
Keycloak侧的声明透传配置
- 定位到对接Kibana的Keycloak客户端,创建专属的协议映射器:
- 映射器类型选
User Attribute或者Group Membership,把Azure AD同步过来的组属性,映射为Kibana可识别的令牌声明——比如可以直接用通用的groups声明携带组值,也可以自定义kibana_roles字段专门给Kibana传递权限 - 一定要同时勾选「在ID令牌中包含」、「在访问令牌中包含」两个选项,不然Kibana从登录返回的ID令牌里根本读不到权限值
- 映射器类型选
- 把刚创建的映射器绑定到该客户端的默认可选范围中,避免用户登录时因令牌范围不匹配,无法获取对应的权限声明
Kibana侧的权限消费配置
- 调整Kibana的认证提供器配置,仅保留对接Keycloak的OIDC认证方式,关闭本地账号密码登录、匿名访问等内置认证渠道
- 配置令牌声明到Kibana内置角色的映射规则:在OIDC配置项中,指定从哪个字段读取权限值,比如将
roles_key设置为之前定义的组声明字段名 - 提前完成Kibana内置角色(如
kibana_admin、viewer、superuser)与Azure AD组名的一一对应关系,完全不需要在Kibana侧手动创建用户、组实体:只要Azure AD侧的组名与映射的Kibana内置角色名匹配,用户通过SSO登录时就会自动继承对应角色的权限 - 关闭Kibana对SSO登录用户的本地账号激活校验,确保用户第一次通过Azure AD登录时,不需要在Kibana侧额外走账号初始化流程,直接就能获得匹配的权限
常见踩坑提示
- 如果Azure AD返回的组字段是无意义的对象GUID,一定要在Keycloak的属性映射环节提前将GUID转换为可读的组名,不然Kibana拿到一堆无意义的ID,根本匹配不上正确的角色
- 不要把Keycloak本地存储的用户角色,和Azure AD同步过来的组角色混在同一个令牌声明里,不然很容易出现权限覆盖、权限叠加混乱的问题
- 排障时不要上来就乱改配置,先抓包查看Kibana登录流程中返回的ID令牌,确认令牌内确实携带了目标组/角色字段,字段正常后再调整Kibana的权限映射规则,能节省大量排障时间
内容的提问来源于stack exchange,提问作者Jaise George
相关产品推荐
相关产品推荐

