Argo CD 项目角色查询实战:`argocd proj role get` 命令全解析
Argo CD 项目角色查询实战argocd proj role get命令全解析【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cdargocd proj role get是 Argo CD CLI 中用于查询指定 AppProject 内角色Role详细信息的命令它一次性展示角色的描述、Casbin 策略、绑定的 OIDC 用户组以及该角色名下的全部 JWT Token。本文以官方命令参考文档为主体结合仓库源码完整讲解其语法、输出字段语义、底层数据模型与常见使用场景帮助你高效排查项目角色与 Token 配置。一、命令定位项目角色与argocd proj role命令族在 Argo CD 中AppProject项目是资源与应用分组的核心边界而项目内的角色ProjectRole则是实现项目级 RBAC 的关键载体一个角色可以绑定若干条策略Policies、若干 JWT Token 和若干 OIDC 组声明Groups从而将权限授予不同的用户或自动化流水线。argocd proj role get属于argocd proj role命令族。从 cmd/argocd/commands/project_role.go 的源码可以看到argocd proj role共注册了 11 个子命令子命令作用list列出项目中的所有角色get获取指定角色的详细信息本文主题create创建项目角色delete删除项目角色create-token为角色创建 JWT Tokenlist-tokens列出角色名下的 Tokendelete-token删除角色的 Tokenadd-policy为角色添加策略remove-policy移除角色策略add-group为角色绑定 OIDC 组声明remove-group移除角色的组声明get命令在整个命令族中承担查询与验证职能无论是新增策略、创建 Token 还是删除 Token官方示例都习惯在执行变更后再次调用get来确认结果是角色生命周期管理中最常用的只读巡检工具。二、命令语法与参数说明argocd proj role get PROJECT ROLE-NAME [flags]命令要求且仅要求两个位置参数参数说明PROJECTAppProject 的名称即待查询角色所属的项目ROLE-NAME项目内角色的名称从源码 project_role.go 可以看到命令启动后会首先校验len(args) ! 2参数数量不对会直接打印帮助信息并退出退出码为 1随后通过 project gRPC 客户端的Get方法拉取整个项目对象再调用proj.GetRoleByName(roleName)按名称定位角色——如果角色不存在会返回错误并终止执行。除-h, --help显示 help 信息外该命令没有独立的专用选项但继承了大量全局选项详见本文第五节。三、示例输出逐字段解读官方参考文档给出了如下完整示例$ argocd proj role get test-project test-role Role Name: test-role Description: Policies: p, proj:test-project:test-role, projects, get, test-project, allow JWT Tokens: ID ISSUED-AT EXPIRES-AT 1696774900 2023-10-08T15:21:4001:00 (4 minutes ago) none 1696759698 2023-10-08T11:08:1801:00 (4 hours ago) none输出共分五段含义如下1. Role Name 与 DescriptionRole Name即角色名Description是创建角色时通过argocd proj role create --description填写的描述信息示例中为空。这两个字段直接来源于角色对象的Name与Description属性。2. PoliciesCasbin 策略示例中的策略为p, proj:test-project:test-role, projects, get, test-project, allow这是标准的 Casbin 策略格式由源码中的策略模板 project_role.go 定义p, proj:%s:%s, %s, %s, %s/%s, %s对应关系为p, proj:项目名:角色名, 资源, 动作, 项目名/对象, 权限。以示例为例字段取值含义主体proj:test-project:test-role项目作用域内该角色的唯一标识资源projects资源类型如projects、applications、applicationsets、logs、exec等动作get动作get、create、update、delete、sync、override等对象test-project项目内对象即项目名/对象组合/前为项目名/后为具体对象*表示通配权限allow允许或拒绝allow/deny策略列表取自项目的Spec.Roles中该角色的Policies字段。注意输出的是项目整体的策略字符串集合proj.ProjectPoliciesString()因此角色策略是写入项目spec中的持久化配置。3. GroupsOIDC 组声明当角色绑定了 OIDC 组声明时输出形如Groups: - group-a - group-b当没有绑定任何组时显示none。源码 project_role.go 通过v1alpha1.RoleGroupExists(role)判断角色Groups列表是否非空再逐行打印。4. JWT TokensToken 列表表格包含三列IDToken 的签发时间 Unix 时间戳秒。注意历史 Token 以签发时间iat作为标识新建 Token 则使用 UUIDjti作为 IDISSUED-AT签发时间格式为 RFC3339 时间戳加人类可读相对时间例如2023-10-08T15:21:4001:00 (4 minutes ago)EXPIRES-AT过期时间未设置过期时间时显示none即永久有效。这里的 Token 列表来源于项目status中的JWTTokensByRole按角色归类的已签发 Token而不是 spec因此它反映的是实际已签发并被系统记录的 Token 状态。四、输出背后的数据模型ProjectRole 结构体角色对象在 API 层面对应ProjectRole结构体定义于 pkg/apis/application/v1alpha1/types.gotype ProjectRole struct { Name string json:name protobuf:bytes,1,opt,namename Description string json:description,omitempty protobuf:bytes,2,opt,namedescription Policies []string json:policies,omitempty protobuf:bytes,3,rep,namepolicies JWTTokens []JWTToken json:jwtTokens,omitempty protobuf:bytes,4,rep,namejwtTokens Groups []string json:groups,omitempty protobuf:bytes,5,rep,namegroups }其字段与get命令的输出完全一一对应Name/Description直接打印Policies以 Casbin 字符串列表保存JWTTokens与Groups分别承载 Token 与组声明。按角色归类的 TokenJWTTokensByRoleToken 在项目 status 中以JWTTokensByRole map[string]JWTTokens组织见 app_project_types.goget命令正是从proj.Status.JWTTokensByRole[roleName].Items中遍历并渲染 Token 表格。GetRoleByName 与 RoleGroupExists角色查找与组判断分别由 app_project_types.go 中的GetRoleByName遍历proj.Spec.Roles按名称匹配找不到时返回错误role name does not exist in project project和同文件第 326 行的RoleGroupExists提供。时间戳人性化ISSUED-AT/EXPIRES-AT列的2023-10-08T15:21:4001:00 (4 minutes ago)格式由 cmd/argocd/commands/project.go 中的humanizeTimestamp生成先格式化为 RFC3339 标准时间再拼接相对当前时间的人类可读描述而tokenTimeToString见 project_role.go则规定时间戳大于 0 时格式化为 RFC3339否则显示Never。五、完整的全局继承参数说明argocd proj role get继承自argocd根命令的全部全局选项适用于所有服务器连接方式直连 API Server、--core直连 Kubernetes、--port-forward端口转发等参数说明--argocd-context string要使用的 Argo CD 服务器上下文名称--auth-token string认证 Token设置此项或ARGOCD_AUTH_TOKEN环境变量--client-crt string客户端证书文件--client-crt-key string客户端证书密钥文件--config stringArgo CD 配置文件路径默认/home/user/.config/argocd/config--controller-name stringArgo CD Application controller 名称当 controller 的 name label 与默认值不同时例如通过 Helm chart 安装设置此项或ARGOCD_APPLICATION_CONTROLLER_NAME环境变量默认argocd-application-controller--core若设为 trueCLI 直接与 Kubernetes 通信而非与 Argo CD API Server 通信--grpc-web启用 gRPC-web 协议适用于 Argo CD Server 位于不支持 HTTP2 的代理之后的情况--grpc-web-root-path string启用 gRPC-web 协议并设置 web 根路径-H, --header strings为 Argo CD CLI 的所有请求附加额外请求头可重复指定多个也支持逗号分隔--http-retry-max int建立到 Argo CD Server 的 HTTP 连接时的最大重试次数--insecure跳过服务器证书与域名校验--kube-context string指定要使用的 kube-context--logformat string日志格式可选json或text默认json--loglevel string日志级别可选debug、info、warn、error默认info--plaintext禁用 TLS--port-forward通过端口转发连接一个随机的 argocd-server 端口--port-forward-namespace string用于端口转发的命名空间--prompts-enabled强制启用或禁用交互式提示覆盖本地配置未指定时使用本地配置值默认为 false--redis-compress string当 application controller 启用了 redis 压缩时启用此选项可选值gzip、none默认gzip--redis-haproxy-name stringRedis HA Proxy 名称当 HA Proxy 的 name label 与默认值不同时例如通过 Helm chart 安装设置此项或ARGOCD_REDIS_HAPROXY_NAME环境变量默认argocd-redis-ha-haproxy--redis-name stringRedis deployment 名称当 Redis 的 name label 与默认值不同时设置此项或ARGOCD_REDIS_NAME环境变量默认argocd-redis--repo-server-name stringArgo CD Repo server 名称名称 label 与默认值不同时设置此项或ARGOCD_REPO_SERVER_NAME环境变量默认argocd-repo-server--server stringArgo CD server 地址--server-crt string服务器证书文件--server-name stringArgo CD API server 名称名称 label 与默认值不同时设置此项或ARGOCD_SERVER_NAME环境变量默认argocd-server提示在--core模式下CLI 直接通过 kubeconfig 访问集群中的 Kubernetes API无需--server该模式对只读的get命令同样适用。六、用get验证角色变更典型实战流程get命令最常见的价值在于变更前后对照。在 project_role.go 中add-policy等命令的官方示例均以get作为验证手段。以下是一个完整流程1. 查询变更前状态$ argocd proj role get test-project test-role Role Name: test-role Description: Policies: p, proj:test-project:test-role, projects, get, test-project, allow JWT Tokens: ID ISSUED-AT EXPIRES-AT 1696759698 2023-10-08T11:08:1801:00 (3 hours ago) none2. 为角色添加允许更新项目内应用的策略$ argocd proj role add-policy test-project test-role -a update -p allow -o project3. 再次查询确认策略已生效$ argocd proj role get test-project test-role Role Name: test-role Description: Policies: p, proj:test-project:test-role, projects, get, test-project, allow p, proj:test-project:test-role, applications, update, test-project/project, allow JWT Tokens: ID ISSUED-AT EXPIRES-AT 1696759698 2023-10-08T11:08:1801:00 (3 hours ago) none4. 为角色创建 Token 并验证$ argocd proj role create-token test-project test-role Create token succeeded for proj:test-project:test-role. ID: f316c466-40bd-4cfd-8a8c-1392e92255d4 Issued At: 2023-10-08T15:21:4001:00 Expires At: Never Token: xxx $ argocd proj role get test-project test-role Role Name: test-role Description: Policies: p, proj:test-project:test-role, projects, get, test-project, allow JWT Tokens: ID ISSUED-AT EXPIRES-AT 1696774900 2023-10-08T15:21:4001:00 (4 minutes ago) none 1696759698 2023-10-08T11:08:1801:00 (4 hours ago) none可以看到新 Token 的 ID1696774900即为签发时刻的 Unix 时间戳。若需在脚本中删除 Token可先使用argocd proj role list-tokens --unixtime输出原始时间戳再通过argocd proj role delete-token PROJECT ROLE-NAME ISSUED-AT删除——而在删除前后同样可以用get确认 Token 列表的变化。其余兄弟命令的参考文档可参见 argocd proj role 及其下属的 create-token、delete-token、add-policy、remove-policy、list 等文档。七、使用注意事项与最佳实践角色必须存在get依赖GetRoleByName进行精确名称匹配角色不存在时命令会直接报错退出可通过argocd proj role list PROJECT先确认角色名称。区分 Token ID 的两种形态历史 Token 以iat时间戳为 ID新 Token 以 UUIDjti为 IDdelete-token命令目前仍以iat为参数见 project_role.go使用时需留意输出表格第一列的类型。策略是声明式配置Policies随项目 spec 持久化使用argocd proj role add-policy/remove-policy修改后会通过Update接口写回get看到的策略即项目 spec 中的最终状态。Token 状态以 status 为准JWT Token 表格来自proj.Status.JWTTokensByRole反映控制器实际记录的签发情况如需原始 Token 串请在create-token时保存--token-only可仅输出 Token 以便脚本捕获。合理利用--core模式在无法访问 API Server 的环境中可通过--core让命令直连 Kubernetes API适合集群内的快速巡检场景。通过本文的语法、示例、参数表与源码级解读你可以准确读取 Argo CD 项目角色的完整配置快照并将其作为角色权限变更审计与排障的第一手工具。【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →