钥匙斗篷¶
整合 Keycloak 和 ArgoCD¶
这些说明将引导您完成 ArgoCD 应用程序与 Keycloak 进行身份验证的整个过程。 您将在 Keycloak 中创建一个客户端,并配置 ArgoCD 使用 Keycloak 进行身份验证,使用 Keycloak 中设置的组来确定 Argo 中的权限。
在 Keycloak 中创建新客户端¶
首先,我们需要设置一个新客户端。 首先登录你的 keycloak 服务器,选择你要使用的领域(默认为 "master"),然后进入客户端,点击顶部的创建客户端按钮。
启用客户端验证。
通过将 根 URL、网络起源、管理 URL 设置为主机名 (https://{hostname})来配置客户端。
此外,您还可以将 主页 URL 设为 /applications 路径,将 Valid Post logout 重定向 URIs 设为 "+"。
有效重定向 URI 应设置为 https://{hostname}/auth/callback(也可以设置安全性较低的 https://{hostname}/*,用于测试/开发目的,但不建议在生产中使用)。
确保点击保存。 应该会出现一个名为凭证的选项卡。 您可以复制我们在 ArgoCD 配置中将被引用的秘密。
配置组索赔¶
为了让 ArgoCD 提供用户所在的群组,我们需要配置一个可包含在身份验证令牌中的群组 claims。 为此,我们将首先创建一个名为 groups 的新 客户端范围。
创建客户端范围后,现在可以添加令牌映射器,当客户端请求群组范围时,该映射器会将群组权利要求添加到令牌中。 在 "映射器 "选项卡中,点击 "配置新映射器 "并选择 "群组成员 "。 确保将名称和令牌权利要求名称**设置为_groups_。 同时禁用 "完整群组路径"。
现在我们可以配置客户端以提供 groups 作用域。 回到我们之前创建的客户端,进入 "客户端作用域 "选项卡。 点击 "添加客户端作用域",选择 groups 作用域并将其添加到 Default 或 Optional 客户端作用域中。 如果将其放在可选类别中,则需要确保 ArgoCD 在其 OIDC 配置中请求该作用域。 由于我们总是需要组信息,因此我建议使用默认类别。
创建一个名为 ArgoCDAdmins 的组,并让当前用户加入该组。
配置 ArgoCD OIDC¶
我们先把之前生成的客户端秘密存储在 argocd secret argocd-secret 中。
1.首先,您需要用 base64 对客户秘密进行编码: $ echo -n '83083958-8ec6-47b0-a411-a8c55381fbd2' | base64
.
2.然后,您可以使用 $ kubectl edit secret argocd-secret
编辑秘密,并将 base64 值添加到名为 oidc.keycloak.clientSecret 的新密钥中。
您的 Secret 应该是这样的:
apiVersion: v1
kind: Secret
metadata:
name: argocd-secret
data:
...
oidc.keycloak.clientSecret: ODMwODM5NTgtOGVjNi00N2IwLWE0MTEtYThjNTUzODFmYmQy
...
现在,我们可以配置 configmaps 并添加 oidc 配置,以启用 keycloak 身份验证。 可以使用 $ kubectl edit configmap argocd-cm
。
您的 ConfigMap 应该是这样的:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
data:
url: https://argocd.example.com
oidc.config: |
name: Keycloak
issuer: https://keycloak.example.com/realms/master
clientID: argocd
clientSecret: $oidc.keycloak.clientSecret
requestedScopes: ["openid", "profile", "email", "groups"]
确保
- issuer 以正确的 realm 结束(本例中为 master)。
- 在 Keycloak 版本大于 17 的版本中,issuer URL 必须包含 /auth(本例中为 /auth/realms/master)。
- clientID 设置为您在 Keycloak 中配置的客户端 ID
- clientSecret 指向您在 argocd-secret Secret 中创建的正确密钥
- 如果没有添加到默认作用域,requestedScopes 包含 groups claims
配置 ArgoCD 策略¶
现在我们有了一个提供组的身份验证,我们想对这些组应用策略。 我们可以使用 $ kubectl edit configmap argocd-rbac-cm
修改 argocd-rbac-cm ConfigMap。
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
data:
policy.csv: |
g, ArgoCDAdmins, role:admin
在本例中,我们将 role:admin 角色赋予 ArgoCDAdmins 组中的所有用户。
登录¶
您现在可以使用我们新的 Keycloak OIDC 身份验证登录: