我正试图找到一种方法,使用我在Okta中管理的角色与Jenkins合作。我一直在尝试让角色策略插件工作,但当我登录时,我得到了<user> is missing the Overall/Read permission
。
我的配置包括使用oic-auth
插件的Okta的OIDC,并且我通过JCasC指定authorizationStrategy配置。例如,我在我的JCasC okta.yaml:上有这个
authorizationStrategy:
roleBased:
roles:
global:
- name: "my_okta_group"
permissions:
- "Overall/Administer"
我看到这个被正确地转换成$JENKINS_HOME/config.xml
。
我没有具体说明,但似乎是必需的,是assignments:
,因为它毕竟是RBAC,用户对角色的分配应该在Okta中进行,而不是在Jenkins中。
浏览插件代码后,它似乎是硬连接的,以便在JCasC中指定显式用户SID列表。这对我不起作用。
有没有其他方法可以使用此插件来实现目标?
还有其他RBAC插件可以更好地工作吗?
以上内容非常接近于一个有效的解决方案。assignments:
确实是必需的,并且它支持username或组。此外,"authorizationStrategy.roleBased.roles"的"name"是Jenkins角色名称,而不是OIDC组名称。
oi-auth配置将OIDC令牌字段映射到Jenkins用户属性,然后角色策略检查OIDC令牌的用户名及其组。
我的工作配置是:
jenkins:
securityRealm:
oic:
clientId: "${clientId}"
clientSecret: "${clientSecret}"
wellKnownOpenIDConfigurationUrl: "${oidcIssuerUrl}/.well-known/openid-configuration"
userInfoServerUrl: "${oidcIssuerUrl}/oauth2/v1/userinfo"
tokenFieldToCheckKey: ""
tokenFieldToCheckValue: ""
fullNameFieldName: "name"
groupsFieldName: "groups"
disableSslVerification: false
logoutFromOpenidProvider: true
endSessionEndpoint: "${oidcIssuerUrl}/oauth2/v1/logout"
postLogoutRedirectUrl: "https://${dns_name_full}"
escapeHatchEnabled: false
escapeHatchUsername: ""
escapeHatchSecret: "my-unused-password"
escapeHatchGroup: ""
automanualconfigure: "auto"
emailFieldName: "email"
userNameField: "name"
tokenServerUrl: "${oidcIssuerUrl}/oauth2/v1/token"
authorizationServerUrl: "${oidcIssuerUrl}/oauth2/v1/authorize"
scopes: "address phone openid profile offline_access groups email"
authorizationStrategy:
roleBased:
roles:
global:
- name: "my_jenkins_role"
permissions:
- "Overall/Administer"
assignments:
- "my_okta_group"
顺便说一句,我指定了带头盔的yaml:
...
JCasC:
configScripts:
okta: |
jenkins:
securityRealm:
...