使用RBAC授予集群内资源操作权限
RBAC(Role-Based Access Control)是基于角色的访问控制。您可以通过Role和ClusterRole定义可操作的资源对象,通过RoleBinding和ClusterRoleBinding将角色绑定到特定的用户,从而实现RBAC权限配置,让不同用户拥有不同的Kubernetes资源操作权限。RAM用户或RAM角色进行集群RAM授权之后,您还需要对其进行集群内部资源的RBAC授权,才能对集群内Kubernetes资源进行操作,例如创建Deployment、Service。
RBAC工作原理
Kubernetes RBAC支持以下类型的角色和绑定,通过角色定义资源的访问权限时,仅支持允许访问资源,不支持拒绝访问资源。关于如何编写Kubernetes的ClusterRole和Role,请参见使用自定义RBAC限制集群内资源操作。
Role:角色,定义对单个命名空间内资源的访问权限。
RoleBinding:角色绑定,定义用户和角色的关系。
ClusterRole:集群角色,定义对整个集群内资源的访问权限。
ClusterRoleBinding:集群角色绑定,定义用户和集群角色的关系。
前提条件
RAM用户或RAM角色已获取目标集群的RAM只读权限,参考策略如下。具体操作,请参见使用自定义策略授权。
授权说明
阿里云账号(主账号)可以对所有集群进行所有操作,RAM用户或RAM角色拥有自己创建的集群的所有操作权限,非集群创建者的RAM用户或RAM角色,需要额外进行RAM和RBAC授权,才能操作集群。
操作步骤
容器服务ACK默认提供管理员、运维人员、开发人员和受限用户这四种标准的集群资源RBAC访问权限,可满足大部分用户在容器服务控制台上的使用需求。如果您想自由定义集群资源的RBAC访问权限,请参见使用自定义RBAC限制集群内资源操作。
满足以下条件的账号才可以为其他RAM用户或RAM角色进行授权。
阿里云账号(主账号)。
拥有管理员权限的RAM用户或RAM角色。
使用阿里云账号授权
在授权管理页面配置管理权限。
为RAM用户授权
单击RAM 用户页签,在RAM用户列表中,单击目标RAM用户右侧的管理权限,进入权限管理页面,您也可以选择多个目标RAM用户进行批量授权。
为RAM角色授权
单击RAM 角色页签,输入RAM 角色名称,然后单击管理权限,进入权限管理页面。
说明RAM角色支持手动输入,也支持在下拉列表中选择。您可以单击RAM角色右侧空白框,将会显示已有的RAM角色列表,然后从列表中选择已有的RAM角色进行授权。
单击+ 添加权限,为目标RAM用户或RAM角色添加集群和命名空间级别的权限配置,并选择相应的预置角色,然后单击提交授权。
说明在一个目标集群或命名空间中为RAM用户或RAM角色的授权时,支持配置一个预置角色、多个自定义角色,此时,所获得的权限为多个角色权限的并集。
如果您需要在所有集群维度为RAM用户或RAM角色进行一键授权,使得后续新创建的集群也会为被授权的RAM用户或RAM角色自动绑定已经授权的预置角色,您可以选择集群为所有集群。
预置角色
集群内RBAC权限
管理员
对集群所有命名空间下Kubernetes资源的RBAC读写权限,以及对集群节点、存储卷、命名空间、配额的读写权限。
运维人员
对所有命名空间下控制台可见Kubernetes资源的读写权限,对集群节点、存储卷、命名空间、配额的只读权限。
开发人员
对所有命名空间或所选命名空间下控制台可见Kubernetes资源的RBAC读写权限。
受限用户
对所有命名空间或所选命名空间下控制台可见Kubernetes资源的RBAC只读权限。
自定义
权限由您所选择的ClusterRole决定,请在确定所选ClusterRole对各类资源的操作权限后再进行授权,以免RAM用户或RAM角色获得不符合预期的权限。关于自定义权限的授权,请参见使用自定义RBAC限制集群内资源操作。
重要RAM用户或RAM角色被授予cluster-admin权限后,在该集群内可视为与阿里云账号有相同权限的超级账号,拥有操作集群内所有资源的任意权限。请谨慎授予。
使用RAM用户或RAM角色授权
阿里云账号(主账号)对账号中的资源具有完全管理权限,您也可以将新建或已有的RAM用户或角色授予如下RAM权限和RBAC权限,使其成为一个权限管理员,后续使用该RAM用户或RAM角色进行为其他用户或角色授权。
步骤一:将RAM用户或RAM角色设置为权限管理员
1、获取RAM授权权限
使用系统策略授权
使用阿里云账号登录RAM管理控制台,定位目标RAM用户或RAM角色。
RAM用户
选择
,在用户列表的操作列,单击添加权限。RAM角色
选择
,在角色列表的操作列,单击添加权限。
在添加权限面板,选择授权范围,然后选择权限为系统策略,根据名称搜索或在列表中找到并单击AliyunRAMFullAccess和AliyunCSFullAccess系统策略,将该策略移动到右侧的已选择区域,然后单击确定。权限成功添加后,单击完成。
重要AliyunRAMFullAccess为高风险权限,请谨慎授予。如需精细化授权,请参见使用自定义策略精细化授权。
使用自定义策略精细化授权
默认情况下,RAM用户或RAM角色不具备对其他RAM用户或角色进行RBAC授权的能力。您需要为其授予如下权限:
查看其他RAM账号。
授予RAM权限策略。
查看集群信息。
查看RBAC权限配置。
RBAC授权能力。
登录RAM管理控制台,参考以下代码示例,为该RAM用户或RAM角色授予所需的RAM权限。具体操作,请参见使用自定义策略授权。
请将xxxxxx
替换为需要绑定的RAM策略的名称。替换为 *,表示RAM用户或RAM角色拥有所有RAM策略的授权绑定能力。
{
"Statement": [{
"Action": [
"ram:Get*",
"ram:List*",
"cs:Get*",
"cs:Describe*",
"cs:List*",
"cs:GrantPermission"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ram:AttachPolicyToUser",
"ram:AttachPolicy"
],
"Effect": "Allow",
"Resource": [
"acs:ram:*:*:policy/xxxxxx",
"acs:*:*:*:user/*"
]
}
],
"Version": "1"
}
2、获取RBAC授权权限
完成上述RAM权限和RBAC权限授权之后,该RAM用户或RAM角色成为一个权限管理员,拥有给其他RAM用户或RAM角色进行RAM授权和RBAC授权的能力。
拥有管理员权限的RAM用户或RAM角色,可以在所有集群维度进行一键授权,后续新创建的集群也会自动绑定已经授权的ClusterRole。
步骤二:为其他RAM用户或RAM角色授权
RAM用户或RAM角色获取管理员权限之后,即可登录为其他用户或角色授权,具体操作和阿里云账号授权操作一致,请参见使用阿里云账号授权。
自定义集群资源权限
如果您想自由定义集群资源的访问权限,可使用自定义集群资源权限功能。关于如何编写自定义集群资源RBAC权限,请参见使用自定义RBAC限制集群内资源操作。
阿里云容器服务内置了一些自定义集群资源权限。
其中cluster-admin权限值得关注,属于集群超级管理员权限,对所有资源都默认拥有权限。
您可登录到集群节点,执行以下命令,查看自定义权限的详情。
kubectl get clusterrole
预期输出:
NAME AGE
admin 13d
alibaba-log-controller 13d
alicloud-disk-controller-runner 13d
cluster-admin 13d
cs:admin 13d
edit 13d
flannel 13d
kube-state-metrics 22h
node-exporter 22h
prometheus-k8s 22h
prometheus-operator 22h
system:aggregate-to-admin 13d
....
system:volume-scheduler 13d
view 13d
以超级管理员cluster-admin为例,执行以下命令,查看其权限详情。
RAM用户或RAM角色被授予该集群角色后,在该集群内,可视为与阿里云账号有相同权限的超级账号,拥有操作集群内所有资源的任意权限,建议谨慎授予。
kubectl get clusterrole cluster-admin -o yaml
预期输出:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
creationTimestamp: 2018-10-12T08:31:15Z
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: cluster-admin
resourceVersion: "57"
selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/cluster-admin
uid: 2f29f9c5-cdf9-11e8-84bf-00163e0b2f97
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
- nonResourceURLs:
- '*'
verbs:
- '*'
无权限错误码说明
当您通过控制台或OpenAPI所做的部分操作缺少所需的RBAC权限时,控制台或OpenAPI将返回相应的无权限错误码。各个错误码对应操作所需的集群RBAC权限说明如下表所示。
错误码或错误信息 | 解决方案 |
ForbiddenCheckControlPlaneLog | 请为用户授予管理员或运维人员权限。 |
ForbiddenHelmUsage | 请为用户授予管理员权限。 |
ForbiddenRotateCert | 请为用户授予管理员权限。 |
ForbiddenAttachInstance | 请为用户授予管理员或运维人员权限。 |
ForbiddenUpdateKMSState | 请为用户授予管理员或运维人员权限。 |
Forbidden get trigger | 请为用户授予管理员、运维人员或开发人员权限。 |
ForbiddenQueryClusterNamespace | 请为用户授予管理员、运维人员、开发人员或受限用户的权限。 |
相关文档
如果预置的角色不能满足您的要求,您需要自定义RBAC获取集群内资源的访问权限,请参见使用自定义RBAC限制集群内资源操作。
当RAM用户或RAM角色需要进行集群运维和应用运维时,您需要依次对其进行RAM授权和RBAC授权。
如果授权对象为集群与集群内应用的运维人员,请参见场景一:授权对象为集群与集群内应用的运维人员。
如果授权对象为集群内应用的开发人员,请参见场景二:授权对象为集群内应用的开发人员。
如果授权对象为集群内应用的权限管理员,请参见场景三:授权对象为集群内应用的权限管理员。
如需查看容器服务ACK的服务角色,请参见容器服务ACK服务角色。
授权过程问题,请参见授权管理FAQ。