1.2. 安全策略
了解 OpenShift Virtualization 安全和授权。
关键点
-
OpenShift Virtualization 遵循
restricted
Kubernetes pod 安全标准配置集,旨在强制实施 Pod 安全性的当前最佳实践。 - 虚拟机 (VM) 工作负载作为非特权 pod 运行。
-
为
kubevirt-controller
服务帐户定义 安全性上下文约束 (SCC)。 - OpenShift Virtualization 组件的 TLS 证书都会被更新并自动轮转。
1.2.1. 关于工作负载安全性
默认情况下,虚拟机 (VM) 工作负载不会在 OpenShift Virtualization 中使用 root 权限运行,且不支持的 OpenShift Virtualization 功能需要 root 权限。
对于每个虚拟机,virt-launcher
pod 以 会话模式运行一个 libvirt
实例,用于管理虚拟机进程。在会话模式中,libvirt
守护进程以非 root 用户帐户运行,仅允许同一用户标识符 (UID) 下运行的客户端的连接。因此,虚拟机作为非特权 pod 运行,遵循最小特权的安全原则。
1.2.2. TLS 证书
OpenShift Virtualization 组件的 TLS 证书都会被更新并自动轮转。您不需要手动刷新它们。
自动续订计划
TLS 证书会根据以下调度自动删除并替换:
- kubeVirt 证书每天都会被更新。
- 容器化数据导入程序控制器(CDI)证书每 15 天更新一次。
- MAC 池证书会每年续订。
自动 TLS 证书轮转不会破坏任何操作。例如,以下操作可在没有任何中断的情况下继续工作:
- 迁移
- 镜像上传
- VNC 和控制台连接
1.2.3. 授权
OpenShift Virtualization 使用基于角色的访问控制 (RBAC )为人类用户和服务帐户定义权限。为服务帐户定义的权限控制 OpenShift Virtualization 组件可以执行的操作。
您还可以使用 RBAC 角色管理用户对虚拟化功能的访问。例如,管理员可以创建一个 RBAC 角色,它提供启动虚拟机所需的权限。然后,管理员可以通过将角色绑定到特定用户来限制访问权限。
1.2.3.1. OpenShift Virtualization 的默认集群角色
通过使用集群角色聚合,OpenShift Virtualization 会扩展默认的 OpenShift Container Platform 集群角色,使其包含访问虚拟化对象的权限。
默认集群角色 | OpenShift Virtualization 集群角色 | OpenShift Virtualization 集群角色描述 |
---|---|---|
|
| 此用户可以查看集群中的所有 OpenShift Virtualization 资源,但不能创建、删除、修改或访问它们。例如,用户可以看到虚拟机 (VM) 正在运行,但不能将其关闭或访问其控制台。 |
|
| 可以修改集群中的所有 OpenShift Virtualization 资源的用户。例如,用户可以创建虚拟机、访问虚拟机控制台和删除虚拟机。 |
|
|
具有所有 OpenShift Virtualization 资源的完整权限的用户,包括删除资源集合。用户也可以查看和修改 OpenShift Virtualization 运行时配置,该配置位于 |
1.2.3.2. OpenShift Virtualization 中存储功能的 RBAC 角色
为 Containerized Data Importer (CDI) 授予以下权限,包括 cdi-operator
和 cdi-controller
服务帐户。
1.2.3.2.1. 集群范围的 RBAC 角色
CDI 集群角色 | Resources | Verbs |
---|---|---|
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
API 组 | Resources | Verbs |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
允许列表: |
|
|
允许列表: |
|
|
|
|
API 组 | Resources | Verbs |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.2.3.2.2. 命名空间的 RBAC 角色
API 组 | Resources | Verbs |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
API 组 | Resources | Verbs |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.2.3.3. kubevirt-controller 服务帐户的额外 SCC 和权限
Pod 的安全上下文约束(SCC)控制权限。这些权限包括 Pod(容器集合)可以执行的操作以及它们可以访问的资源。您可以使用 SCC 定义 Pod 运行必须满足的一组条件,以便其能被系统接受。
virt-controller
是一个集群控制器,可为集群中的虚拟机创建 virt-launcher
pod。这些 pod 由 kubevirt-controller
服务帐户授予权限。
kubevirt-controller
服务帐户被授予额外的 SCC 和 Linux 功能,以便能够创建具有适当权限的 virt-launcher
Pod。这些扩展权限允许虚拟机使用超出典型 pod 范围的 OpenShift Virtualization 功能。
kubevirt-controller
服务帐户被授予以下 SCC:
-
scc.AllowHostDirVolumePlugin = true
这允许虚拟机使用 hostpath 卷插件。 -
scc.AllowPrivilegedContainer = false
可确保 virt-launcher pod 不是作为特权容器运行。 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
工具查看 kubevirt-controller
clusterrole 的 RBAC 定义:
$ oc get clusterrole kubevirt-controller -o yaml