Jenkins RBAC 权限 对接Keycloak Group

2026-08-31 35 0

Keycloak 26 配置

  1. 新建/选择 Realm:进入目标 Realm(例如 my-realm)。

  2. 创建 Client

    • Client type: OpenID Connect
    • Client ID: demo-jenkins
    • 点击 Next,开启 Client authentication(即 Confidential 模式),保存。
  3. 设置重定向 URL

    • 在 Client 详情的 Settings 选项卡下配置:
      • Valid redirect URIs: http://<your-jenkins-ip-or-domain>:8080/securityRealm/finishLogin
      • Web origins: http://<your-jenkins-ip-or-domain>:8080
  4. 获取 Client Secret

    • 切换到 Credentials 选项卡,复制 Client Secret
  5. 添加 Groups Mapper(用于权限映射,可选,这里没用到,下面用的是User Client Role)

    • 切换到 Client scopes -> 点击 demo-jenkins-dedicated -> Configure new mapper -> 选择 Group Membership
    • Name: groups
    • Token Claim Name: groups
    • 确保开启 Add to user infoAdd to ID token

image.png

注意事项

  • 组和权限控制:建议配合 Matrix Authorization Strategy PluginRole-based Authorization Strategy 插件,使用 Keycloak 返回的 groups 或用户映射 Jenkins 角色。
  • 安全回退:在配置保存前,务必保留一个打开的管理页面,或确保已配置救砖工具(如通过修改 config.xml<useSecurity>true</useSecurity> 禁用安全),避免配置失误导致锁死。
  • 虚拟机建议先打快照

Jenkins 安装与切换插件

  1. 进入 Manage Jenkins -> Plugins -> Available plugins
  2. 搜索并安装 Keycloak Authentication Plugin (keycloak),安装后重启 Jenkins。
  3. 进入 Manage Jenkins -> Security
  4. Security Realm 处选择 Keycloak Authentication Plugin

获取 Keycloak 的 JSON 配置文件

keycloak-plugin 不需要手动一项项填 Endpoint,直接导入 Keycloak 生成的适配器 JSON 即可:

  1. 登录 Keycloak 管理后台,进入 Realm my-realm

  2. 点击 Clients -> 选择 demo-jenkins 客户端。

  3. 确保客户端配置:

    • Client authentication: ON (Confidential)
    • Valid redirect URIs: http://:8080/securityRealm/finishLogin 或 http://:8080/*
  4. 在右上角或 Action 菜单中找到 Download adapter config

  5. Format / Option 选择 Keycloak OIDC JSON

  6. 点击 Download 或直接复制显示的 JSON 文本。
    image.png

image.png

jenkins页面不要退出,因为使用keycloak用户登陆会没权限

配置用户管理员权限
image.png

Keycloak 组同步到Jenkins

说明:默认使用keycloak 登陆到jenkins 会没有权限
这里以组名为 backend-dev 进行权限配置,在jenkins role-strategy 将 backend-dev 加入group,勾选了 全局read 权限,这样使用keycloak用户登陆,就有简单的dashboard权限,不会报Access Denied,user 没有全部/Read权限。

注:这里全局read只勾选全部, 任务的read 没勾选,所以看不到任务视图,任务视图及其他权限 由Item roles 正则匹配来精准控制

调试过程:keycloak 配置变动,登陆到jenkins keycloak用户需要注销,重新登陆才会同步keyblock字段,如roles

Jenkins 权限配置

这里先在jenkins role-strategy 配置了 backend-dev 全局read权限

image.png

image.png

Keycloak 组配置

keycloack 创建 backend-dev

默认登陆没权限

image.png

方式一 使用 Realm roles

该方式简单 但后期容易混乱

Relam roles 创建 backend-dev

image.png

用户 Role mappding -> Assign Rle 选择 Realm Role -> backend-dev

image.png

组用户查看
image.png

注: 若keycloak 配置变动,jenkins用户需要注销重新登陆才会同步

现在登陆有权限了,可以看到 backend-dev 带过来了

image.png

方式二 使用Client Role

该方式比较清晰,可以直接看出归属

在 client: demo-jenkins -> role 创建 backend-dev
image.png

Group backend-dev 映射到 client role : demo-jenkins

这里组层级不重要,这里是为了管理方便,创建主组 demo-jenkins 再创建 子组 backend-dev的。

image.png

组加入用户

image.png

Client : demo-jenkins -> Client scopes: 进入demo-jenkins-dedicated -> Add mapper -> By configuration -> User Client Role

image.png

当前方式用的是roles,没用到groups

image.png

登陆test01 有权限了

image.png

Evaluate 调试

默认没有audience, Evaluate调试会报错

Clients-> demo-jenkins-> Client scopes -> demo-jenkins-dedicated -> Add mapper -> By configuration -> Audience

image.png
image.png
image.png

相关文章

Harbor 配置Keycloak SSO登录
夜莺V8嵌入Grafana及Keycloak SSO登陆
SSO单点登陆 KeyCloak 对接夜莺V8
SSO单点登录 KeyCloak+Postgres部署及对接Grafana

发布评论