# CCE权限概述
CCE权限管理是在统一身份认证服务（IAM）与Kubernetes的角色访问控制（RBAC）的能力基础上，打造的细粒度权限管理功能，支持基于IAM的细粒度权限控制和IAM Token认证，支持集群级别、命名空间级别的权限控制，帮助用户便捷灵活地对租户下的IAM用户、用户组设定不同的操作权限。
如果您需要对CCE集群及相关资源进行精细的权限管理，例如限制不同部门的员工拥有部门内资源的细粒度权限，您可以使用CCE权限管理提供的增强能力进行多维度的权限管理。
本章节将介绍CCE权限管理机制及其涉及到的基本概念。如果当前账号已经能满足您的要求，您可以跳过本章节，不影响您使用CCE服务的其它功能。
#### CCE支持的权限管理能力
CCE的权限管理包括"集群权限"和"命名空间权限"两种能力，能够从集群和命名空间层面对用户组或用户进行细粒度授权，具体解释如下：
- **集群权限** **：** 是基于IAM系统策略的授权，可以通过用户组功能实现IAM用户的授权。用户组是用户的集合，通过集群权限设置可以让某些用户组操作集群（如创建/删除集群、节点、节点池、模板、插件等），而让某些用户组仅能查看集群。
  集群权限涉及CCE非Kubernetes API，支持IAM细粒度策略、企业项目管理相关能力。
  
- **命名空间权限** **：** 是基于Kubernetes RBAC（Role-Based Access Control，基于角色的访问控制）能力的授权，通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。同时CCE基于开源能力进行了增强，可以支持基于IAM用户或用户组粒度进行RBAC授权、IAM token直接访问API进行RBAC认证鉴权。
  命名空间权限涉及CCE Kubernetes API，基于Kubernetes RBAC能力进行增强，支持对接IAM用户/用户组进行授权和认证鉴权，但与IAM细粒度策略独立。
  
 
CCE的权限可以从使用的阶段分为两个阶段来看，第一个阶段是创建和管理集群的权限，也就是拥有创建/删除集群、节点等资源的权限。第二个阶段是使用集群Kubernetes资源（如工作负载、Service等）的权限。
图1权限体系   
![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002565424005.png "点击放大")
清楚了集群权限和命名空间权限后，您就可以通过这两步授权，做到精细化的权限控制。
 #### IAM角色/策略权限与命名空间权限的关系
在IAM授予不同角色/策略权限的用户，其拥有的命名空间权限（Kubernetes RBAC授权）不同。[表1]给出了不同用户拥有的命名空间权限详情。
 表1不同用户拥有的命名空间权限 
