ArgoCD与Zitadel集成实现用户管理与权限控制

ArgoCD与Zitadel集成实现用户管理与权限控制

argo-cd Argo CD 是一个声明式 Kubernetes 应用部署工具,可实现应用程序的自动化部署和版本控制。 * 提供 Kubernetes 应用的自动化部署和版本控制功能,支持多种部署策略,简化 Kubernetes 应用管理。 * 有什么特点:声明式部署、支持多种部署策略、简化 Kubernetes 应用管理。 argo-cd 项目地址: https://gitcode.com/gh_mirrors/ar/argo-cd

前言

在现代云原生环境中,身份认证和授权管理是至关重要的安全组件。本文将详细介绍如何在ArgoCD中集成Zitadel身份提供商,实现基于角色的访问控制(RBAC)。通过这种集成,您可以利用Zitadel的强大身份管理功能来简化ArgoCD的用户认证流程,同时实现细粒度的权限控制。

集成概述

ArgoCD是一个流行的GitOps持续交付工具,而Zitadel是一个开源的身份和访问管理平台。两者的集成主要涉及以下几个关键步骤:

  1. 在Zitadel中创建项目和应用程序
  2. 配置角色和授权
  3. 设置自定义Action处理角色声明
  4. 配置ArgoCD的ConfigMap
  5. 测试集成效果

详细配置步骤

1. 创建Zitadel项目和应用程序

首先需要在Zitadel中创建一个专门用于ArgoCD的项目:

  1. 在Zitadel控制台中选择"Projects"
  2. 点击"Create New Project"
  3. 为项目命名(如argocd-project)
  4. 确保勾选以下重要选项:
    • Assert Roles on Authentication
    • Check authorization on Authentication

这些选项确保在认证过程中会验证和断言用户角色。

2. 配置角色和授权

在Zitadel项目中,我们需要定义与ArgoCD权限对应的角色:

  1. 进入"Roles"部分
  2. 创建两个关键角色:
    • argocd_administrators (对应ArgoCD管理员权限)
    • argocd_users (对应ArgoCD只读用户权限)

创建完成后,需要为用户分配这些角色:

  1. 进入"Authorizations"部分
  2. 为相应用户分配argocd_administrators角色

3. 创建Zitadel应用程序

接下来创建用于ArgoCD集成的应用程序:

  1. 选择"General"部分
  2. 创建新应用程序(如argocd-application)
  3. 选择"WEB"作为应用程序类型
  4. 选择"CODE"作为认证流程
  5. 配置以下重要URI:
    • Redirect URI: https://argocd.example.com/auth/callback
    • Post Logout URI: https://argocd.example.com (可选)

创建完成后,务必保存显示的Client ID和Client Secret,这些将用于ArgoCD配置。

4. 配置Token设置

为了在token中包含用户角色信息,需要启用以下选项:

  1. 进入"Token Settings"
  2. 启用:
    • User roles inside ID Token
    • User Info inside ID Token

5. 创建自定义Action

为了将用户角色作为声明包含在token中,我们需要创建一个自定义Action:

  1. 进入"Actions"部分
  2. 创建名为groupsClaim的新Action
  3. 使用以下JavaScript代码:
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);
}
  1. 确保勾选"Allowed To Fail"选项
  2. 将此Action添加到"Complement Token"流程的两个触发器:
    • Pre Userinfo creation
    • Pre access token creation

6. 配置ArgoCD ConfigMap

现在我们需要配置ArgoCD以使用Zitadel进行认证。这涉及修改两个关键ConfigMap:

argocd-cm.yaml配置
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: 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

关键配置说明:

  • admin.enabled: "false" 禁用内置admin账户
  • oidc.config 包含Zitadel OIDC配置
  • requestedScopes 必须包含groups以获取角色信息
argocd-rbac-cm.yaml配置
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
  namespace: argocd
data:
  scopes: '[groups]'
  policy.csv: |
    g, argocd_administrators, role:admin
    g, argocd_users, role:readonly
  policy.default: ''

RBAC配置说明:

  • scopes 指定从token中读取groups声明
  • policy.csv 将Zitadel角色映射到ArgoCD角色
  • policy.default 留空表示没有默认权限

7. 测试集成

完成所有配置后,可以通过以下步骤测试集成效果:

  1. 访问ArgoCD登录页面
  2. 应该能看到"LOG IN WITH ZITADEL"按钮
  3. 使用Zitadel用户登录
  4. 登录后,在ArgoCD的"User Info"页面检查用户组信息
  5. 确认用户具有预期的权限级别

常见问题排查

如果在集成过程中遇到问题,可以检查以下几点:

  1. 确保Zitadel应用程序的Redirect URI完全匹配ArgoCD的配置
  2. 验证Client ID和Client Secret是否正确
  3. 检查Zitadel Action是否正确配置并关联到相应触发器
  4. 确认用户已分配正确的角色
  5. 查看ArgoCD日志以获取详细的错误信息

安全最佳实践

  1. 定期轮换Client Secret
  2. 在Zitadel中启用多因素认证(MFA)
  3. 限制只有必要的用户才能访问ArgoCD
  4. 定期审计用户权限
  5. 考虑使用Zitadel的组织结构来管理不同团队的访问权限

总结

通过将ArgoCD与Zitadel集成,您可以实现以下优势:

  1. 集中化的用户管理
  2. 基于角色的细粒度访问控制
  3. 支持多因素认证等高级安全功能
  4. 简化的用户认证流程
  5. 更好的审计和合规性

这种集成特别适合需要严格访问控制的企业环境,同时简化了开发人员的操作流程。通过遵循本文的详细步骤,您应该能够成功配置并使用这一强大的集成方案。

argo-cd Argo CD 是一个声明式 Kubernetes 应用部署工具,可实现应用程序的自动化部署和版本控制。 * 提供 Kubernetes 应用的自动化部署和版本控制功能,支持多种部署策略,简化 Kubernetes 应用管理。 * 有什么特点:声明式部署、支持多种部署策略、简化 Kubernetes 应用管理。 argo-cd 项目地址: https://gitcode.com/gh_mirrors/ar/argo-cd

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邱纳巧Gillian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值