更新时间:2024-11-05 GMT+08:00

身份认证与访问控制

CCI当前认证鉴权是在Kubernetes的角色访问控制(RBAC)与统一身份认证服务(IAM)的能力基础上,提供的基于IAM的细粒度权限控制和IAM Token认证,同时支持命名空间级别及命名空间以下资源的权限控制,帮助用户便捷灵活的对租户下的IAM用户、用户组设定不同的操作权限。

  • 命名空间权限:是基于Kubernetes RBAC能力的授权。通过权限设置可以让不同的用户或用户组拥有操作指定Namespace下Kubernetes资源的权限。
  • CCI权限:是基于IAM的细粒度授权。通过命名空间级别权限设置可以控制用户操作Namespace(如创建、删除Namespace等)。更多细粒度权限说明请参见CCI细粒度鉴权系统策略关联Actions
  • CCI服务暂不支持Landingzone场景。
  • 创建Namespace时,打开RBAC鉴权开关,则此Namespace下资源访问受RBAC鉴权控制;如果未打开RBAC鉴权开关,则RBAC鉴权不生效。
  • 创建开启RBAC鉴权的Namespace后,需要先对用户授权后,用户才能使用这个Namespace。
  • network、clusterRole和roleBinding资源不受RBAC权限影响,只受IAM细粒度鉴权控制。network受控于network相关action,clusterRole与roleBinding受控于rbac相关action。
  • 支持对当前用户下的所有命名空间进行授权,以提供更好的前端显示体验。
  • 如果同时基于IAM,授予系统角色(IAM RBAC授权)和授予自定义策略(IAM细粒度授权),则判定CCI权限的优先级顺序为:IAM RBAC授权>IAM细粒度授权。
图1 CCI权限管理

命名空间权限

Kubernetes RBAC API定义了四种类型:Role、ClusterRole、RoleBinding与ClusterRoleBinding。当前CCI仅支持ClusterRole、RoleBinding,这两种类型之间的关系和简要说明如下:

  • ClusterRole:描述角色和权限的关系。在Kubernetes的RBAC API中,一个角色定义了一组特定权限的规则。整个Kubernetes集群范围内有效的角色则通过ClusterRole对象实现。
  • RoleBinding:描述subjects(包含users,groups)和角色的关系。角色绑定将一个角色中定义的各种权限授予一个或者一组用户,该用户或用户组则具有对应绑定ClusterRole定义的权限。
表1 RBAC API所定义的两种类型

类型名称

说明

ClusterRole

ClusterRole对象可以授予整个集群范围内资源访问权限。

RoleBinding

RoleBinding可以将同一Namespace中的subject(用户)绑定到某个具有特定权限的ClusterRole下,则此subject即具有该ClusterRole定义的权限。

当前仅支持用户使用ClusterRole在Namespace下创建RoleBinding。

CCI的kubernetes资源通过命名空间进行权限设置,目前包含cluster-adminadmineditview四种角色,详见表2

表2 用户/用户组角色说明

默认的ClusterRole

描述

cluster-admin

具有Kubernetes所有资源对象操作权限。

admin

允许admin访问,可以限制在一个Namespace中使用RoleBinding。如果在RoleBinding中使用,则允许对Namespace中大多数资源进行读写访问。这一角色不允许操作Namespace本身,也不能写入资源限额。

edit

允许对命名空间内的大多数资源进行读写操作。

view

允许对多数对象进行只读操作,但是对secret是不可访问的。

更多Kubernetes RBAC授权的内容可以参考Kubernetes RBAC官方文档