| 用户类型                                       | 命名空间权限                                 |
|:---|:---|
| 拥有Tenant Administrator权限的IAM用户（包括账号）        | 默认拥有全部命名空间权限，可以使用集群内所有Kubernetes资源      |
| 拥有CCE Administrator权限的IAM用户                 | 默认拥有全部命名空间权限，可以使用集群内所有Kubernetes资源       |
| 拥有CCE FullAccess或者CCE ReadOnlyAccess权限的IAM用户 | 需要按Kubernetes RBAC授权后才能使用集群Kubernetes资源 |
   
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
如果用户组中同时设置Storage相关的细粒度权限和CCE Administrator Role或者Tenant Administrator相关的管理员角色，则Storage相关的细粒度权限不会生效。管理员角色权限优先级高于Storage相关的细粒度权限。
#### kubectl权限说明
您可以通过[kubectl访问集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)的Kubernetes资源，那kubectl拥有哪些Kubernetes资源的权限呢？
kubectl访问CCE集群是通过集群上生成的配置文件（kubeconfig.json）进行认证，kubeconfig.json文件内包含用户信息，CCE根据用户信息的权限判断kubectl有权限访问哪些Kubernetes资源。即哪个用户获取的kubeconfig.json文件，kubeconfig.json就拥有哪个用户的信息，这样使用kubectl访问时就拥有这个用户的权限。而用户拥有的权限就是[表1]所示的权限。
#### 联邦用户支持说明
IAM支持基于SAML、OIDC协议的单点登录，如果您已经有自己的企业管理系统，同时您的用户需要使用您账号内的云服务资源，您可以使用IAM的身份提供商功能，实现用户使用企业管理系统账号单点登录，这一过程称之为联邦身份认证。
通过联邦身份认证访问的用户称为联邦用户，联邦用户相当于IAM用户。
联邦用户使用CCE时需要注意如下两点。
- 用户创建CCE集群时，会在集群中默认为该用户创建一个cluster-admin权限（管理员权限），联邦用户由于每次登录注销都会改变用户ID，所以在CCE控制台权限管理处，权限用户会显示已删除，请勿删除该权限，否则会导致鉴权失败。此种情况下建议在CCE为某个用户组创建cluster-admin权限，将联邦用户加入此用户组。
- 联邦用户不支持创建永久访问密钥AK/SK，在需要使用AK/SK的场景（如创建OBS类型PV/PVC时），只能由账号或是实体IAM用户创建密钥，共享给联邦用户。由于密钥表示用户所拥有的权限，因此建议由与联邦用户同在一个用户组的实体IAM用户创建并分享密钥。
 
#### IAM支持的授权项
策略包含系统策略和自定义策略，如果系统策略不满足授权要求，管理员可以创建自定义策略，并通过给用户组授予自定义策略来进行精细的访问控制。策略支持的操作与API相对应，授权项列表说明如下：
- 权限：允许或拒绝某项操作。
- 对应API接口：自定义策略实际调用的API接口。
- 授权项：自定义策略中支持的Action，在自定义策略中的Action中写入授权项，可以实现授权项对应的权限功能。
- 依赖的授权项：部分Action存在对其他Action的依赖，需要将依赖的Action同时写入授权项，才能实现对应的权限功能。
- IAM项目(Project)/企业项目(Enterprise Project)：自定义策略的授权范围，包括IAM项目与企业项目。授权范围如果同时支持IAM项目和企业项目，表示此授权项对应的自定义策略，可以在IAM和企业管理两个服务中给用户组授权并生效。如果仅支持IAM项目，不支持企业项目，表示仅能在IAM中给用户组授权并生效，如果在企业管理中授权，则该自定义策略不生效。关于IAM项目与企业项目的区别，详情请参见：[IAM与企业管理的区别](https://support.huaweicloud.com/iam_faq/iam_01_0101.html)。
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
"√"表示支持，"x"表示暂不支持。
云容器引擎（CCE）支持的自定义策略授权项如下所示：
表2Cluster 
| 权限                   | 对应API接口                                                                                   | 授权项（Action）                            | IAM项目(Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 获取指定项目下的集群     | GET /api/v3/projects/{project_id}/clusters                                          | cce:cluster:list                 | √        | √                        |
| 获取指定的集群         | GET /api/v3/projects/{project_id}/clusters/{cluster_id}                               | cce:cluster:get                  | √      | √                         |
| 创建集群             | POST /api/v3/projects/{project_id}/clusters                                           | cce:cluster:create              | √          | √                          |
| 更新指定的集群         | PUT /api/v3/projects/{project_id}/clusters/{cluster_id}                              | cce:cluster:update                 | √           | √                        |
| 删除集群           | DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}                           | cce:cluster:delete                | √         | √                       |
| 升级集群          | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/operation/upgrade          | cce:cluster:upgrade             | √         | √                         |
| 唤醒集群           | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/operation/awake            | cce:cluster:start                 | √        | √                         |
| 休眠集群            | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/operation/hibernate          | cce:cluster:stop                 | √        | √                        |
| 变更集群规格        | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/operation/resize            | cce:cluster:resize                 | √        | √                         |
| 获取集群证书         | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercert                 | cce:cluster:get                   | √        | √                          |
| 获取LongAKSK配置   | GET /api/v3/projects/{project_id}/longaksk/config                                     | cce:longaksk:getConfig           | √          | √                         |
| 更新LongAKSK配置 | PUT /api/v3/projects/{project_id}/longaksk/config                                     | cce:longaksk:updateConfig         | √       | √                        |
| 更新集群LongAKSK配置 | PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/longaksk/config              | cce:cluster:updateLongAKSKConfig   | √        | √                       |
| 获取集群LongAKSK配置 | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/longaksk/config             | cce:cluster:getLongAKSKConfig     | √      | √                        |
| 吊销集群证书           | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/clustercertrevoke          | cce:cluster:revokeClientCredential | √        | √                         |
| 更新分区              | PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/partitions/{partition_name} | cce:partition:update                | √        | √                        |
| 创建分区            | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/partitions                  | cce:partition:create              | √        | √                         |
| 获取分区信息           | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/partitions/{partition_name}    | cce:partition:get                | √         | √                          |
| 列出所有分区          | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/partitions                    | cce:partition:list                 | √         | √                         |
   
表3Node 
| 权限       | 对应API接口                                                                                                | 授权项                | IAM项目(Project) | 企业项目 (Enterprise Project)                                                                                     |
|:---|:---|:---|:---|:---|
| 获取集群下所有节点 | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes                                           | cce:node:list    | √            | √                                                                                                               |
| 获取指定的节点     | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}                                 | cce:node:get     | √              | √                                                                                                              |
| 创建节点       | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes                                         | cce:node:create   | √             | √ 说明： 使用企业项目授权创建节点需额外添加evs:quotas:get、evs:types:get的全局权限。 |
| 更新指定的节点    | PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}                                 | cce:node:update   | √            | √                                                                                                                |
| 删除节点       | DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/{node_id}                             | cce:node:delete   | √              | √                                                                                                               |
| 移除节点       | PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/operation/remove                          | cce:node:remove | √           | √                                                                                                                |
| 迁移节点     | PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodes/operation/migrateto/{target_cluster_id} | cce:node:migrate  | √             | √                                                                                                              |
   
