4. 安全隔离基础模型

在云计算与边缘计算场景中,一台物理服务器往往需要同时承载多个租户的工作负载。传统以CPU为中心的架构里,Hypervisor负责隔离虚拟机,但网络、存储、管理这些基础设施功能仍由主机CPU承担,隔离边界模糊、攻击面大。DPU(Data Processing Unit)的引入改变了这一格局:它把基础设施功能从主机CPU卸载到独立的处理器上,同时天然形成了一条新的信任边界。本节围绕三个核心概念展开——多租户隔离、控制面与数据面分离、DPU作为信任边界,并结合Marvell OCTEON系列DPU说明其实现方式。

一、多租户隔离的三个维度

多租户隔离不是单一机制,而是资源、数据、故障三个维度的叠加。资源隔离要求每个租户的CPU核、内存、队列、带宽互不侵占;数据隔离要求租户A的报文、密钥、存储卷不能被租户B读取;故障隔离要求一个租户的异常流量或配置错误不会拖垮其他租户。

在DPU上,这三个维度分别对应不同的硬件与软件机制。资源隔离依赖SR-IOV虚拟功能(VF)与队列配额;数据隔离依赖内存保护单元(MPU)、IOMMU/SMMU以及每租户独立的密钥域;故障隔离依赖流量整形、速率限制与独立的错误域。以Marvell OCTEON 10 DPU为例,其内置的硬件队列管理器可以为每个VF分配独立的发送/接收队列,配合DWRR(差额加权轮询)调度,实现带宽的硬隔离。假设某租户分配了25%的端口带宽,当该租户突发流量达到线速时,调度器会将其限制在配额内,其余租户的时延不受影响。

二、控制面与数据面分离

控制面负责策略下发、路由计算、密钥协商、租户生命周期管理;数据面负责报文转发、加解密、存储读写。两者分离的核心价值在于:控制面故障不会中断已建立的数据通路,数据面过载也不会阻塞控制指令。

在DPU架构中,控制面通常运行在DPU的ARM核上(或由主机侧的管理程序远程调用),数据面则运行在可编程转发引擎、加密引擎和DMA引擎上。Marvell OCTEON DPU的典型做法是:控制面通过Linux用户态进程或DPDK控制线程管理流表,数据面通过NFP(Network Flow Processor)或可编程流水线执行匹配-动作。控制面与数据面之间通过共享内存环形队列或消息队列通信,而不是直接函数调用,这样即使数据面流水线出现拥塞,控制面的配置请求也只是排队等待,不会导致管理通道死锁。

设计原则:控制面与数据面之间应定义清晰的接口契约——控制面只下发“意图”(如“租户A到租户B允许TCP 443”),数据面负责将其编译为硬件表项。接口契约一旦确定,两侧可以独立升级、独立复位。

三、DPU作为信任边界

信任边界是安全模型中的关键概念:边界一侧的组件默认可信,另一侧默认不可信,所有跨边界访问都必须经过验证。在DPU场景中,主机CPU与租户虚拟机位于“不可信”一侧,DPU内部的安全域位于“可信”一侧。这意味着:

  • 主机不能直接访问DPU的密钥存储、固件区和内部管理接口;
  • 租户VF只能访问分配给自己的队列和内存区域,不能触碰其他VF或PF;
  • 所有从主机发往网络的报文,必须经过DPU的检查、加密或策略匹配后才能发出;
  • DPU的固件更新、调试接口必须经过签名验证和权限校验。

Marvell在OCTEON DPU中通过多层机制落实这一边界。第一层是硬件隔离:每个VF有独立的BAR空间和中断向量,SMMU将VF的DMA请求限制在指定内存区间。第二层是固件隔离:DPU的固件运行在独立的安全核上,主机侧只能通过受限的邮箱(mailbox)接口发送请求,不能直接读写固件内存。第三层是密钥隔离:每个租户的加密密钥存储在DPU的密钥库中,主机侧只能提交加密/解密请求,无法导出密钥明文。

