Zitadel¶
还请查阅 Zitadel 文档。
整合 Zitadel 和 ArgoCD¶
您将在 Zitadel 中创建一个应用程序,并配置 ArgoCD 使用 Zitadel 进行身份验证,使用 Zitadel 中设置的角色来确定 ArgoCD 中的权限。
将 ArgoCD 与 Zitadel 整合需要以下步骤:
- 在 Zitadel 中创建新项目和新应用程序
- 在 Zitadel 中配置应用程序
- 在 Zitadel 中设置角色
- 在 Zitadel 中设置操作
- 配置 ArgoCD configmaps
- 测试设置
本例将被引用以下 Values 值:
- Zitadel FQDN:
auth.example.com
。 - Zitadel 项目: `argocd-project
- Zitadel 应用程序:`argocd-application
- Zitadel 操作:`groupsClaim
- ArgoCD FQDN:`argocd.example.com
- ArgoCD 管理员角色:`argocd_administrators
- ArgoCD 用户角色:`argocd_users
您可以在设置中选择不同的 Values;这些 Values 被引用来保持指南的一致性。
在 Zitadel 中设置项目和应用程序¶
首先,我们将在 Zitadel 中创建一个新项目。 进入项目,选择创建新项目。 现在您应该看到以下屏幕。
检查以下选项:
- 在身份验证时证明角色
- 在身份验证时检查授权
角色¶
转到角色,点击新建。 创建以下两个角色。 在键和组字段中都被引用指定值。
- 管理员
- 用户
您的角色现在应该是这样的:
授权¶
接下来,进入授权,为用户分配角色 "argocd_administrators"。 单击新建,输入用户名,然后单击继续。 选择角色 "argocd_administrators",然后单击保存。
您的授权现在应该是这样的:
创建应用程序¶
转到常规,创建一个新应用程序。 将应用程序命名为 "argocd-application"。
在应用程序类型中,选择 WEB,然后单击继续。
选择 代码,然后继续。
接下来,我们将设置重定向和注销后 URI。 设置以下 Values:
- 重定向 URI:
https://argocd.example.com/auth/callback
- 注销后 URI:
https://argocd.example.com
注销后 URI 为可选项,在示例设置中,用户注销后将返回 ArgoCD 登录页面。
在下一屏幕中确认配置,然后单击 Create 创建应用程序。
点击 Create 后,您将看到应用程序的 "ClientId "和 "ClientSecret"。 请务必复制 "ClientSecret",因为关闭此窗口后将无法检索。 在我们的示例中,被引用的 Values 如下:
- ClientId:
227060711795262483@argocd-project
- ClientSecret:
UGvTjXVFAQ8EkMv2x4GbPcrEwrJGWZ0sR2KbwHRNfYxeLsDurCiVEpa5bkgW0pl0
将客户机密保存到安全位置后,单击关闭完成应用程序的创建。
进入令牌设置,启用以下选项:
- ID 令牌内的用户角色
- ID 令牌内的用户信息
Zitadel应用程序设置](.../../assets/zitadel-application-settings.png "Zitadel 应用程序设置")
在 Zitadel 中设置行动¶
要在 Zitadel 签发的令牌中包含用户的角色,我们需要设置一个 Zitadel 操作。 ArgoCD 中的授权将由授权令牌中包含的角色决定。 进入操作,点击新建,选择 "groupsClaim "作为操作的名称。
将以下代码粘贴到操作中:
/**
* sets the roles an additional claim in the token with roles as value an project as key
*
* The role claims of the token look like the following:
*
* // added by the code below
* "groups": ["{roleName}", "{roleName}", ...],
*
* Flow: Complement token, Triggers: Pre Userinfo creation, Pre access token creation
*
* @param ctx
* @param api
*/
function groupsClaim(ctx, api) {
if (ctx.v1.user.grants === undefined || ctx.v1.user.grants.count == 0) {
return;
}
let grants = [];
ctx.v1.user.grants.grants.forEach((claim) => {
claim.roles.forEach((role) => {
grants.push(role);
});
});
api.v1.claims.setClaim("groups", grants);
}
选中允许失败,然后单击添加添加您的操作。
注意:如果未选中 __允许失败*,且用户未指定角色,则用户可能无法再登录 Zitadel,因为当操作失败时,登录流程会失败。
接下来,将操作添加到补充令牌流程中。 从下拉菜单中选择补充令牌流程,然后点击添加触发器。 将操作添加到创建用户信息前和创建访问令牌前这两个触发器中。
您的 "操作 "页面现在应该与下面的截图相似:
配置 ArgoCD configmaps¶
接下来,我们将配置两个 ArgoCD configmaps:
请按以下步骤配置您的 configmaps,同时确保将url
、issuer
、clientID
、clientSecret
和logoutURL
等相关值替换为与您的设置相匹配的值。
argocd-cm.yaml¶
---
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
labels:
app.kubernetes.io/part-of: argocd
data:
admin.enabled: "false"
url: https://argocd.example.com
oidc.config: |
name: Zitadel
issuer: https://auth.example.com
clientID: 227060711795262483@argocd-project
clientSecret: UGvTjXVFAQ8EkMv2x4GbPcrEwrJGWZ0sR2KbwHRNfYxeLsDurCiVEpa5bkgW0pl0
requestedScopes:
- openid
- profile
- email
- groups
logoutURL: https://auth.example.com/oidc/v1/end_session
argocd-rbac-cm.yaml¶
---
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
labels:
app.kubernetes.io/part-of: argocd
data:
scopes: '[groups]'
policy.csv: |
g, argocd_administrators, role:admin
g, argocd_users, role:readonly
policy.default: ''
policy.csv "中指定的角色必须与 Zitadel 中配置的角色相匹配。 Zitadel 角色 "argocd_administrators "将被指定为 ArgoCD 角色 "admin",允许管理员访问 ArgoCD。 Zitadel 角色 "argocd_users "将被指定为 ArgoCD 角色 "readonly",允许只读访问 ArgoCD。
部署您的 ArgoCD configmaps。 ArgoCD 和 Zitadel 现在应该已正确设置,允许用户使用 Zitadel 登录 ArgoCD。
测试设置¶
进入 ArgoCD 实例,在通常的用户名/密码登录界面上方,您会看到 "用 ZITADEL 登录"(LOG INH WITH ZITADEL)按钮。
使用 Zitadel 用户登录后,转到 用户信息。 如果一切设置正确,你现在应该可以看到argocd_administrators
组,如下图所示。