表4Job 
| 权限          | 对应API接口                                                                                                                                           | 授权项           | IAM项目(Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 获取任务信息       | GET /api/v3/projects/{project_id}/jobs/{job_id}                                                                                                   | cce:job:get    | √               | √                         |
| 列出所有任务      | GET /api/v2/projects/{project_id}/jobs                                                                                                             | cce:job:list | √             | √                         |
| 删除所有任务或删除单个任务 | DELETE /api/v2/projects/{project_id}/jobs DELETE /api/v2/projects/{project_id}/jobs/{job_id} | cce:job:delete | √              | √                          |
   
表5Nodepool 
| 权限       | 对应API接口                                                                                           | 授权项                  | IAM项目(Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 获取集群下所有节点池  | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools                                | cce:nodepool:list   | √                | √                           |
| 获取节点池      | GET /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id}                   | cce:nodepool:get    | √               | √                          |
| 创建节点池    | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools                                | cce:nodepool:create    | √               | √                            |
| 更新节点池信息 | PUT /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id}                    | cce:nodepool:update | √              | √                          |
| 删除节点池    | DELETE /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id}                 | cce:nodepool:delete | √              | √                          |
| 伸缩节点池      | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/nodepools/{nodepool_id}/operation/scale | cce:nodepool:scale | √               | √                          |
   
