什么是权限管理

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”中为两位工程师配置了集群和命名空间的只读权限,此时只需要再另外配置相应命名空间的编辑权限即可。

常见问题

常见问题

  • 能否只配置命名空间权限,不配置集群管理权限?

    命名空间权限和集群管理权限是相互独立又相互补充的两个权限体系:

    1.命名空间权限:作用于集群内部,用于管理集群资源操作(如创建工作负载等)。

    2.集群管理(IAM)权限:云服务层面的权限,用于管理CCE集群与周边资源(如VPC、ELB、ECS等)的操作。

    对于IAM Admin用户组的管理员用户来说,可以为IAM子用户授予集群管理权限(如CCE Administrator、CCE FullAccess等),也可以在CCE控制台授予某个集群的命名空间权限。但由于CCE控制台界面权限是由IAM系统策略进行判断,如果IAM子用户未配置集群管理(IAM)权限,该子用户将无法进入CCE控制台。

    如果您无需使用CCE控制台,只使用kubectl命令操作集群中的资源,则不受集群管理(IAM)权限的影响,您只需要获取具有命名空间权限的配置文件(kubeconfig)。集群配置文件在传递过程中可能存在泄露风险,应在实际使用中注意。

  • 如果不配置集群管理权限的情况下,是否可以使用API呢?

    CCE提供的API可以分为云服务接口和集群接口:

    1.云服务接口:支持操作云服务层面的基础设施(如创建节点),也可以调用集群层面的资源(如创建工作负载)。

    使用云服务接口时,必须配置集群管理(IAM)权限。

    2. 集群接口:直接通过Kubernetes原生API Server来调用集群层面的资源(如创建工作负载),但不支持操作云服务层面的基础设施(如创建节点)。

    使用集群接口时,无需配置集群管理(IAM)权限,仅需在调用集群接口时带上集群证书。但是,集群证书需要有集群管理(IAM)权限的用户进行下载,在证书传递过程中可能存在泄露风险,应在实际使用中注意。

  • 如果不配置集群管理权限,是否可以使用kubectl命令呢?

    使用kubectl命令无需经过IAM认证,因此理论上不配置集群管理(IAM)权限是可以使用kubectl命令的。但前提是需要获取具有命名空间权限的kubectl配置文件(kubeconfig),以下场景认证文件传递过程中均存在安全泄露风险,应在实际使用中注意。

    场景一

    如果某IAM子用户先配置了集群管理权限和命名空间权限,然后在界面下载kubeconfig认证文件。后面再删除集群管理权限(保留命名空间权限),依然可以使用kubectl来操作Kubernetes集群。因此如需彻底删除用户权限,必须同时删除该用户的集群管理权限和命名空间权限。

    场景二

    如果某IAM用户拥有一定范围的集群管理权限和命名空间权限,然后在界面下载kubeconfig认证文件。此时CCE根据用户信息的权限判断kubectl有权限访问哪些Kubernetes资源,即哪个用户获取的kubeconfig文件,kubeconfig中就拥有哪个用户的认证信息,任何人都可以通过这个kubeconfig文件访问集群。