Jenkins 接入 Microsoft Azure AD 登录
介绍
Jenkins 可以通过安装插件,支持像 Microsoft Azure AD,Google,LDAP,Keycloak 等认证登录。下面介绍下如何配置 jenkins 接入 Microsoft Azure AD 认证。
通过 SAML 接入 Microsoft Entra ID(Azure AD)登录
在 Microsoft Entra ID 中设置
登录 Microsoft Entra 管理中心
https://entra.microsoft.com/#home,也可以从老的 portal 界面 https://portal.azure.com/ 点击 Microsoft Entra ID 进去。
创建企业应用
在 应用程序 → 企业应用程序 → 新建应用程序 → 选择 "创建自己的应用程序"
填写应用的名称,选择集成未在库中找到的任何其他应用程序(非库),点击创建
配置 SAML
在应用详情页,选择 设置单一登录 → SAML
需要配置 Entity ID 和 Reply URL,url 中的 host 需要与 jenkins 全局配置的 host 一致。
- 标识符(实体 ID):填写 Jenkins 的 SAML 实体 ID(如 https://<jenkins-url>/)
- 回复 URL:填写 Jenkins 的 Reply URL https://<jenkins-url>/securityRealm/finishLogin。
属性和索赔(这里中文翻译有问题,应该翻译成属性和声明会准确一些)配置。默认情况下,以下属性将被发送到 SAML 令牌中。您可以在用户属性和声明选项卡下查看或编辑发送到应用程序的声明。
可以使用“添加新的声明”来添加属性,或者使用“添加组声明”来添加组属性声明
添加用户和组
把对应的用户和组加上
创建客户端密码或者证书
在应用程序 -> 应用注册 -> 所有应用程序,找到刚创建的应用程序,点击进去。
在证书和密码,点击新客户端密码。创建后把 value 保存下,只显示一次而已,后续还要在 jenkins 上配置。
启用 ID 令牌
在身份验证,在隐式授权和混合流,选择 ID 令牌(用于隐式流和混合流),默认勾选上。
开启 Microsoft Entra ID group support (optional)
在清单,修改"groupMembershipClaims": null -> "groupMembershipClaims": "SecurityGroup"。
设置 Microsoft Entra ID 权限(可选,但推荐)
为了让 Jenkins 能够从 Microsoft Entra ID 查找数据,需要一些 Graph API 权限。这是用于:
- 在“安全”页面上自动完成用户和组
- Jenkins 查找用户,例如在使用 Rest API 时
- 组显示名称支持(而不仅仅是对象 ID)
点击 API 权限,添加权限
点击 Microsoft Graph
点击应用程序权限
搜索和选上这三个权限 'User.Read.All', 'Group.Read.All' , 'People.Read.All',点击添加权限
点击代表***授予管理员同意
配置 Jenkins
安装插件 Microsoft Entra ID (previously Azure AD)
备份 jenkins config.xml 配置文件
在配置 jenkins 使用 Microsoft Entra ID 认证前,先备份下 jenkins config.xml 配置文件。
# config.xml 在 JENKINS_HOME 下
cp -a $JENKINS_HOME/config.xml $JENKINS_HOME/config.xml.bak
配置 Authentication
在 Manage Jenkins -> Security -> Security
安全域选择 Azure Active Directory, 填写 Client ID, Client Secret 或者 Client Certificate 和 Tenant。Client ID 和 Tenant 可以在上面配置的 jenkins 应用程序概述里找到。
然后填写 Test user principal name or object id,在点击 Verify configuration。验证成功后会有提示返回。
配置授权策略
选择 Azure Active Directory Matrix-based security,该插件扩展了传统的 Matrix Authorization Strategy,能够在配置授权规则时根据用户/组的显示名称进行搜索。
建议一开始可以将 Authenticated Users 授权最高的 Administer 权限,防止等下配置完保存后,有问题没有权限配置而需要回滚配置。对接 Microsoft Entra ID 后,jenkins 的用户是跟 Microsoft Entra 用户的对象 ID 对应。
参考文档
https://plugins.jenkins.io/azure-ad/
https://cloudinfrastructureservices.co.uk/jenkins-sso-azure-ad/
https://www.miniorange.com/atlassian/saml-single-sign-on-sso-into-jenkins-using-azure-ad-as-idp
https://www.jenkins.io/doc/book/security/access-control/disable/