当容器服务控制台预置的ClusterRole无法满足您的权限要求时,您可以通过自定义ClusterRole和Role实现更精细化的RBAC权限配置,使您能够根据业务需求和安全要求灵活定制权限策略。本文将为您介绍如何自定义RBAC权限配置。
自定义RBAC权限策略说明
您可以根据以下资源的策略说明,自定义创建Role和ClusterRole的YAML清单,来实现对ACK集群资源的精细访问控制。
Role(命名空间角色)
以下YAML示例定义了一个名为my-role
的Role,赋予其在default命名空间中对Pod资源的读取权限。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: my-role
rules: # 权限规则的列表。
- apiGroups: [""] # 资源所属的API组。
resources: ["pods"] # 定义pod资源类型。
verbs: ["get", "list"] # 定义执行的get、list权限策略。
ClusterRole(集群角色)
以下YAML示例定义了一个名为my-clusterrole
的ClusterRole,赋予其对集群中的Pods和Services资源的读取权限。
ClusterRole是集群维度的资源,YAML中若指定命名空间参数视为无效。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default
name: my-clusterrole
rules: # 权限规则的列表。
- apiGroups: [""] # 资源所属的API组。
resources: ["pods"] # 定义pod资源类型。
verbs: ["get", "list"] # 定义执行的get、list权限策略。
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]
您可以根据以下常见资源类型的策略说明,为不同资源创建自定义RBAC权限,以实现对RAM用户或角色在集群资源上更精细的访问控制。
常见资源类型的策略说明
读取权限
get
:读取指定资源的详细信息。list
:获取资源集合的列表。watch
:监控资源的变化,实时接收更新。
写入权限
create
:创建新的资源实例。update
:修改已存在的资源。patch
:对已存在的资源进行部分修改。delete
:删除指定的资源。
资源名称 | 资源类型(resources) | 所属API组(apiGroups) | 权限策略(verbs) |
Pods | resources: ["pods"] |
|
|
Service | resources: ["services"] | apiGroups: [""] |
|
ConfigMaps | resources: ["configmaps"] | apiGroups: [""] |
|
Secrets | resources: ["secrets"] | apiGroups: [""] |
|
PersistentVolumes | resources: ["persistentvolumes"] | apiGroups: [""] |
|
PersistentVolumeClaim | resources: ["persistentvolumeclaims"] | apiGroups: [""] |
|
NameSpaces | resources: ["namespaces"] | apiGroups: [""] |
|
Deployments | resources: ["deployments"] | apiGroups: ["apps"] |
|
DaemonSet | resources: ["daemonsets"] | apiGroups: ["apps"] |
|
StatefulSet | resources: ["statefulsets"] | apiGroups: ["apps"] |
|
Ingresses | resources: ["ingresses"] | apiGroups: ["networking.k8s.io"] |
|
Networkpolicies | resources: ["networkpolicies"] | apiGroups: ["networking.k8s.io"] |
|
Jobs | resources: ["jobs"] | apiGroups: ["batch"] |
|
CronJobs | resources: ["cronjobs"] | apiGroups: ["batch"] |
|
StorageClasses | resources: ["storageclasses"] | apiGroups: ["storage.k8s.io"] |
|
HorizontalPodAutoscalers | resources: ["horizontalpodautoscalers"] | apiGroups: ["autoscaling"] |
|
操作步骤
您可以通过控制台或kubectl
使用自定义RBAC权限。
当前容器服务 Kubernetes 版控制台操作方式仅支持自定义ClusterRole角色与集群内RBAC权限的绑定,如果您需要使用自定义Role角色进行权限绑定,可使用kubectl
命令完成。
控制台
步骤一:创建自定义RBAC权限
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在角色页面,单击Cluster Role页签。然后单击创建。
在创建YAML面板输入自定义策略的YAML内容,单击确定即可创建ClusterRole。
此步骤以ClusterRole(集群角色)的YAML为例,创建完成后,可在Cluster Role页签查看自定义权限my-clusterrole。
步骤二:使用自定义RBAC权限进行授权
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在授权管理页面,选择授权对象。
RAM用户
选择
,在用户列表的操作列,单击添加权限。RAM角色
选择
,在角色列表的操作列,单击添加权限。说明RAM角色支持手动输入,也支持在下拉列表中选择。您可以单击RAM角色右侧空白框,将会显示已有的RAM角色列表,然后从列表中选择已有的RAM角色进行授权。
在RAM用户页签上,单击目标用户操作列下的管理权限。
在授权管理面板单击+添加权限,在添加权限框中,选择已创建ClusterRole的集群和需要授权的命名空间,然后在权限管理中选择自定义,接着在右边的下拉框中,选择my-clusterrole,然后单击提交授权。
kubectl
步骤一:创建自定义RBAC权限
使用以下示例应用的YAML内容,创建名为my-clusterrole.yaml文件。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: my-clusterrole namespace: default rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["services"] verbs: ["get", "list", "watch"]
执行以下命令,部署ClusterRole。
kubectl apply -f my-clusterrole.yaml
步骤二:获取授权对象ID
为RAM用户授权,需要通过RAM用户名称获取UserId,详情请参见GetUser - 查询RAM用户的详细信息。
为RAM角色授权,需要通过RAM角色名称获取RoleId,详情请参见GetRole - 获取角色信息。
步骤三:使用自定义RBAC权限授权
使用以下示例应用的YAML内容,创建名为my-clusterrole-binding.yaml文件。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: my-clusterrole-binding subjects: - kind: User name: "20811XXXXXXXXX2288" # 步骤二中获取授权对象的UserId或RoleId。 roleRef: kind: ClusterRole name: my-clusterrole apiGroup: rbac.authorization.k8s.io
执行以下命令,部署ClusterRoleBinding。
kubectl apply -f my-clusterrole-binding.yaml
目标RAM用户被授予自定义RBAC权限后,通过获取目标集群KubeConfig并通过kubectl工具连接集群,以验证其权限。