使用RBAC为集群内资源操作授权

更新时间:
复制 MD 格式

操作ACK集群的Kubernetes资源需要同时具备RAM权限和RBAC权限。阿里云账号默认拥有全部RAM权限;RAM用户或角色需要分别授予这两项权限。本文介绍如何为目标用户完成RAM授权和RBAC授权。

工作原理

ACK授权体系包括阿里云RAMKubernetes RBAC两个层级,构成了从云资源到集群资源的完整授权链路。

  • RAM:决定了谁能"进入"集群的大门。负责在云资源层面进行授权,控制用户对ACK集群及其依赖云产品的OpenAPI操作权限。

  • RBAC:决定了用户"进入"大门后能做什么。负责在集群内部进行精细化授权,定义用户能对哪些Kubernetes资源(如Pod、Deployment)执行何种操作(如创建、删除)。

步骤一:授予RAM权限

RAM权限决定用户能否访问ACK集群的云资源。阿里云账号默认拥有全部RAM权限,可跳过此步骤。如果需要为RAM用户或角色授予RAM权限,请选择以下任一方式完成授权。

方式一:系统策略授权

重要

系统策略需使用AliyunRAMReadOnlyAccessAliyunCSFullAccess,权限较大。如需精细化授权,请使用方式二:自定义策略精细化授权

  1. 使用阿里云账号登录RAM管理控制台,定位目标RAM用户或角色。

    • RAM用户:选择身份管理 > 用户,在用户列表的操作列,单击新增授权

    • RAM角色:选择身份管理 > 角色,在角色列表的操作列,单击新增授权

  2. 选择资源范围账号级别,在权限策略区域定位并选中系统策略AliyunRAMReadOnlyAccessAliyunCSFullAccess,按照页面提示完成授权。

方式二:自定义策略精细化授权

权限管理员需具备以下能力:

  • 查看其他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"
}

步骤二:授予RBAC权限

RBAC权限决定用户在集群内能对哪些Kubernetes资源执行何种操作。

(可选)设置权限管理员

阿里云账号默认具备RBAC管理能力。如需委托RAM用户或角色来管理RBAC授权,需先将其设为权限管理员。如果已有权限管理员或由阿里云账号直接操作,可跳过此步骤。

使用阿里云账号登录容器服务管理控制台,为目标RAM用户或角色在集群维度授予预置角色管理员

  1. 登录容器服务管理控制台,在左侧导航栏选择授权管理

  2. 授权管理页面配置管理权限。

    • RAM用户授权:单击RAM 用户页签,定位目标 RAM 用户,单击操作列的管理权限,进入权限管理页面。

    • RAM角色授权:单击RAM 角色页签,选择目标 RAM 角色,单击管理权限,进入权限管理页面。

  3. 单击+ 添加权限,按照页面提示添加集群和命名空间级别的权限配置,选择预置角色为管理员

    如果在所有集群维度进行授权,权限管理员的身份将自动应用到未来新建的集群,无需重复授权。

授权操作

使用阿里云账号或权限管理员登录控制台,为目标RAM用户或角色授予RBAC权限。

  1. 登录容器服务管理控制台,在左侧导航栏选择授权管理

  2. 授权管理页面配置管理权限。

    • RAM用户授权:单击RAM 用户页签,定位目标 RAM 用户,单击操作列的管理权限,进入权限管理页面。

    • RAM角色授权:单击RAM 角色页签,选择目标 RAM 角色,单击管理权限,进入权限管理页面。

  3. 单击+ 添加权限,按照页面提示为目标RAM用户或角色添加集群或命名空间级别的权限配置,并选择预置角色。

    根据用户职责选择预置角色。各预置角色的权限范围,请参见下文预置角色说明

授权完成后,目标RAM用户或角色即可在其权限范围内操作集群的Kubernetes资源。

应用于生产环境

为提升权限管理的安全性和可维护性,建议遵循以下建议。

  • 遵循最小权限原则

    仅授予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权限时,将返回相应的无权限错误码。可参见下表解决。

错误码或错误信息

说明

解决方案

ForbiddenCheckControlPlaneLog

查看控制面日志被拒绝。

为用户授予管理员或运维人员权限。

ForbiddenHelmUsage

执行Helm操作被拒绝。

为用户授予管理员权限。

ForbiddenRotateCert

证书轮换被拒绝。

为用户授予管理员权限。

ForbiddenAttachInstance

添加节点被拒绝。

为用户授予管理员或运维人员权限。

ForbiddenUpdateKMSState

修改集群KMS落盘加密状态被拒绝。

为用户授予管理员或运维人员权限。

Forbidden get trigger

获取应用触发器信息被拒绝。

为用户授予管理员、运维人员或开发人员权限。

ForbiddenQueryClusterNamespace

查询集群命名空间被拒绝。

为用户授予管理员、运维人员、开发人员或受限用户的权限。

RBAC预置角色不满足需求,如何创建自定义权限?

可通过编写YAML来创建自定义RoleClusterRole。例如,创建一个只允许查看PodClusterRole,然后在授权时选择自定义权限并绑定对应的ClusterRole。具体操作,请参见使用自定义RBAC限制集群内资源操作

RBAC的权限策略仅支持允许(Allow)访问资源,不支持显式拒绝(Deny)访问资源。

相关文档