拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Argo CD 项目角色令牌管理:`argocd proj role list-tokens` 命令全面解析

Argo CD 项目角色令牌管理argocd proj role list-tokens命令全面解析【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd导读argocd proj role list-tokens是 Argo CD CLI 中用于列出指定项目Project下某个角色Role所签发 JWT 令牌的核心命令。在 Argo CD 的 RBAC 体系中项目角色令牌Project JWT Token是用于自动化场景如 CI/CD 流水线、GitOps 工具链对接 Argo CD API 的轻量级凭证而 list-tokens 正是审计、轮换、清理这些令牌的入口。阅读本文后你将掌握该命令的完整语法、输出字段含义、--unixtime与delete-token的管道协作技巧以及其底层源码实现原理能够安全高效地管理项目角色令牌生命周期。命令概览与适用场景命令语法argocd proj role list-tokens PROJECT ROLE-NAME [flags]该命令由 cmd/argocd/commands/project_role.go 中的NewProjectRoleListTokensCommand函数定义属于argocd proj role子命令族用于展示指定项目下指定角色已签发的所有 JWT 令牌及其签发时间与过期时间。该命令还注册了两个便捷别名Aliases别名说明list-token单数形式等价于list-tokenstoken-list动词前置形式等价于list-tokens即argocd proj role token-list test-project test-role与标准写法完全等价。典型适用场景令牌审计定期检查项目中各角色签发了哪些令牌、是否存在永不过期的令牌令牌轮换/清理先列出令牌及其签发时间再使用delete-token删除指定令牌脚本化集成通过--unixtime输出时间戳将结果直接管道给delete-token实现批量清理。使用前提目标项目PROJECT必须已存在如argocd proj create test-project目标角色ROLE-NAME必须已在项目中创建如argocd proj role create test-project test-role执行命令的账号需要具备相应 RBAC 权限projects资源的读取权限。运行示例与输出解读基本用法$ argocd proj role list-tokens test-project test-role ID ISSUED AT EXPIRES AT f316c466-40bd-4cfd-8a8c-1392e92255d4 2023-10-08T15:21:4001:00 Never fa9d3517-c52d-434c-9bff-215b38508842 2023-10-08T11:08:1801:00 Never输出字段详解输出使用制表符对齐的表格格式Go 标准库text/tabwriter包含三列列名含义数据来源ID令牌的唯一标识JWT 的jticlaimJWTToken.IDISSUED AT令牌签发时间JWTToken.IssuedAtJWT 的iatclaimEXPIRES AT令牌过期时间JWTToken.ExpiresAtJWT 的expclaim其中时间列的格式化逻辑由 cmd/argocd/commands/project_role.go 中的tokenTimeToString函数实现func tokenTimeToString(t int64) string { tokenTimeToString : Never if t 0 { tokenTimeToString time.Unix(t, 0).Format(time.RFC3339) } return tokenTimeToString }即当时间戳值大于 0时格式化为 RFC3339 标准时间如2023-10-08T15:21:4001:00包含时区偏移当时间戳值为 0 或不存在时显示为Never表示该令牌永不过期。空结果提示如果目标角色下没有任何令牌命令会输出提示而非空表格No tokens for test-project.test-role该逻辑位于源码第 420-423 行当len(role.JWTTokens) 0时直接打印No tokens for project.role并返回。核心选项--unixtime与令牌清理管道选项说明-u, --unixtime Print timestamps as Unix time instead of converting. Useful for piping into delete-token.默认情况下ISSUED AT和EXPIRES AT两列会通过tokenTimeToString转换为 RFC3339 人类可读时间。而加上--unixtime或简写-u后命令直接输出原始的 Unix 时间戳自 1970-01-01 起的秒数不做任何格式化转换。从源码看第 429-436 行当useUnixTime为 true 时token.ID、token.IssuedAt、token.ExpiresAt三个字段原样输出否则对后两个字段调用tokenTimeToString转换。为什么需要 Unix 时间戳关键在于delete-token命令使用 Unix 时间戳作为令牌的定位参数。查看 cmd/argocd/commands/project_role.go 中NewProjectRoleDeleteTokenCommand的定义delete-token PROJECT ROLE-NAME ISSUED-AT其实现中通过strconv.ParseInt(tokenId, 10, 64)将第三个参数解析为 int64作为iat签发时间传递给projIf.DeleteToken的ProjectTokenDeleteRequest。也就是说删除令牌需要的是签发时间的 Unix 时间戳而不是人类可读时间。因此--unixtime的典型用法是配合delete-token实现脚本化清理例如先查看某角色的令牌$ argocd proj role list-tokens test-project test-role --unixtime ID ISSUED AT EXPIRES AT f316c466-40bd-4cfd-8a8c-1392e92255d4 1696774900 0 fa9d3517-c52d-434c-9bff-215b38508842 1696759698 0此时ISSUED AT列的1696774900可直接作为delete-token的ISSUED-AT参数使用。文档中的示例命令第 477 行也印证了这一协作方式$ argocd proj role delete-token test-project test-role 1696769937注意使用--unixtime时EXPIRES AT列的0表示该令牌永不过期对应默认输出的Never而非时间起点。其他命令级选项Options除--unixtime外该命令还继承自父命令argocd proj role/argocd根命令的一系列连接与认证选项常见的重要选项如下选项默认值说明--server string无Argo CD server 地址--argocd-context string无要使用的 Argo CD server context 名称--auth-token string无认证令牌设置此项或ARGOCD_AUTH_TOKEN环境变量--config string/home/user/.config/argocd/configArgo CD 配置文件路径--corefalse若为 trueCLI 直接与 Kubernetes 通信而非 Argo CD API server--grpc-webfalse启用 gRPC-web 协议适用于 Argo CD server 位于不支持 HTTP2 的代理之后--grpc-web-root-path string无启用 gRPC-web 时设置 web 根路径-H, --header strings无为所有请求添加额外 header可重复指定支持逗号分隔多个--insecurefalse跳过服务器证书与域名校验--kube-context string无指定 kube-context--plaintextfalse禁用 TLS--port-forwardfalse通过端口转发连接随机 argocd-server 端口--port-forward-namespace string无端口转发使用的命名空间--loglevel stringinfo日志级别debug、info、warn、error--logformat stringjson日志格式json或text--server-name stringargocd-serverArgo CD API server 名称Helm 安装时名称 label 可能不同可用ARGOCD_SERVER_NAME环境变量覆盖--controller-name stringargocd-application-controllerApplication controller 名称--repo-server-name stringargocd-repo-serverRepo server 名称--redis-name stringargocd-redisRedis 部署名称--redis-haproxy-name stringargocd-redis-ha-haproxyRedis HA Proxy 名称--redis-compress stringgzip若 controller 启用了 redis 压缩可取值gzip、none--http-retry-max int无建立 HTTP 连接的最大重试次数--prompts-enabledfalse由本地配置决定强制启用/禁用交互式提示源码级实现原理命令执行流程NewProjectRoleListTokensCommand的Run回调cmd/argocd/commands/project_role.go完整执行链路如下参数校验len(args) ! 2时调用c.HelpFunc()打印帮助信息并以状态码 1 退出两个位置参数依次为projNameargs[0]与roleNameargs[1]建立客户端通过headless.NewClientOrDie(clientOpts, c)创建 gRPC 客户端并调用NewProjectClientOrDieWithContext(ctx)获取 ProjectService 客户端连接使用defer utilio.Close(conn)确保释放获取项目调用projIf.Get(ctx, projectpkg.ProjectQuery{Name: projName})拉取项目对象定位角色调用proj.GetRoleByName(roleName)从项目的Spec.Roles中按名称查找角色。该方法定义于 pkg/apis/application/v1alpha1/app_project_types.go遍历proj.Spec.Roles若找到同名角色则返回该角色及其索引否则返回错误role name does not exist in project name空值判断若len(role.JWTTokens) 0打印No tokens for project.role并返回格式化输出使用tabwriter.NewWriter(os.Stdout, 0, 0, 4, , 0)创建对齐宽度为 4 的制表写入器先输出表头ID\tISSUED AT\tEXPIRES AT再逐行输出token.ID、token.IssuedAt、token.ExpiresAt是否经tokenTimeToString转换由--unixtime决定最后writer.Flush()落盘。数据结构JWTToken命令输出的数据来源是 pkg/apis/application/v1alpha1/types.go 中定义的JWTToken结构体// JWTToken holds the issuedAt and expiresAt values of a token type JWTToken struct { IssuedAt int64 json:iat protobuf:int64,1,opt,nameiat ExpiresAt int64 json:exp,omitempty protobuf:int64,2,opt,nameexp ID string json:id,omitempty protobuf:bytes,3,opt,nameid }三个字段与输出三列一一对应IssuedAtiat签发时间Unix 秒级时间戳ExpiresAtexp过期时间Unix 秒级时间戳omitempty意味着未设置过期时间的令牌该字段为 0IDid令牌唯一标识通常为创建令牌时生成的 UUID如示例中的f316c466-40bd-4cfd-8a8c-1392e92255d4。该结构体嵌套于ProjectRole的JWTTokens []JWTToken字段中同文件第 3535 行即每个项目角色的令牌列表直接存储在项目的Spec.Roles里。与令牌生命周期的关系理解 list-tokens 的输出需要了解令牌的创建与删除机制创建argocd proj role create-token PROJECT ROLE-NAME通过ProjectTokenCreateRequest调用 ProjectService 的CreateToken接口。创建时可通过--expires-in如12h、7d默认无过期和--id默认随机 UUID定制令牌。创建成功后 CLI 会解析返回的 JWT从 claims 中提取iat、exp、jti等字段回显——这与 list-tokens 展示的列完全对应删除argocd proj role delete-token PROJECT ROLE-NAME ISSUED-AT使用签发时间定位令牌调用DeleteToken接口并支持交互式确认[y/n]提示。这也是--unixtime选项被设计为“方便管道进入 delete-token”的原因。相关命令速查该命令归属于argocd proj role命令族完整参考见 docs/user-guide/commands/argocd_proj_role.md。与令牌管理直接相关的配套命令命令作用argocd proj role create-token PROJECT ROLE-NAME为角色创建 JWT 令牌支持--expires-in、--id、--token-onlyargocd proj role list-tokens PROJECT ROLE-NAME列出角色的全部令牌本文主角argocd proj role delete-token PROJECT ROLE-NAME ISSUED-AT按签发时间删除指定令牌带交互确认argocd proj role get PROJECT ROLE-NAME查看角色详情包括策略与 JWT 令牌列表含相对时间提示argocd proj role list PROJECT列出项目下所有角色使用建议与注意事项定期审计Never令牌EXPIRES AT列为Never表示令牌永不过期这类长期凭证安全风险较高建议结合--unixtime输出与delete-token定期轮换脚本化清理的推荐姿势先list-tokens --unixtime获取签发时间戳再对目标令牌执行delete-tokendelete-token自带交互确认脚本中可通过配置禁用提示或预先确认权限最小化该命令需要projects资源的读取权限自动化账号应遵循最小权限原则仅授予所需项目和角色的访问范围时间显示受时区影响RFC3339 格式输出包含时区偏移跨团队协作时建议统一时区规范或直接使用--unixtime消除歧义。【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门