DPU 信任边界与多租户隔离模型 主机侧(不可信域) 租户 A VM VF-A0 / VF-A1 队列配额 25% 密钥域 K_A 租户 B VM VF-B0 / VF-B1 队列配额 25% 密钥域 K_B 租户 C VM VF-C0 / VF-C1 队列配额 50% 密钥域 K_C 主机 CPU / Hypervisor 管理面驱动 Mailbox 请求 无直接固件访问 信任边界(Trust Boundary) DPU 内部(可信域)— Marvell OCTEON 示例 控制面 ARM 核 / Linux 用户态 流表管理 · 策略编译 租户生命周期管理 密钥协商与分发 Mailbox 接口处理 固件签名验证 独立复位域 数据面 可编程转发引擎 匹配-动作流水线 加解密引擎 DMA / 存储卸载 流量整形 DWRR 队列隔离与配额 错误域隔离 安全域 / 密钥库 安全核(Secure Core) 密钥存储 K_A / K_B / K_C SMMU 地址翻译 MPU 内存保护 固件只读区 调试接口鉴权 安全启动链 仅 Mailbox / 受限接口 控制面与数据面通过共享内存环形队列通信 · 主机侧仅能通过受限 Mailbox 访问 DPU 可信域

四、Marvell实现中的关键设计原则

结合OCTEON DPU的架构,可以提炼出四条可复用的设计原则。

原则一:最小权限的VF设计。每个VF只暴露该租户必需的队列、中断和内存窗口。Marvell的PF驱动在创建VF时,通过SMMU配置将VF的DMA地址空间限制在租户专属的内存池内。如果租户A的VF尝试访问租户B的内存地址,SMMU会产生翻译错误并触发中断,DPU固件记录该事件并可选地隔离该VF。

原则二:控制面单向发起。主机侧只能向DPU发起请求,不能主动读取DPU内部状态。例如,主机要查询某条流表的统计计数,必须通过Mailbox发送查询命令,由DPU控制面处理后返回结果。这种“请求-响应”模式避免了主机侧轮询或直接内存映射带来的侧信道风险。

原则三:数据面策略不可绕过。所有进出主机的报文必须经过DPU的数据面流水线。Marvell的实现中,VF的发送队列直接连接到DPU的入站流水线,主机无法通过配置绕过策略检查。即使主机侧驱动被攻破,攻击者也无法让报文跳过加密或访问控制。

原则四:故障域独立。控制面与数据面运行在不同的核和不同的复位域上。数据面流水线出现异常时,控制面仍可响应管理请求并执行恢复操作;控制面重启时,已下发的数据面表项继续生效,业务不中断。

五、一个可观察的隔离验证示例

假设在OCTEON DPU上配置了两个租户,租户A配额25%,租户B配额75%。验证隔离是否生效,可以按以下方式观察:

  1. 在租户A的VF上以线速发送UDP流,同时租户B发送相同速率的UDP流。
  2. 在DPU的端口统计中查看两个租户的实际出队速率。预期租户A被限制在端口带宽的25%附近,租户B获得剩余带宽。
  3. 检查SMMU错误计数器,确认没有跨租户的DMA访问尝试。
  4. 尝试从租户A的VF读取租户B的密钥域,预期返回权限错误,且DPU固件日志记录一次非法访问事件。

如果租户A的速率明显超过25%,说明DWRR调度或队列配额配置有误;如果SMMU错误计数器持续增长,说明VF的地址空间映射存在越界,需要检查SMMU的流表配置。这些可观察的指标,正是信任边界是否真正生效的判据。

实践提示:在Marvell OCTEON DPU上调试隔离问题时,优先查看三个位置——SMMU的翻译错误寄存器、队列管理器的配额配置寄存器、以及安全核的事件日志。这三处分别对应数据隔离、资源隔离和故障隔离。

总结来看,多租户隔离、控制面与数据面分离、DPU作为信任边界,三者不是独立的安全特性,而是相互支撑的体系。多租户隔离定义了“谁和谁分开”,控制面与数据面分离定义了“怎么分开”,信任边界定义了“分开之后谁可以跨过来、以什么方式跨过来”。Marvell OCTEON DPU通过硬件队列、SMMU、安全核和受限Mailbox,把这套模型落到了可配置、可观察、可验证的工程实现上。