
Argo CD 如何创建本地用户并生成 API Token 供自动化使用【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd如果需要用脚本或 CI 流水线调用 Argo CD API创建 Application、触发同步、查询状态需要先让 Argo CD 认识一个可用的身份。本文基于 Argo CD 的本地用户local users/accounts功能完成一条完整链路在argocd-cmConfigMap 中定义本地账号在argocd-rbac-cm中配置自动化所需的权限用 Argo CD CLI 为该账号生成 API token并验证和吊销 token。前提条件已部署 Argo CD 实例、可访问 Argo CD 命名空间默认argocd的kubectl、已安装 Argo CD CLI并以admin用户完成初始配置。Argo CD 安装后只有一个内置admin用户拥有系统完全访问权限官方文档建议admin仅用于初始配置之后切换到本地用户或 SSO见用户管理文档。本地用户有两个能力capabilityapiKey允许为 API 访问生成认证 token和login允许通过 UI 登录。只用于自动化时只授予apiKey即可。在 argocd-cm 中创建本地账号本地用户定义在argocd-cmConfigMap 中而不是通过 API 创建。用kubectl编辑kubectl edit configmap argocd-cm -n argocd在data段中添加accounts.username键值为能力列表。以官方文档中的ci-bot账号为例data: accounts.ci-bot: apiKey如果该账号还需要登录 Argo CD UI写成accounts.ci-bot: apiKey, login。三个需要留意的点本地账号的用户名最大长度为 32账号默认启用要停用账号时增加键accounts.ci-bot.enabled: false本地用户如果没有单独配置 RBAC 规则会回落到argocd-rbac-cmConfigMap 中policy.default字段指定的默认策略。账号创建后实际拥有什么权限取决于下一步的 RBAC 配置。为用户设置密码可选如果账号授予了login能力用 CLI 设置密码。argocd account update-password需要三个参数--account指定目标账号--current-password是当前操作用户自己的密码以 admin 身份管理其他用户时这里填当前 admin 密码--new-password是新密码argocd account update-password \ --account ci-bot \ --current-password current-user-password \ --new-password new-user-password其中current-user-password和new-user-password替换为你自己的密码值。仅用于自动化只带apiKey能力的账号不需要这一步即可生成 token可跳过。为本地用户配置 RBAC 权限按 RBAC 配置文档本地用户获取权限的方式有两种把策略policy直接指派给用户或把用户指派到某个角色。编辑argocd-rbac-cmConfigMap 的policy.csv键。方式一直接给用户指派策略本文自动化场景推荐apiVersion: v1 kind: ConfigMap metadata: name: argocd-rbac-cm namespace: argocd data: policy.csv: | p, ci-bot, applications, sync, my-project/*, allow p, ci-bot, applications, get, my-project/*, allow上面示例给ci-bot授予my-project项目下所有 application 的sync与get权限my-project替换为你的实际项目名。策略格式为p, role/user/group, resource, action, object, effect各资源支持的 action 组合见 RBAC 文档中的表格。方式二把用户指派到角色例如g, ci-bot, role:readonly。官方文档同时警告如果同时启用了 SSOscope 值恰好与本地用户名相同的 SSO 用户会被加入与本地用户相同的角色。因此在本地用户与 SSO 共存的集群中建议用p, ...直接给本地用户指派策略而不是用g, ...指派角色。生成 API token保存 ConfigMap 后为该账号生成 token。省略--account时Argo CD 为当前登录用户生成 token显式指定账号argocd account generate-token --account ci-bot --expires-in 24h参数说明来自 argocd account generate-token 命令参考--account账号名默认是当前账号--expires-intoken 有效期默认0s即永不过期。官方文档明确警告不带--expires-in生成的 token 永远不会过期应优先使用短期 token 并从自动化系统做轮换--id可选的 token ID未指定时回退为 uuid。指定 ID 便于之后精确吊销该 token。命令输出即 token 本身妥善保存。文档的 CI 场景把它作为ARGOCD_AUTH_TOKEN存入 CI secrets。验证 token 可用把生成的 token 设置为ARGOCD_AUTH_TOKEN环境变量Argo CD CLI 的通用参数支持该环境变量然后验证身份和权限export ARGOCD_AUTH_TOKEN生成的token # 确认账号已存在 argocd account list # 查询当前 token 的权限文档示例能否同步任意 application argocd account can-i sync applications *argocd account can-i的更多示例包括查询单个 projectargocd account can-i update projects default和创建集群argocd account can-i create clusters *完整参数见 argocd account can-i 参考。也可以用argocd account get --account ci-bot查询账号详情。最后用一次真实调用做端到端验证。以文档中的 CI 场景为例用 token 触发同步文档中ARGOCD_SERVER使用argocd.example.com这是文档示例值替换为你的 Argo CD 服务器地址export ARGOCD_SERVERargocd.example.com export ARGOCD_AUTH_TOKEN生成的token # 也可以从 API server 直接下载与服务器版本匹配的 CLI curl -sSL -o /usr/local/bin/argocd https://${ARGOCD_SERVER}/download/argocd-linux-amd64 argocd app sync guestbook argocd app wait guestbook这条“从 API server 下载 CLI 用 token 触发同步”的完整流程见 Automation from CI Pipelines。argocd app sync执行成功且argocd app wait显示同步完成即说明 token、RBAC 权限和自动化链路都配置到位。吊销 token 与删除账号token 失效或泄露时按 token ID 吊销单个 token# 删除当前账号的指定 token argocd account delete-token ID # 删除指定账号的指定 token argocd account delete-token --account ci-bot IDID是 token ID如果生成时用过--id这里就使用该值。命令参考见 argocd account delete-token。要彻底移除账号从argocd-cm删除对应键官方文档同时建议移除argocd-secretSecret 中对应的密码条目kubectl patch -n argocd cm argocd-cm --typejson -p[{op: remove, path: /data/accounts.ci-bot}] kubectl patch -n argocd secrets argocd-secret --typejson -p[{op: remove, path: /data/accounts.ci-bot.password}]只想临时停用账号而不删除时在argocd-cm中设置accounts.ci-bot.enabled: false。限制与边界本地用户不提供群组、登录历史等高级功能需要这些能力时官方文档强烈建议改用 SSO。所有已认证用户至少拥有policy.default授予的默认权限这部分权限无法被deny规则阻止配置argocd-rbac-cm时需要注意默认策略的范围。官方文档建议在创建额外用户后尽快禁用admin在argocd-cm中设置admin.enabled: false。如果自动化场景是“把清单提交到 Git、由 Argo CD 自动 reconcile”则不需要管理任何 token只有必须直接调用 CLI/API触发同步、查询状态等时才使用本地用户 token。其他无浏览器认证方式project role token、Dex token exchange 等见CI/CD Pipeline Authentication小节。【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考