GCP中为服务账号绑定roles/redis.dbConnectionUser角色失败求助
问题:服务账号绑定
roles/redis.dbConnectionUser角色失败,提示角色不支持该资源 场景说明
尝试给GCP服务账号my-app@my-project.iam.gserviceaccount.com绑定roles/redis.dbConnectionUser角色时失败,但绑定roles/iam.serviceAccountTokenCreator、roles/iam.workloadIdentityUser这类IAM角色可以成功。
使用的IAMPartialPolicy配置
apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPartialPolicy metadata: name: roles-at-sa-level spec: resourceRef: kind: IAMServiceAccount external: projects/my-project/serviceAccounts/my-app@my-project.iam.gserviceaccount.com bindings: - role: roles/redis.dbConnectionUser members: - member: "serviceAccount:my-app@my-project.iam.gserviceaccount.com"
报错信息
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning UpdateFailed 12s iampartialpolicy-controller Update call failed: error setting policy: error applying changes: summary: Error setting IAM policy for service account 'projects/my-project/serviceAccounts/my-app@my-project.iam.gserviceaccount.com': googleapi: Error 400: Role roles/redis.dbConnectionUser is not supported for this resource., badRequest
排查信息
- 可成功绑定的角色:
roles/iam.serviceAccountTokenCreatorroles/iam.workloadIdentityUser
- 角色文档信息:
- ID:
roles/redis.dbConnectionUser - 发布阶段:Beta
- ID:
原因分析
roles/redis.dbConnectionUser作为Beta阶段的角色,其适用资源类型有限制——该角色并非设计用来绑定到服务账号资源上,而是应该绑定到Redis实例的IAM策略中。报错信息里的“Role is not supported for this resource”直接点明了这一点,Beta角色的权限范围往往还在迭代,暂不支持服务账号作为绑定对象。
解决方案
要让目标服务账号获得Redis连接权限,需将roles/redis.dbConnectionUser角色绑定到具体的Redis实例IAM策略,而非服务账号自身。示例CNRM配置如下:
apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPartialPolicy metadata: name: redis-instance-iam-binding spec: resourceRef: kind: RedisInstance name: your-target-redis-instance # 替换为你的Redis实例名称,或使用external引用 bindings: - role: roles/redis.dbConnectionUser members: - serviceAccount:my-app@my-project.iam.gserviceaccount.com
也可以直接通过GCP控制台找到对应Redis实例,在IAM页面添加该服务账号并授予该角色。
内容的提问来源于stack exchange,提问作者SHC
相关产品推荐
相关产品推荐

