访问控制模型
预计阅读时间: 5分钟Docker 企业用户界面Docker通用控制平面(UCP)允许您通过对资源集授予基于角色的权限来授权用户查看,编辑和使用集群资源。
要授权访问整个组织中的群集资源,UCP管理员可以采取以下高级步骤:
- 添加和配置主题 (用户,团队和服务帐户)。
- 通过为每种资源类型添加允许的操作来定义自定义角色 (或使用默认值)。
- 将集群资源分组为Swarm集合或Kubernetes命名空间的资源集。
- 通过组合主题+角色+资源集来创建赠款 。
有关示例,请参阅使用RBAC部署无状态应用程序 。
科目
主题代表用户,团队,组织或服务帐户。可以授予主题一个角色,该角色定义针对一个或多个资源集的允许的操作。
- 用户 :由认证后端认证的人。用户可以属于一个或多个团队以及一个或多个组织。
- 团队 :一组共享在团队级别定义的权限的用户。一个团队只能在一个组织中。
- 组织 :一组共享一组特定权限的团队,这些权限由组织的角色定义。
- 服务帐户 :Kubernetes对象,使工作负载能够访问分配给名称空间的群集资源。
学习创建和配置用户和团队 。
的角色
角色定义谁可以执行哪些操作。角色是针对一种资源类型(如容器或卷)的一组允许的操作,这些资源通过授予分配给用户或团队。
例如,内置角色Restricted Control包括查看和调度节点但不更新节点的权限。定制DBA角色可能包括对rwx
(读,写和执行)卷和机密的权限。
大多数组织使用多个角色来微调适当的访问权限。给定的团队或用户可能具有不同的角色,具体取决于他们正在访问的资源。
学习使用授权的API操作定义角色 。
资源集
为了控制用户访问,集群资源被分组为Docker Swarm 集合或Kubernetes 命名空间 。
-
Swarm集合 :集合具有类似目录的结构,其中包含Swarm资源。您可以通过定义目录路径并将资源移入其中来在UCP中创建集合。另外,您可以在UCP中创建路径,并使用YAML文件中的标签将应用程序资源分配给该路径。用户可以在Swarm集合中访问的资源类型包括容器,网络,节点,服务,机密和卷。
-
Kubernetes名称空间 : 名称空间是Kubernetes集群的逻辑区域。Kubernetes随附了一个用于群集对象的
default
名称空间,以及两个用于系统资源和公共资源的名称空间。您可以创建自定义名称空间,但是与Swarm集合不同,名称空间不能嵌套 。用户可以在Kubernetes命名空间中访问的资源类型包括Pod,部署,网络策略,节点,服务,机密等等。
集合和名称空间一起被称为资源集 。学习分组和隔离群集资源 。
赠款
赠款由主题 , 角色和资源集组成 。
授权定义了哪些用户可以以哪种方式访问哪些资源。授权是有效的访问控制列表 (ACL),当将它们组合在一起时,它们为整个组织提供全面的访问策略。
只有管理员可以管理授予,主题,角色和对资源的访问。
关于管理员
管理员是指创建主题,通过将主题移动到集合或名称空间中,对资源进行分组,通过选择允许的操作来定义角色以及将授权应用于用户和团队的用户。
安全的Kubernetes默认值
为了确保群集安全,只有通过ClusterRoleBinding被授予所有Kubernetes命名空间的cluster-admin
ClusterRole的UCP管理员用户和服务帐户才能部署具有特权选项的Pod。这样可以防止平台用户绕过通用控制平面安全模型。这些特权选项包括:
具有Pod规范中定义的以下任何一项的Pod:
PodSpec.hostIPC
防止用户在主机的IPC命名空间中部署Pod。PodSpec.hostNetwork
防止用户在主机的网络命名空间中部署Pod。PodSpec.hostPID
防止用户在主机的PID命名空间中部署Pod。SecurityContext.allowPrivilegeEscalation
防止容器的子进程获得比其父进程更多的特权。SecurityContext.capabilities
防止将其他Linux功能添加到Pod。SecurityContext.privileged
阻止用户部署特权容器 。Volume.hostPath
防止用户将主机上的路径安装到容器中。这可能是文件,目录,甚至是Docker套接字。
使用以下存储类的持久卷:
Local
-阻止用户使用本地存储类创建持久卷。本地存储类允许用户将目录从主机装载到Pod中。这可能是文件,目录,甚至是Docker套接字。
注意
如果管理员使用本地存储类创建了永久卷,则非管理员可以通过永久卷声明来使用它。
如果没有集群管理员角色的用户尝试使用这些特权选项中的任何一个部署Pod,则会显示类似于以下示例的错误:
Error from server (Forbidden): error when creating "pod.yaml": pods "mypod" is forbidden: user "<user-id>" is not an admin and does not have permissions to use privileged mode for resource