Argo CD 用户管理:本地用户配置与权限分离实践

前言

最近帮某个团队做 Argo CD 的权限梳理,发现大部分团队还停留在"所有 DevOps/SRE 共享 admin 账号"的阶段。说实话,这玩意儿在 GitOps 流程里是大忌------谁做了什么、谁改了什么,全混在一起,后面出了问题根本没法追溯。

我之前也踩过这个坑:一群人用同一个 admin 账号操作,结果某天一个同学不小心把 Production 集群的 Deployment 给删了,查半天也找不到是谁干的。后来痛定思痛,开始认真搞用户管理。今天就分享一下我的实战经验,以及 Argo CD 本地用户(localuser)配置的完整流程。

先放个结论:团队超过 3 个人,就一定要做权限分离。

📝Notes: 本文假设你已经安装好了 Argo CD。

为什么需要本地用户?

很多同学第一反应是:直接上 LDAP / OIDC 单点登录不香吗?

香!当然香。但现实情况往往是:

  • 团队规模不大,没有专门的 IAM 团队
  • 对接企业 LDAP 的审批流程要走两个月
  • 测试环境不想搞得那么复杂

这时,Argo CD 内置的本地用户机制就是最优解------轻量、灵活、开箱即用。

Argo CD 默认用户模型

Argo CD 安装完成后,只有一个内置用户:admin。它的权限是最大的,几乎所有操作都能做。

🤔 问题来了:如果团队里的开发、测试、运维都用同一个 admin 账号,你猜谁的锅?

答案很明显:出了事全是运维的锅。因为根本查不到是谁操作的。

所以我们的目标是:为不同角色创建独立用户,并赋予最小必要权限。

ConfigMap 配置本地用户:核心思路

Argo CD 的用户管理和权限配置都通过 ConfigMap 实现。具体来说:

  • argocd-cm: 定义用户登录名、密码哈希
  • argocd-rbac-cm: 定义角色和权限策略

这两个 ConfigMap 修改后,Argo CD 会自动重载配置,不需要重启 Pod。这点体验还不错。

第一步:修改 argocd-cm 添加用户

先来编辑 argocd-cm ConfigMap:

bash 复制代码
kubectl edit configmap argocd-cm -n argocd

data 下添加 accounts.xxx 字段。比如我要创建一个名为 devops 的用户:

yaml 复制代码
data:
  accounts.devops: login
  accounts.devops.enabled: "true"
  • accounts.devops: login:允许该用户通过 UI 或 CLI 登录
  • accounts.devops.enabled: "true":启用该用户

📝Notes : login 表示该用户可以登录,也可以用 apiKey 来限制只能通过 API 访问。

第二步:设置密码

推荐用 argocd admin initial-passwordupdate-password 命令生成:

bash 复制代码
argocd admin initial-password --username devops --password yourpassword
# if you are managing users as the admin user, <current-user-password> should be the current admin password.
argocd account update-password \
  --account <name> \
  --current-password <current-user-password> \
  --new-password <new-user-password>

第三步:配置 RBAC 权限

光有用户还不够,还要告诉 Argo CD 这个用户能干什么。这就轮到 argocd-rbac-cm 了。

编辑它:

bash 复制代码
kubectl edit configmap argocd-rbac-cm -n argocd

data 下添加策略。我给你掰扯一下,我要让 devops 用户只管理 devstaging 环境,不能碰 production