表6Chart 
| 权限      | 对应API接口                   | 授权项              | IAM项目(Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 更新模板    | PUT /v2/charts/{id}       | cce:chart:update | √             | ×                          |
| 上传模板    | POST /v2/charts        | cce:chart:upload    | √               | ×                            |
| 列出所有模板  | GET /v2/charts          | cce:chart:list    | √             | ×                           |
| 获取模板信息 | GET /v2/charts/{id}      | cce:chart:get     | √                | ×                           |
| 删除模板    | DELETE /v2/charts/{id} | cce:chart:delete  | √            | ×                          |
   
表7Release 
| 权限         | 对应API接口                   | 授权项                | IAM项目(Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 更新升级模板实例 | PUT /v2/releases/{name}   | cce:release:update   | √               | √                       |
| 列出所有模板实例   | GET /v2/releases           | cce:release:list   | √             | √                       |
| 创建模板实例    | POST /v2/releases           | cce:release:create   | √              | √                      |
| 获取模板实例信息    | GET /v2/releases/{name}     | cce:release:get     | √             | √                       |
| 删除模板实例       | DELETE /v2/releases/{name} | cce:release:delete | √              | √                      |
   
表8Storage 
| 权限                       | 对应API接口                                                                   | 授权项                   | IAM项目(Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 创建PersistentVolumeClaim  | POST /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims           | cce:storage:create | √               | √                        |
| 删除PersistentVolumeClaim | DELETE /api/v1/namespaces/{namespace}/cloudpersistentvolumeclaims/{name} | cce:storage:delete   | √               | √                      |
| 列出所有磁盘                      | GET /storage/api/v1/namespaces/{namespace}/listvolumes                        | cce:storage:list      | √                 | √                           |
   
表9Addon 
| 权限         | 对应API接口                                             | 授权项                       | IAM项目(Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 创建插件实例     | POST /api/v3/addons                                 | cce:addonInstance:create    | √              | √                           |
| 获取插件实例      | GET /api/v3/addons/{id}?cluster_id={cluster_id}      | cce:addonInstance:get      | √               | √                          |
| 列出所有插件实例 | GET /api/v3/addons?cluster_id={cluster_id}         | cce:addonInstance:list       | √             | √                          |
| 删除插件实例     | DELETE /api/v3/addons/{id}?cluster_id={cluster_id} | cce:addonInstance:delete    | √             | √                           |
| 更新升级插件实例   | PUT /api/v3/addons/{id}                            | cce:addonInstance:update     | √               | √                         |
| 回滚插件实例      | POST /api/v3/addons/{id}/operation/rollback          | cce:addonInstance:rollback | √              | √                          |
| 列出所有插件模板    | GET /api/v3/addontemplates                            | cce:addonTemplate:list     | √             | ×                             |
   
表10Quota 
| 权限    | 对应API接口                                 | 授权项           | IAM项目(Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 查询配额详情 | GET /api/v3/projects/{project_id}/quotas | cce:quota:get | √                | √                          |
   
表11资源标签 
| 权限          | 对应API接口                                                               | 授权项           | IAM项目(Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 添加指定集群的资源标签   | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/tags/create  | cce:tag:operate | √                 | √                            |
| 删除指定集群的资源标签 | POST /api/v3/projects/{project_id}/clusters/{cluster_id}/tags/delete | cce:tag:operate | √             | √                            |
   
表12访问策略 
| 权限      | 对应API接口                                    | 授权项                      | IAM项目(Project) | 企业项目 (Enterprise Project) |
|:---|:---|:---|:---|:---|
| 创建访问策略   | POST /api/v3/access-policies              | cce:accessPolicy:post | √              | ×                          |
| 获取访问策略列表 | GET /api/v3/access-policies             | cce:accessPolicy:list    | √             | ×                            |
| 获取访问策略    | GET /api/v3/access-policies/{policy_id}   | cce:accessPolicy:get  | √                | ×                          |
| 删除访问策略 | DELETE /api/v3/access-policies/{policy_id} | cce:accessPolicy:delete  | √             | ×                         |
| 更新访问策略    | PUT /api/v3/access-policies/{policy_id} | cce:accessPolicy:put   | √              | ×                          |
   
