
# 使用访问策略（AccessPolicy）API管理命名空间权限（Kubernetes RBAC授权）
在多用户的场景下，不同的用户群体可能需要特定级别的集群资源访问权限，而IAM权限不支持根据集群的资源类型进行细粒度授权，您需要在IAM对用户进行授权后，继续前往集群授予命名空间权限（Kubernetes RBAC授权），这一操作过程需要在不同的权限体系中进行切换，存在比较大的维护工作量。
CCE支持使用访问策略（AccessPolicy）API管理命名空间权限，将IAM权限和Kubernete集群权限结合，您可以通过IAM控制不同用户的Kubernetes资源权限，简化了IAM权限和Kubernetes集群权限组合管理的过程，支持多集群、多用户批量授权，减轻集群管理员对集群权限管理的负担。
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/caution_3.0-zh-cn.png)
该功能目前处于公测阶段，在正式环境使用前建议您先进行充分验证。
#### 前提条件
- 给用户或用户组授权之前，请您了解[配置命名空间权限（Kubernetes RBAC授权）](https://support.huaweicloud.com/usermanual-cce/cce_10_0189.html)。
- 使用访问策略（AccessPolicy），需具有以下权限的IAM用户或用户组： CreateAccessPolicy、UpdateAccessPolicy、DeleteAccessPolicy、ListAccessPolicy和GetAccessPolicy。您可以了解用户组可以添加的CCE系统策略，并结合实际需求进行选择。如何为用户组授权请参见[集群权限（IAM授权）](https://support.huaweicloud.com/usermanual-cce/cce_10_0188.html)。
 
#### 使用API配置命名空间权限
CCE中的命名空间权限是基于Kubernetes RBAC能力的授权，通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。具有配置权限的用户可以通过API配置访问策略。
![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002202278501.png)
1. 调用以下接口创建访问策略。关于如何调用接口，请参见[构造请求](https://support.huaweicloud.com/api-cce/cce_02_0102.html)。
   
   **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中参数](https://support.huaweicloud.com/api-cce/cce_02_0271.html#section1)。 支持"\*"通配符，表示为所有集群添加访问策略。 注意： 添加访问策略的集群状态必须正常，不存在休眠或者异常集群，否则将会导致接口下发异常。                                                                                                                                                                                                                                                               |
   | 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](https://support.huaweicloud.com/api-iam/iam_17_0002.html)。                                                                                                                                                                                                                                                                                                                                                                              |
      
   
   
2. CCE管理面会自动同步访问策略到关联集群，如果使用kubectl命令查看可以看到集群中创建了一个RoleBinding或ClusterRoleBinding。 
   ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
   此同步可能存在延迟，需要数分钟时间生效。
   本文示例中为IAM用户授予default命名空间下的管理员权限，您可以在default命名空间下查询对应的RoleBinding。
   1. 查询集群中的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
      ```
      
   
   2. 查看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
      ```
      
   
   
   
   
3. 使用新授权的 IAM用户登录CCE控制台并验证权限。IAM用户登录方法请参见[IAM用户登录](https://support.huaweicloud.com/usermanual-iam/iam_01_0552.html)。
   
   在"服务列表"中选择云容器引擎，在CCE主界面进入集群，选择命名空间，如果无法查看kube-system命名空间（假设访问策略只授权了default命名空间），则表示访问策略配置已生效。
   
   
 
#### 相关文档
- [创建访问策略](https://support.huaweicloud.com/api-cce/CreateAccessPolicy.html)
- [获取访问策略列表](https://support.huaweicloud.com/api-cce/ListAccessPolicy.html)
- [获取访问策略详情](https://support.huaweicloud.com/api-cce/GetAccessPolicy.html)
- [更新访问策略](https://support.huaweicloud.com/api-cce/UpdateAccessPolicy.html)
- [删除访问策略](https://support.huaweicloud.com/api-cce/DeleteAccessPolicy.html)
 