yaml 复制代码
data:
  policy.default: role:readonly
  policy.csv: |
    p, role:devops, applications, get, dev/*, allow
    p, role:devops, applications, sync, dev/*, allow
    p, role:devops, applications, get, staging/*, allow
    p, role:devops, applications, sync, staging/*, allow
    p, role:devops, clusters, get, *, allow
    p, role:devops, clusters, list, *, allow
    g, devops, role:devops

逐行解释:

  • policy.default: role:readonly:所有未被显式授权的用户默认为只读
  • p, role:devops, applications, get, dev/*, allowrole:devops 角色对 dev 项目下的资源有 get 权限
  • p, role:devops, applications, sync, dev/*, allow:有 sync 权限(可以手动同步)
  • g, devops, role:devops:把 devops 用户加入 role:devops 角色组

效果就是:devops 用户登录后,只能看到 devstaging 项目,不能操作 production。✅

📝Notes: 如果想更细粒度控制,还可以限制到具体集群。比如只允许操作特定集群上的应用。

第四步:验证

用新用户登录 Argo CD UI,或者在 CLI 中:

bash 复制代码
argocd login <argo-cd-url> --username devops

输入密码,应该能正常登录。然后尝试访问 production 项目------你会看到 403 被拒绝。🎉

写到这里,回头看看:我的 3 条最佳实践

实操过后,总结几条经验:

1. 为每个团队创建独立用户

我推荐这么搞:

用户 团队 权限范围
devops 运维开发 dev / staging 项目的全量权限
qa 测试团队 测试环境的同步权限
audit 审计 全局只读
sre 可靠性工程师 所有项目的全量权限

这样一旦出问题,直接看日志就知道是谁操作的。

2. 密码定期轮换

不要设置密码后就不管了。建议:

  • 每 90 天轮换一次密码
  • 使用密码管理器(如 Bitwarden / 1Password)记录
  • 通过脚本批量更新

为什么要定期轮换?因为本地用户的密码是静态的,一旦泄露,攻击者就能控制你的 GitOps 流程。

📝Notes: 如果你的组织有 IAM 团队,强烈建议尽快对接 LDAP / OIDC,让密码管理集中化。

3. 权限最小化原则

别图省事给所有人都授予 admin 角色。我推荐的做法:

  • 只读权限:90% 的团队成员只需要看,不需要改
  • 写权限:只有 DevOps 负责人和 SRE 有
  • 管理员权限:只有 1-2 个人有,用于管理用户和配置

我见过最离谱的是测试工程师有 admin 权限,然后不小心把整个 Argo CD 配置给删了------恢复起来简直噩梦。

玩点高级的:用 Helm values 管理用户配置

如果你是用 Helm 安装的 Argo CD,可以在 values.yaml 里直接配置,避免手动编辑 ConfigMap:

yaml 复制代码
configs:
  cm:
    accounts.devops: login
    accounts.devops.enabled: "true"
  rbac:
    policy.default: role:readonly
    policy.csv: |
      p, role:devops, applications, get, dev/*, allow
      p, role:devops, applications, sync, dev/*, allow
      g, devops, role:devops

然后 helm upgrade 一下,配置就生效了。

然后再用 argocd admin initial-passwordupdate-password 命令生成密码:

bash 复制代码
argocd admin initial-password --username devops --password yourpassword
# if you are managing users as the admin user, <current-user-password> should be the current admin password.
argocd account update-password \
  --account <name> \
  --current-password <current-user-password> \
  --new-password <new-user-password>

总结

Argo CD 的本地用户管理机制其实不复杂,核心就是三个步骤:

  1. 在 ConfigMap 中定义用户(argocd-cm)
  2. 设置密码
  3. 配置 RBAC 策略(argocd-rbac-cm)

但真正重要的是权限分离和密码安全这两个意识。不要因为麻烦就用 admin 账号共享,这迟早会出事。

📚️参考文档

相关推荐
程序员cxuan4 分钟前
速度太快了!本地可以跑 DeepSeek-V4-Flash 了
人工智能·后端·程序员
阿祖zu1 小时前
芝士就是力量!开源私有化部署与 GitHub 双向同步的个人知识笔记 App
前端·后端·ios
不才不才不不才1 小时前
Spring 源码系列(16): doDispatch 全流程——一次请求的主干链路
java·后端·spring
IT_陈寒1 小时前
SpringBoot自动配置失效?这个隐藏配置坑了我一整晚
前端·人工智能·后端
搜狐技术产品小编20232 小时前
告别“黑盒”与误判:如何用“多智能体对抗辩论”重构内容安全审核系统
后端·多agent
DantyWei2 小时前
controller注册及调用时机
后端
edwarddamon2 小时前
Spring Cloud 配置热更新与 Bean 代理机制梳理
java·后端
码事漫谈3 小时前
我用 Seed Evolving 做了个 AI 小说写作工具
后端
Raas1003 小时前
MAIGateway,魔芋企业级AI网关的FinAPI成本竞争力设计
java·后端·网关·api网关·魔芋ai·finapi·mai gateway
计算机魔术师3 小时前
传统基础架构 - 微服务
大数据·后端·微服务·架构·开发工具·编程语言