Skip to content

钥匙斗篷

整合 Keycloak 和 ArgoCD

这些说明将引导您完成 ArgoCD 应用程序与 Keycloak 进行身份验证的整个过程。 您将在 Keycloak 中创建一个客户端,并配置 ArgoCD 使用 Keycloak 进行身份验证,使用 Keycloak 中设置的组来确定 Argo 中的权限。

在 Keycloak 中创建新客户端

首先,我们需要设置一个新客户端。 首先登录你的 keycloak 服务器,选择你要使用的领域(默认为 "master"),然后进入客户端,点击顶部的创建客户端按钮。

Keycloak添加客户端

启用客户端验证。

Keycloak添加客户端步骤2

通过将 根 URL、网络起源、管理 URL 设置为主机名 (https://{hostname})来配置客户端。

此外,您还可以将 主页 URL 设为 /applications 路径,将 Valid Post logout 重定向 URIs 设为 "+"。

有效重定向 URI 应设置为 https://{hostname}/auth/callback(也可以设置安全性较低的 https://{hostname}/*,用于测试/开发目的,但不建议在生产中使用)。

Keycloak配置客户端

确保点击保存。 应该会出现一个名为凭证的选项卡。 您可以复制我们在 ArgoCD 配置中将被引用的秘密。

Keycloak 客户端秘密

配置组索赔

为了让 ArgoCD 提供用户所在的群组,我们需要配置一个可包含在身份验证令牌中的群组 claims。 为此,我们将首先创建一个名为 groups 的新 客户端范围。

Keycloak添加范围

创建客户端范围后,现在可以添加令牌映射器,当客户端请求群组范围时,该映射器会将群组权利要求添加到令牌中。 在 "映射器 "选项卡中,点击 "配置新映射器 "并选择 "群组成员 "。 确保将名称和令牌权利要求名称**设置为_groups_。 同时禁用 "完整群组路径"。

Keycloak组映射器

现在我们可以配置客户端以提供 groups 作用域。 回到我们之前创建的客户端,进入 "客户端作用域 "选项卡。 点击 "添加客户端作用域",选择 groups 作用域并将其添加到 Default 或 Optional 客户端作用域中。 如果将其放在可选类别中,则需要确保 ArgoCD 在其 OIDC 配置中请求该作用域。 由于我们总是需要组信息,因此我建议使用默认类别。

Keycloak客户端范围

创建一个名为 ArgoCDAdmins 的组,并让当前用户加入该组。

Keycloak用户组

配置 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 身份验证登录:

Keycloak ArgoCD login