GCP IAM条件失效:绑定K8S集群管理员权限无法管理non-prod集群
解决GKE IAM条件
resource.name.endsWith("non-prod")不生效的问题 问题根源在于:GKE集群在IAM中的资源名称是完整路径格式,而非单纯的集群名称。完整格式为projects/[PROJECT_ID]/locations/[LOCATION]/clusters/[CLUSTER_NAME],原条件resource.name.endsWith("non-prod")会匹配整个路径的结尾,只有当完整路径最后几个字符是non-prod时才生效(比如集群路径恰好是xxx/non-prod),但实际集群名后缀是non-prod的话,路径结尾是/xxx-non-prod,所以原条件无法匹配。
修正方案
有两种可靠的写法可以正确匹配集群名以non-prod结尾的情况:
方案1:拆分路径取集群名判断(更鲁棒)
通过split函数拆分资源路径,取最后一段(即集群名称)再判断后缀:
{ "expression": "split(resource.name, '/').last().endsWith(\"non-prod\")", "title": "Admin access for non-prod cluster", "description": "Admin access for non-prod cluster." }
方案2:匹配路径末尾的/non-prod(简洁直接)
直接匹配完整路径结尾的/non-prod,适用于确认GKE资源路径结构不会变更的场景:
{ "expression": "resource.name.endsWith(\"/non-prod\")", "title": "Admin access for non-prod cluster", "description": "Admin access for non-prod cluster." }
验证步骤
更新IAM角色绑定的条件后,让用户尝试对名称以non-prod结尾的集群执行管理操作(比如修改集群配置、查看节点信息等),确认权限正常生效。
内容的提问来源于stack exchange,提问作者Hao Wu
相关产品推荐
相关产品推荐

