容器服务ACK的授权体系包含对基础资源层的RAM授权和对ACK集群层的RBAC(Role-Based Access Control)授权两部分。本文介绍容器服务ACK集群访问控制授权的组成及方式。
ACK授权体系
ACK的授权体系包含对基础资源层的RAM授权以及对ACK集群层的RBAC授权。ACK授权体系如下图所示。
授权类型 | 使用场景 | 可获取的相关操作 |
RAM授权 | 对应ACK集群的运维操作,需要获取ACK产品及其所依赖阿里云云产品的OpenAPI操作权限。 |
|
RBAC授权 | 对应运行于ACK集群中Kubernetes应用的运维操作,需要获取ACK集群及其命名空间的操作权限。 |
|
因此,当RAM用户或RAM角色需要进行集群运维和应用运维时,您需要依次对其进行RAM授权和RBAC授权。在进行RBAC授权前,您需要先进行RAM授权。三种典型场景的授权操作,如下所示:
如果授权对象为集群与集群内应用的运维人员,请参见场景一:授权对象为集群与集群内应用的运维人员。
如果授权对象为集群内应用的开发人员,请参见场景二:授权对象为集群内应用的开发人员。
如果授权对象为集群内应用的权限管理员,请参见场景三:授权对象为集群内应用的权限管理员。
对于离职员工或非受信人员,删除RAM用户或RAM角色并不会同步删除该用户或角色拥有的ACK集群KubeConfig中的RBAC权限。因此,在删除RAM用户或RAM角色之前,请吊销离职员工或非受信用户的KubeConfig权限。具体操作,请参见吊销集群的KubeConfig凭证。
权限类型
权限类型 | 是否必须授权 | 权限说明 |
服务角色 | 仅在第一次使用ACK时需要授权,使用阿里云账号(主账号)或者RAM账号管理员(子账号)进行一次授权即可。 | 授权后,才能访问其他关联云服务资源。 关于容器ACK服务角色,请参见容器服务ACK服务角色。 |
RAM授权 |
| 支持RAM系统策略授权和自定义策略授权,授权后,RAM用户或RAM角色才能使用ACK的功能。 |
RBAC权限 |
| 授权后,RAM用户或RAM角色才能够对集群内的K8s资源进行操作。 |
RAM授权
在企业对接RAM的账号系统中,运维人员通过RAM用户或RAM角色管理云服务资源是一个常见场景。然而默认情况下RAM用户或RAM角色没有使用云服务OpenAPI的任何权限,为了保证RAM用户或RAM角色的正常使用,需要对RAM用户或RAM角色进行授权。RAM授权支持系统策略授权和自定义策略授权。
当您需要对集群进行可见性、扩缩容、添加节点等操作时,需要进行RAM授权。具体操作,请参见自定义RAM授权策略。
RAM系统策略授权
系统策略授权用于指定全局资源的读写访问控制。当RAM用户或RAM角色具有阿里云账号下所有集群的运维管理权限时,建议使用系统策略进行快捷授权。为RAM用户或RAM角色添加系统策略权限,请参见自定义RAM授权策略。
容器服务的常用系统策略如下表所示,您可以根据业务需求添加对应的系统策略。
系统策略名称 | 说明 |
AliyunCSFullAccess | 当RAM用户或RAM角色需要容器服务产品所有OpenAPI的访问权限。 说明 此系统策略仅包含针对ACK产品的RAM授权。如您需要对ACK集群中的应用进行运维,还需要进行RBAC授权,请参见RBAC授权。 |
AliyunVPCReadOnlyAccess | 当RAM用户或RAM角色在创建集群时选择指定VPC。 |
AliyunECSReadOnlyAccess | 当RAM用户或RAM角色为集群添加已有节点或查看节点详细信息。 |
AliyunContainerRegistryFullAccess | 当RAM用户或RAM角色需要全局管理阿里云账号内的业务镜像。 |
AliyunLogReadOnlyAccess | 当RAM用户或RAM角色在创建集群时选择已有Log Project存储审计日志,或查看指定集群的配置巡检。 |
AliyunAHASReadOnlyAccess | 当RAM用户或RAM角色需要使用集群拓扑功能。 |
AliyunRAMFullAccess | 当RAM用户或RAM角色需要负责阿里云账号内的全局授权管理。 |
AliyunYundunSASReadOnlyAccess | 当RAM用户或RAM角色需要查看指定集群的运行时安全监控。 |
AliyunARMSReadOnlyAccess | 当RAM用户或RAM角色需要查看集群阿里云Prometheus插件的监控状态。 |
AliyunKMSReadOnlyAccess | 当RAM用户或RAM角色在创建Pro集群时启用Secret落盘加密能力。 |
AliyunESSReadOnlyAccess | 当RAM用户或RAM角色需要执行节点池的相关操作,例如查看、编辑和扩缩容等。 |
RAM自定义策略授权
自定义策略授权用于对目标RAM用户或RAM角色实现细粒度的云资源访问控制。另外,如果目标RAM用户或RAM角色有基于SDK的二次开发需求,还可实现API级别的权限控制。
ACK集群维度的RAM自定义策略授权流程,请参见自定义RAM授权策略。
ACK应用维度的访问控制,您可以通过为服务账户的RAM角色(RAM Roles for Service Accounts,简称RRSA)自定义策略,在集群内实现Pod维度的OpenAPI权限隔离。更多信息,请参见通过RRSA配置ServiceAccount的RAM权限实现Pod权限隔离。
例如,当RAM用户或RAM角色需要具有对指定OSS Bucket的读取权限时,可以参考以下RAM自定义策略。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:ListBuckets",
"oss:GetBucketStat",
"oss:GetBucketInfo",
"oss:GetBucketTagging",
"oss:GetBucketAcl"
],
"Resource": "acs:oss:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"oss:ListObjects",
"oss:GetBucketAcl"
],
"Resource": "acs:oss:*:*:myphotos"
},
{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:GetObjectAcl"
],
"Resource": "acs:oss:*:*:myphotos/*"
}
]
}
RBAC授权
RAM策略仅控制ACK集群资源的操作权限,若RAM用户或RAM角色需要操作指定集群内K8s资源时(例如,获取集群Pod和Node信息),需要在容器服务管理控制台的授权管理页面对指定RAM用户或RAM角色进行集群内部资源的访问授权。
预置角色
您可以给RAM用户或RAM角色授予以下预置角色。具体操作,请参见为RAM用户或RAM角色授予RBAC权限。
表 1. 角色权限说明
角色 | 集群内RBAC权限 |
管理员 | 对所有命名空间下所有资源的读写权限。 |
运维人员 | 对所有命名空间下控制台可见资源的读写权限,对集群节点、存储卷、命名空间、配额的只读权限。 |
开发人员 | 对所有命名空间或所选命名空间下控制台可见资源的读写权限。 |
受限用户 | 对所有命名空间或所选命名空间下控制台可见资源的只读权限。 |
自定义 | 权限由您所选择的ClusterRole决定,请在确定所选ClusterRole对各类资源的操作权限后再进行授权,以免RAM用户或RAM角色获得不符合预期的权限。关于ClusterRole的更多信息,请参见自定义Kubernetes授权策略。 |
Role和ClusterRole
RBAC的Role或ClusterRole中包含一组代表相关权限的规则。这些权限是纯粹累加的(不存在拒绝某操作的规则)。
Role总是用来在某个命名空间内设置访问权限;在您创建Role时,您必须指定该Role所属的命名空间。
与之相对,ClusterRole则是一个集群作用域的资源。这两种资源的名字不同(Role和ClusterRole)是因为Kubernetes对象是命名空间作用域或集群作用域的,不可两者兼具。
ClusterRole有若干用法。您可以用来:
定义对某个命名空间域对象的访问权限,并将在各个命名空间内完成授权。
为命名空间作用域的对象设置访问权限,并跨所有命名空间执行授权。
为集群作用域的资源定义访问权限。
如果您需要在命名空间内定义角色,应该使用Role;如果您需要定义集群范围的角色,应该使用ClusterRole。
关于如何编写Kubernetes的ClusterRole和Role,请参见自定义Kubernetes授权策略。
关于如何授予RAM用户或RAM角色自定义RBAC授权策略,请参见为RAM用户或RAM角色授予RBAC权限。
当前容器服务ACK授权管理只支持自定义ClusterRole角色与集群内RBAC权限的绑定,不支持自定义Role角色与集群内RBAC权限的绑定。