使用RAM和RBAC进行访问权限控制

容器服务ACK的授权体系融合了阿里云访问控制(RAM)与Kubernetes原生的RBAC(Role-Based Access Control)机制,支持对基础资源层和集群内部资源的权限控制,为您提供灵活的多层次权限管理解决方案。

授权体系

容器服务ACK的授权体系包含对基础资源层的RAM授权以及对集群层的RBAC授权。授权体系如下图所示。

image
  • RAM授权:基于RAM系统策略或自定义策略的授权,属于云资源维度的授权,通过RAM授权,您可以获取容器服务ACK产品及其所依赖阿里云云产品的OpenAPI操作权限,对集群进行如下运维操作:

    • 集群:创建、查看、升级、删除

    • 节点池:创建、修改、扩缩容

    • 授权管理

    • 集群监控、日志、事件

  • RBAC授权:基于Kubernetes RBAC的授权,属于集群内部资源维度的授权,通过RBAC授权,可以让不同的用户拥有操作不同Kubernetes资源的操作权限。主要包括对以下Kubernetes对象资源的增删改查操作:

    • 工作负载:Deployment、StatefulSet、DaemonSet、Job、CronJob、Pod、ReplicaSet等

    • 网络:Service、Ingress、NetworkPolicy等

    • 存储:PV、PVC、StorageClass等

    • Namespace、ConfigMap 、Secrets等

权限类型

权限类型

是否必须授权

权限说明

RAM授权

  • RAM用户或RAM角色必须授权。

  • 阿里云账号默认拥有权限,无需授权。

  • 服务角色:首次使用容器服务ACK时,使用阿里云账号(主账号)或者RAM账号管理员(子账号)进行一次授权即可。

  • 支持RAM系统策略授权和自定义策略授权,授权后,RAM用户或RAM角色才能访问其他关联云服务资源。

  • 服务角色授权后,可以允许服务角色代您访问容器服务ACK以及其他云服务资源。关于容器ACK服务角色,请参见容器服务ACK服务角色

RBAC授权

  • RAM用户或RAM角色必须授权。

  • 阿里云账号默认拥有权限,无需授权。

授权后,RAM用户或RAM角色才能对集群内的Kubernetes资源进行操作。

RAM授权

默认情况下,RAM用户或RAM角色没有使用云服务OpenAPI的任何权限,当您需要通过RAM用户或RAM角色管理云服务资源时,您可以为RAM用户或RAM角色配置系统策略及自定义策略的权限,以适应不同的场景需求。具体操作,请参见使用RAM授予集群及云资源访问权限

RAM授权其他使用场景

  • 您可以使用标签对集群做分类,并匹配对应的RAM权限策略,实现集群的精细化权限管理,使不同的用户可以拥有不同的集群的访问权限。具体操作,请参见通过标签实现精细化权限管理

  • 当您通过Worker RAM角色为特定的应用授权时,权限将会共享给集群内所有的节点,可能会存在非预期的权限扩散的风险。您可以在创建节点池时为其指定一个自定义的Worker RAM角色,通过为不同的节点池分配特定的角色,降低在集群所有节点中共用一个Worker RAM角色可能存在的风险。具体操作,请参见使用自定义Worker RAM角色

  • 如需提升集群内应用访问其他云服务的安全性,您可以通过RRSA配置ServiceAccount的RAM权限实现Pod权限隔离。具体操作,请参见通过RRSA配置ServiceAccount的RAM权限实现Pod权限隔离

  • 为了提升ACK托管集群节点的安全性,您可以基于最小化原则手动调整和优化已分配给Worker节点的RAM角色所具有的权限。具体操作,请参见手动收敛ACK托管版集群的Worker RAM角色权限

RBAC授权

RAM授权后仅拥有集群的操作权限,若RAM用户或RAM角色需要操作指定集群内Kubernetes资源时(例如,获取集群Pod和节点信息),您需要在的授权管理页面对指定RAM用户或RAM角色进行RBAC授权。

Kubernetes RBAC支持以下类型的角色和绑定,通过角色定义资源的访问权限时,仅支持允许访问资源,不支持拒绝访问资源。关于如何编写Kubernetes的ClusterRole和Role,请参见使用自定义RBAC限制集群内资源操作

  • Role:角色,定义对单个命名空间内资源的访问权限。

  • RoleBinding:角色绑定,定义用户和角色的关系。

  • ClusterRole:集群角色,定义对整个集群内资源的访问权限。

  • ClusterRoleBinding:集群角色绑定,定义用户和集群角色的关系。

重要

当前容器服务的授权管理仅支持自定义ClusterRole与集群的RAM用户或RAM角色的绑定,不支持自定义Role与集群的RAM用户或RAM角色的绑定。

容器服务管理控制台预置了多种ClusterRole,方便您为RAM用户或角色分配对应的权限。具体操作,请参见使用RBAC授予集群内资源操作权限

表 1. 角色权限说明

角色

集群内RBAC权限

管理员

对所有命名空间下所有资源的读写权限。

运维人员

对所有命名空间下控制台可见资源的读写权限,对集群节点、存储卷、命名空间、配额的只读权限。

开发人员

对所有命名空间或所选命名空间下控制台可见资源的读写权限。

受限用户

对所有命名空间或所选命名空间下控制台可见资源的只读权限。

自定义

权限由您所选择的ClusterRole决定,请在确定所选ClusterRole对各类资源的操作权限后再进行授权,以免RAM用户或RAM角色获得不符合预期的权限。关于ClusterRole的更多信息,请参见使用自定义RBAC限制集群内资源操作

当RAM用户或RAM角色需要进行集群运维和应用运维时,您需要依次对其进行RAM授权和RBAC授权。在进行RBAC授权前,您需要先进行RAM授权。三种典型场景的授权操作,如下所示:

重要

对于离职员工或非受信人员,删除RAM用户或RAM角色并不会同步删除该用户或角色拥有的集群KubeConfig中的RBAC权限。因此,删除RAM用户或RAM角色以后,请您及时清除离职员工或非受信用户的KubeConfig权限。具体操作,请参见清除KubeConfig