什么是权限管理
CCE权限管理是在统一身份认证服务(IAM)与Kubernetes的角色访问控制(RBAC)的能力基础上,打造的细粒度权限管理功能,支持基于IAM的细粒度权限控制和IAM Token认证,支持集群级别、命名空间级别的权限控制,帮助用户便捷灵活的对租户下的IAM用户、用户组设定不同的操作权限。
如果您需要对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从v1.11.7-r2版本起的集群支持配置命名空间权限,1.11.7-r2之前的版本默认拥有全部命名空间权限。
CCE的权限可以从使用的阶段分为两个阶段来看,第一个阶段是创建和管理集群的权限,也就是拥有创建/删除集群、节点等资源的权限。第二个阶段是使用集群Kubernetes资源(如工作负载、Service等)的权限。
清楚了集群权限和命名空间权限后,您就可以通过这两步授权,做到精细化的权限控制。
CCE集群权限是基于IAM系统策略和自定义策略的授权,可以通过用户组功能实现IAM用户的授权。
系统策略
IAM中预置的CCE系统策略当前包含CCEFullAccess和CCEReadOnlyAccess两种策略:
- CCE FullAccess:系统策略,CCE服务集群相关资源的普通操作权限,不包括集群(启用Kubernetes RBAC鉴权)的命名空间权限,不包括委托授权、生成集群证书等管理员角色的特权操作。
- CCE ReadOnlyAccess:系统策略,CCE服务集群相关资源的只读权限,不包括集群(启用Kubernetes RBAC鉴权)的命名空间权限。
自定义策略
如果系统预置的CCE策略,不满足您的授权要求,可以创建自定义策略。
目前支持以下两种方式创建自定义策略:
- 可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。
- JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。
设置集群权限流程
命名空间权限是基于Kubernetes RBAC能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。Kubernetes RBAC API定义了四种类型:Role、ClusterRole、RoleBinding与ClusterRoleBinding,这四种类型之间的关系和简要说明如下:
- Role:角色,其实是定义一组对Kubernetes资源(命名空间级别)的访问规则。
- RoleBinding:角色绑定,定义了用户和角色的关系。
- ClusterRole:集群角色,其实是定义一组对Kubernetes资源(集群级别,包含全部命名空间)的访问规则。
- ClusterRoleBinding:集群角色绑定,定义了用户和集群角色的关系。
在CCE控制台可以授予用户或用户组命名空间权限,可以对某一个命名空间或全部命名空间授权,CCE控制台默认提供如下ClusterRole:
- view(只读权限):对全部或所选命名空间下大多数资源的只读权限。
- edit(开发权限):对全部或所选命名空间下多数资源的读写权限。当配置在全部命名空间时能力与运维权限一致。
- admin(运维权限):对全部命名空间下大多数资源的读写权限,对节点、存储卷,命名空间和配额管理的只读权限。
- cluster-admin(管理员权限):对全部命名空间下所有资源的读写权限。
CCE中的命名空间权限是基于Kubernetes RBAC能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。
某部门权限设计及配置示例
某部门权限设计及配置示例
活动对象:华为云电销客户及渠道伙伴客户可参与消费满送活动,其他客户参与前请咨询客户经理
活动时间: 2020年8月12日-2020年9月11日
活动期间,华为云用户通过活动页面购买云服务,或使用上云礼包优惠券在华为云官网新购云服务,累计新购实付付费金额达到一定额度,可兑换相应的实物礼品。活动优惠券可在本活动页面中“上云礼包”等方式获取,在华为云官网直接购买(未使用年中云钜惠活动优惠券)或参与其他活动的订单付费金额不计入统计范围内;
活动对象:华为云电销客户及渠道伙伴客户可参与消费满送活动,其他客户参与前请咨询客户经理
基于IAM系统策略的“集群权限”与基于Kubernetes RBAC能力的“命名空间权限”,两者是完全独立的,互不影响,但要配合使用。同时,为用户组设置的权限将作用于用户组下的全部用户。当给用户或用户组添加多个权限时,多个权限会同时生效(取并集)。
下面以一个公司为例进行介绍。
通常一个公司中有多个部门或项目,每个部门又有多个成员,所以在配置权限前需要先进行详细设计,并在设置权限之前提前为每个成员创建用户名,便于后续对用户进行用户组归属和权限设置。
下图为某公司某部门的组织架构图和相关人员的权限设计,本文将按照该设计对每个角色的权限设置进行演示:
-
收起
主管:DAVID 收起
用户“DAVID”为该公司某部门的主管,根据权限设计需要为其配置CCE服务的所有权限(包括集群权限和命名空间权限),因此需要在统一身份认证服务 IAM中单独为DAVID创建用户组“cce-admin”,并配置所有项目的权限:“CCE Administrator”。
- 说明
CCE Administrator:CCE的管理员权限,拥有该服务的所有权限,不需要再赋予其他权限。
CCE FullAccess、CCE ReadOnlyAccess:CCE的集群管理权限,仅针对与集群相关的资源(如集群、节点)有效,您必须确保同时配置了“命名空间权限”,才能有操作Kubernetes资源(如工作负载、Service等)的权限。
-
收起
运维组长:JAMES 收起
用户“JAMES”为该部门的运维组长,需要设置所有项目的集群权限和所有命名空间的只读权限。
在统一身份认证服务 IAM中为用户“JAMES”单独创建用户组“cce-sre”,然后为用户组“cce-sre”配置所有项目的集群权限:“CCE FullAccess”,用户组“cce-sre”便拥有了所有项目的集群管理权限,接下来为所有组长和工程师添加所有集群和命名空间的只读权限。
-
收起
开发组长:ROBERT 收起
用户“ROBERT”作为开发组的组长,虽然在已经为其设置了所有集群和命名空间的只读权限,但显然还不够,还需要为其设置所有命名空间的管理权限。
因此需要再单独为其赋予所有集群下全部命名空间的管理员权限。
-
收起
运维工程师:WILLIAM 收起
运维工程师“WILLIAM”虽然有了所有集群和命名空间的只读权限,但还需要在统一身份认证服务 IAM中为其设置区域的集群管理权限,因此单独为其创建一个用户组“cce-sre-b4”,然后配置区域项目的“CCE FullAccess”。
-
收起
开发工程师:LINDA、PETER 收起
“LINDA”和“PETER”是开发工程师,已经在用户组“read-only”中为两位工程师配置了集群和命名空间的只读权限,此时只需要再另外配置相应命名空间的编辑权限即可。