1.3. 安全策略
了解 OpenShift Virtualization 安全和授权。
关键点
- 
						OpenShift Virtualization 遵循 restrictedKubernetes pod security standards 配置集,旨在强制实施 Pod 安全性的当前最佳实践。
- 虚拟机 (VM) 工作负载作为非特权 pod 运行。
- 
						为 kubevirt-controller服务帐户定义 安全性上下文约束 (SCC)。
- OpenShift Virtualization 组件的 TLS 证书会被更新并自动轮转。
1.3.1. 关于工作负载安全性
默认情况下,虚拟机 (VM) 工作负载在 OpenShift Virtualization 中不会使用 root 权限运行,且支持的 OpenShift Virtualization 功能都不需要 root 权限。
					对于每个虚拟机,都会有一个 virt-launcher pod,它以会话模式(session mode)运行一个 libvirt 实例,用于管理 VM 进程。在会话模式中,libvirt 守护进程是以非 root 用户帐户运行的,它只允许来自使用同一用户标识符 (UID) 运行的客户端的连接。这样,虚拟机就可以作为非特权 pod 运行,遵循了最小特权的安全原则。
				
1.3.2. TLS 证书
OpenShift Virtualization 组件的 TLS 证书会被自动更新并轮转。您不需要手动刷新它们。
自动续订调度
TLS 证书会根据以下调度被自动删除并替换:
- KubeVirt 证书每天都会被更新。
- Containerized Data Importer controller (CDI) 证书每 15 天更新一次。
- MAC 池证书每年更新一次。
自动 TLS 证书轮转不会影响任何操作。例如,以下操作可在没有任何中断的情况下继续工作:
- 迁移
- 镜像上传
- VNC 和控制台连接
1.3.3. 授权
OpenShift Virtualization 使用基于角色的访问控制 (RBAC )为人类用户和服务帐户定义权限。为服务帐户定义的权限用于控制 OpenShift Virtualization 组件可以执行的操作。
您还可以使用 RBAC 角色来管理用户对虚拟化功能的访问。例如,管理员可以创建一个 RBAC 角色,它提供启动虚拟机所需的权限。然后,管理员可以通过将角色绑定到特定用户来限制访问权限。
1.3.3.1. OpenShift Virtualization 的默认集群角色
通过使用集群角色聚合,OpenShift Virtualization 会扩展默认的 OpenShift Container Platform 集群角色,使其包含访问虚拟化对象的权限。
| 默认集群角色 | OpenShift Virtualization 集群角色 | OpenShift Virtualization 集群角色描述 | 
|---|---|---|
| 
										 | 
										 | 此用户可以查看集群中的所有 OpenShift Virtualization 资源,但不能创建、删除、修改或访问它们。例如,用户可以看到虚拟机 (VM) 正在运行,但不能将其关闭或访问其控制台。 | 
| 
										 | 
										 | 可以修改集群中的所有 OpenShift Virtualization 资源。例如,用户可以创建虚拟机、访问虚拟机控制台和删除虚拟机。 | 
| 
										 | 
										 | 
										具有所有 OpenShift Virtualization 资源的完整权限,包括删除资源集合。用户也可以查看和修改 OpenShift Virtualization 运行时配置,该配置位于  | 
1.3.3.2. OpenShift Virtualization 中存储功能的 RBAC 角色
						为 Containerized Data Importer (CDI) 授予以下权限,包括 cdi-operator 和 cdi-controller 服务帐户。
					
1.3.3.2.1. 集群范围的 RBAC 角色
| CDI 集群角色 | Resources | Verbs | 
|---|---|---|
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | |
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | |
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | |
| 
											 | 
											 | 
											 | 
| API 组 | Resources | Verbs | 
|---|---|---|
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 
											允许列表: | 
											 | 
| 
											 | 
											 
											允许列表: | 
											 | 
| 
											 | 
											 | 
											 | 
| API 组 | Resources | Verbs | 
|---|---|---|
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
1.3.3.2.2. 命名空间的 RBAC 角色
| API 组 | Resources | Verbs | 
|---|---|---|
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| API 组 | Resources | Verbs | 
|---|---|---|
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
| 
											 | 
											 | 
											 | 
1.3.3.3. kubevirt-controller 服务帐户的额外 SCC 和权限
Pod 的安全上下文约束(SCC)控制权限。这些权限包括 Pod(容器集合)可以执行的操作以及它们可以访问的资源。您可以使用 SCC 定义 Pod 运行必须满足的一组条件,以便其能被系统接受。
						virt-controller 是一个集群控制器,可为集群中的虚拟机创建 virt-launcher pod。
					
							默认情况下,virt-launcher pod 使用命名空间中的 default 服务帐户运行。如果您的合规控制需要唯一的服务帐户,请为虚拟机分配一个。此设置适用于 VirtualMachineInstance 对象和 virt-launcher pod。
						
						kubevirt-controller 服务帐户被授予额外的 SCC 和 Linux 功能,以便能够创建具有适当权限的 virt-launcher Pod。这些扩展权限允许虚拟机使用超出典型 pod 范围的 OpenShift Virtualization 功能。
					
						kubevirt-controller 服务帐户被授予以下 SCC:
					
- 
								scc.AllowHostDirVolumePlugin = true
 这允许虚拟机使用 hostpath 卷插件。
- 
								scc.AllowPrivilegedContainer = false
 可确保virt-launcherpod 没有作为特权容器运行。
- scc.AllowedCapabilities = []corev1.Capability{"SYS_NICE", "NET_BIND_SERVICE"}- 
										SYS_NICE允许设置 CPU 关联性。
- 
										NET_BIND_SERVICE允许 DHCP 和 Slirp 操作。
 
- 
										
查看 kubevirt-controller 的 SCC 和 RBAC 定义
							您可以使用 oc 工具查看 kubevirt-controller 的 SecurityContextConstraints 定义:
						
oc get scc kubevirt-controller -o yaml
$ oc get scc kubevirt-controller -o yaml
						您可以使用 oc 工具查看 kubevirt-controller clusterrole 的 RBAC 定义:
					
oc get clusterrole kubevirt-controller -o yaml
$ oc get clusterrole kubevirt-controller -o yaml