操作ACK集群需遵循RAM和Kubernetes RBAC的双重授权。默认情况下,仅阿里云账号和集群创建者拥有集群的完整权限。其他RAM用户或角色在获得访问集群的RAM授权后,仍需具有RBAC权限,才能对集群内的Kubernetes资源进行操作。
工作原理
ACK的授权体系包括阿里云RAM和Kubernetes RBAC两个层级,构成了从云资源到集群资源的完整授权链路。
RAM:决定了谁能“进入”集群的大门。负责在云资源层面进行授权,控制用户对ACK集群及其依赖云产品的OpenAPI操作权限。
RBAC:决定了用户“进入”大门后能做什么。负责在集群内部进行精细化授权,定义用户能对哪些Kubernetes资源(如Pod、Deployment)执行何种操作(如创建、删除)。
Kubernetes RBAC 机制
ClusterRole
:定义一个在整个集群范围生效的权限集合,再通过ClusterRoleBinding
将其绑定至授权主体,使其权限在整个集群内生效。Role
:定义一个仅在单个命名空间内有效的权限集合,再通过RoleBinding
将其绑定至授权主体,使其权限仅在当前命名空间内生效。
场景一:使用阿里云账号进行RBAC授权
登录容器服务管理控制台,在左侧导航栏选择授权管理。
在授权管理页面配置管理权限。
为RAM用户授权:单击RAM 用户页签,定位目标 RAM 用户,单击操作列的管理权限,进入权限管理页面。
为RAM角色授权:单击RAM 角色页签,定位目标 RAM 角色,单击管理权限,进入权限管理页面。
单击+ 添加权限,按照页面提示为目标RAM用户或角色添加集群或命名空间级别的权限配置,并选择预置角色。
场景二:使用RAM用户或角色进行RBAC授权
默认情况下,RAM用户或角色无法为其他账号授予RBAC权限。为便于权限管理,ACK支持指定某个RAM用户或角色为权限管理员,使其能够为其他用户授予RBAC权限。
步骤一:将RAM用户或角色设置为权限管理员
1. 获得授权所需的RAM权限
方式一:系统策略授权
系统策略需使用AliyunRAMReadOnlyAccess和AliyunCSFullAccess,权限较大。如需精细化授权,请使用方式二:自定义策略精细化授权。
使用阿里云账号登录RAM管理控制台,定位目标RAM用户或角色。
RAM用户:选择
,在用户列表的操作列,单击添加权限。RAM角色:选择
,在角色列表的操作列,单击添加权限。
选择资源范围为账号级别,在权限策略区域定位并选中系统策略AliyunRAMReadOnlyAccess和AliyunCSFullAccess,按照页面提示完成授权。
方式二:自定义策略精细化授权
权限管理员需具备以下能力:
查看其他RAM身份信息
查看集群列表和详情
查看集群已有的RBAC配置
在集群中执行RBAC授权操作
请登录RAM管理控制台,参考以下代码示例,为目标RAM用户或角色授予所需的RAM权限。具体操作,请参见使用自定义策略授权。
{
"Statement": [{
"Action": [
"ram:Get*",
"ram:List*",
"cs:Get*",
"cs:Describe*",
"cs:List*",
"cs:GrantPermission"
],
"Resource": "*",
"Effect": "Allow"
}
],
"Version": "1"
}
2. 获得RBAC管理员权限
使用阿里云账号登录容器服务管理控制台,为目标RAM用户或角色在集群维度授予预置角色管理员。
登录容器服务管理控制台,在左侧导航栏选择授权管理。
在授权管理页面配置管理权限。
为RAM用户授权:单击RAM 用户页签,定位目标 RAM 用户,单击操作列的管理权限,进入权限管理页面。
为RAM角色授权:单击RAM 角色页签,定位目标 RAM 角色,单击管理权限,进入权限管理页面。
单击+ 添加权限,按照页面提示添加集群和命名空间级别的权限配置,选择预置角色为管理员。
如果在所有集群维度进行授权,权限管理员的身份将自动应用到未来新建的集群,无需重复授权。
步骤二:为其他RAM用户或角色授予RBAC权限
完成前置授权后,权限管理员即可在授权管理页面为其他RAM用户或角色授予RBAC权限。
适用于生产环境
为提升权限管理的安全性和可维护性,建议遵循以下建议。
遵循最小权限原则
仅授予RAM用户、角色等主体完成其工作所必需的最小权限集。避免无差别授予管理员等高权限角色。
实施精细化授权
分层授权:区分RAM(负责云资源访问)和RBAC(负责集群内资源访问)的职责。
收敛作用域:优先使用
RoleBinding
将权限限制在特定的命名空间内,而非集群级别的ClusterRoleBinding
。精确选择角色:优先使用ACK提供的预置角色。如需自定义角色,应精确定义权限规则,避免使用通配符(
*
)。
持续治理
权限管理是一个动态过程。应建立定期审计机制,及时回收冗余或过度的授权,并对权限管理员等高权限角色的操作进行记录和监控。
附录:预置角色说明
为了简化权限管理并快速满足常见的用户场景,ACK基于RBAC机制封装了多种标准化的预置角色。
预置角色 | 集群内RBAC权限 |
管理员 | 对集群所有命名空间下Kubernetes资源的RBAC读写权限,对集群节点、存储卷、命名空间、配额的读写权限。 |
只读管理员 | 对集群所有命名空间下Kubernetes资源的RBAC只读权限,对集群节点、存储卷、命名空间、配额的只读权限。 |
运维人员 | 对集群所有命名空间下控制台可见Kubernetes资源的RBAC读写权限,对集群节点、存储卷、命名空间的读取与更新权限,对其他资源的只读权限。 |
开发人员 | 对集群所有命名空间或所选命名空间下控制台可见Kubernetes资源的RBAC读写权限。 |
受限用户 | 对集群所有命名空间或所选命名空间下控制台可见Kubernetes资源的RBAC只读权限。 |
自定义 | 权限由您所选择的ClusterRole决定,请在确定所选ClusterRole对各类资源的操作权限后再进行授权,以免RAM用户或RAM角色获得不符合预期的权限。关于自定义权限的授权,请参见使用自定义RBAC限制集群内资源操作。 重要 RAM用户或RAM角色被授予cluster-admin权限后,在该集群内可视为与阿里云账号有相同权限的超级账号,拥有操作集群内所有资源的任意权限。请谨慎授予。 |
常见问题
操作时遇到无权限错误码怎么办?
通过控制台或OpenAPI所做的部分操作缺少所需的RBAC权限时,将返回相应的无权限错误码。可参见下表解决。
错误码或错误信息 | 说明 | 解决方案 |
| 查看控制面日志被拒绝。 | 为用户授予管理员或运维人员权限。 |
| 执行Helm操作被拒绝。 | 为用户授予管理员权限。 |
| 证书轮换被拒绝。 | 为用户授予管理员权限。 |
| 添加节点被拒绝。 | 为用户授予管理员或运维人员权限。 |
| 修改集群KMS落盘加密状态被拒绝。 | 为用户授予管理员或运维人员权限。 |
| 获取应用触发器信息被拒绝。 | 为用户授予管理员、运维人员或开发人员权限。 |
| 查询集群命名空间被拒绝。 | 为用户授予管理员、运维人员、开发人员或受限用户的权限。 |
RBAC预置角色不满足需求,如何创建自定义权限?
可通过编写YAML来创建自定义Role或ClusterRole。例如,创建一个只允许查看Pod的ClusterRole,然后在授权时选择自定义权限并绑定对应的ClusterRole。具体操作,请参见使用自定义RBAC限制集群内资源操作。
RBAC的权限策略仅支持允许(Allow)访问资源,不支持显式拒绝(Deny)访问资源。
相关文档
如果预置的角色不满足需求,需要自定义RBAC获取集群内资源的访问权限,请参见使用自定义RBAC限制集群内资源操作。
针对不同运维角色的完整授权流程(包含RAM授权和RBAC授权),请参见
如果授权对象为集群与集群内应用的运维人员,请参见场景二:授权对象为集群与集群内应用的运维人员。
如果授权对象为集群内应用的开发人员,请参见场景三:授权对象为集群内应用的开发人员。
如果授权对象为集群内应用的权限管理员,请参见场景四:授权对象为集群内应用的权限管理员。
ACK提供的服务角色,请参见容器服务ACK服务角色。
授权过程中如遇问题,请参见授权管理FAQ。