使用访问策略(AccessPolicy)API管理命名空间权限(Kubernetes RBAC授权)
在多用户的场景下,不同的用户群体可能需要特定级别的集群资源访问权限,而IAM权限不支持根据集群的资源类型进行细粒度授权,您需要在IAM对用户进行授权后,继续前往集群授予命名空间权限(Kubernetes RBAC授权),这一操作过程需要在不同的权限体系中进行切换,存在比较大的维护工作量。
CCE支持使用访问策略(AccessPolicy)API管理命名空间权限,将IAM权限和Kubernete集群权限结合,您可以通过IAM控制不同用户的Kubernetes资源权限,简化了IAM权限和Kubernetes集群权限组合管理的过程,支持多集群、多用户批量授权,减轻集群管理员对集群权限管理的负担。

该功能目前处于公测阶段,在正式环境使用前建议您先进行充分验证。
前提条件
- 给用户或用户组授权之前,请您了解命名空间权限(Kubernetes RBAC授权)。
- 使用访问策略(AccessPolicy),需具有以下权限的IAM用户或用户组: CreateAccessPolicy、UpdateAccessPolicy、DeleteAccessPolicy、ListAccessPolicy和GetAccessPolicy。您可以了解用户组可以添加的CCE系统策略,并结合实际需求进行选择。如何为用户组授权请参见集群权限(IAM授权)。
使用API配置命名空间权限
CCE中的命名空间权限是基于Kubernetes RBAC能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。具有配置权限的用户可以通过API配置访问策略。
- 调用以下接口创建访问策略。关于如何调用接口,请参见构造请求。
POST /api/v3/access-policies
请求体示例如下:
{ "kind": "AccessPolicy", "apiVersion": "v3", "name": "policy-test", "clusters": [ "*" ], "accessScope": { "namespaces": [ "default" ] }, "policyType": "CCEClusterAdminPolicy", "principal": { "type": "user", "ids": ["id1", "id2" ] } }
参数
名称
说明
name
名称
访问策略名称。
clusters[]
集群列表
需要添加访问策略的集群ID列表,单次最多支持授权200个集群。获取集群ID的步骤请参见如何获取接口URI中参数。
支持“*”通配符,表示为所有集群添加访问策略。
注意:添加访问策略的集群状态必须正常,不存在休眠或者异常集群,否则将会导致接口下发异常。
accessScope.namespaces[]
命名空间
需要添加访问策略的命名空间列表,单次最多支持授权500个命名空间。
支持“*”通配符,表示为所有命名空间添加访问策略。
- 指定命名空间添加访问策略时,将在该命名空间下创建RoleBinding,授予的权限将在指定命名空间下生效,创建完成后可在此命名空间下查询对应的RoleBinding。
- 为所有命名空间添加访问策略时,将创建ClusterRoleBinding,授予的权限将在集群全局内生效。
policyType
权限类型
权限类型,当前支持如下类型:
- CCEClusterAdminPolicy:管理员权限。对全部命名空间下所有资源的读写权限。
- CCEAdminPolicy:运维权限。对全部命名空间下大多数资源的读写权限,对节点、存储卷,命名空间和配额管理的只读权限。
- CCEEditPolicy:开发权限。对全部或所选命名空间下多数资源的读写权限。当配置在全部命名空间时能力与运维权限一致。
- CCEViewPolicy:只读权限。对全部或所选命名空间下大多数资源的只读权限。
principal.type
用户/用户组类型
访问策略授权的用户/用户组类型,当前支持如下类型:
- user:IAM用户
- group:用户组
- agency:委托账号
principal.ids[]
用户/用户组列表
需要授权的IAM用户/用户组/委托账号ID列表,单次最多支持填写500个ID。
关于获取ID的操作步骤请参见获取账号、IAM用户、项目、用户组、区域、委托的名称和ID。
- CCE管理面会自动同步访问策略到关联集群,如果使用kubectl命令查看可以看到集群中创建了一个RoleBinding或ClusterRoleBinding。
此同步可能存在延迟,需要数分钟时间生效。
本文示例中为IAM用户授予default命名空间下的管理员权限,您可以在default命名空间下查询对应的RoleBinding。
- 查询集群中的RoleBinding。
kubectl get rolebinding -n default
回显如下,role_access_policy_2abf31fc-cd7a-11ef-9ed5-0255ac100047即为自动创建的RoleBinding:
NAME ROLE AGE role_access_policy_2abf31fc-cd7a-11ef-9ed5-0255ac100047 ClusterRole/cluster-admin 27s
- 查看RoleBinding详情。
kubectl get rolebinding role_access_policy_2abf31fc-cd7a-11ef-9ed5-0255ac100047 -n default -o yaml
回显如下:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: annotations: CCE.com/IAM: "true" creationTimestamp: "2025-03-26T07:58:24Z" labels: rbac.kubernetes.io/GeneratedByAccessPolicy: "true" name: role_access_policy_2abf31fc-cd7a-11ef-9ed5-0255ac100047 namespace: default resourceVersion: "1086" uid: 7000328f-c91c-4731-b3a6-807713c29f35 roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: 069fcc2116c347b89869eae3cd38ba23 - apiGroup: rbac.authorization.k8s.io kind: User name: 7af166e21b094f659c35a9e30f67f5a2
- 查询集群中的RoleBinding。
- 使用新授权的 IAM用户登录CCE控制台并验证权限。IAM用户登录方法请参见IAM用户登录。
在“服务列表”中选择云容器引擎,在CCE主界面进入集群,选择命名空间,如果无法查看kube-system命名空间(假设访问策略只授权了default命名空间),则表示访问策略配置已生效。