【Rook / CSI】多租户与安全边界:Secret、加密与 network fencing
内容提要
本文探讨Rook/CSI在Kubernetes多租户环境下的存储安全边界,重点分析信任模型、CSI Secrets的caps权限、PVC加密(RBD LUKS/CephFS fscrypt)、OSD加密带来的双重性能开销、网络fencing的blocklist机制,以及StorageClass作为租户隔离边界。文章强调威胁模型决定加密层级,避免盲目双重加密,并指出快照类也是数据外流通道。
延伸解读
信任边界先于加密开关
文章强调,多租户存储安全的关键在于先明确信任边界,再配置加密和权限。租户命名空间、平台命名空间、Ceph集群和节点内核构成四层边界,每层被突破的后果不同。例如,StorageClass若可被租户自建,可能导致越权删图或写入公共池;节点插件持有的key若过宽,节点沦陷即数据沦陷。因此,设计时应先回答“谁能创建或编辑StorageClass”等问题,而非盲目叠加加密。
双重加密的性能税与威胁模型
文章明确指出,同时启用RBD PVC加密和OSD加密会导致双重加密,可能降低读写性能。工程上不建议默认双开,因为攻击者若已持有卷密钥,双加密并无额外防护。应通过威胁模型决定加密层级:OSD加密防物理盗盘,PVC加密防无卷密钥的主体。若合规要求必须双开,应将其视为已知性能税,并在排障时避免误判为Ceph性能问题。
Network fencing:脑裂防护的机制与代价
Network fencing通过CSI-Addons在节点带有out-of-service taint时自动blocklist对应Ceph客户端,防止双挂载和脑裂写。但该机制默认不启用,需部署CSI-Addons并配置相关旗标。其代价是blocklist前仍有双写窗口,且错误taint可能误杀客户端。因此,ADR应明确taint的唯一写入者(平台控制器)和冷却参数,并评估fencing延迟对RTO的影响。
快照类:易被忽视的数据外流通道
文章提醒,VolumeSnapshot是另一条数据外流通道:能创建快照类并在可写命名空间恢复卷的主体,等于能复制卷内容。若平台只锁定PVC创建而不锁定SnapshotClass绑定,多租户隔离在“只读他人桶”叙事下并不成立。处理原则与StorageClass相同:快照类由平台拥有,租户只引用允许的类名,否则隔离形同虚设。
Q&A
Rook/CSI 中,多租户存储安全边界主要涉及哪些方面?
主要涉及池/文件系统 caps、StorageClass 参数面、密钥存放位置(如 CSI Secrets)、节点失联时的 blocklist(network fencing),以及 PVC 加密(RBD LUKS/CephFS fscrypt)和 OSD 加密。
在 Rook/CSI 中,CSI Secrets 的 caps 权限如何影响多租户安全?
CSI Secrets 包含 cephx 用户和 key,其 caps 决定爆炸半径。如果节点插件 Secret 的 caps 过宽,任何能调度到该节点且能读取映射卷的工作负载都能间接获得该 caps,可能导致越权访问。因此,多租户环境应避免使用一集群一 admin key 的反模式。
Rook 中 PVC 加密(RBD LUKS 和 CephFS fscrypt)是如何工作的?
RBD 使用 LUKS 对映射后的设备进行加密,Ceph 集群侧看到的是加密后的 RBD 对象字节;CephFS 使用 fscrypt,依赖 Linux 内核 ≥ 6.6。通过 StorageClass 参数 encrypted: "true" 和 encryptionKMSID 启用,KMS 配置在平台侧 ConfigMap 中。
同时启用 OSD 加密和 PVC 加密会有什么影响?
同时启用会导致双重加密,可能降低读写性能。Rook 文档警告这会带来性能开销,且威胁模型可能并未改变,因为如果攻击者已持有卷密钥,双加密无济于事。建议根据威胁模型选择一层为主,避免盲目双开。
Network fencing 在 Rook 中是如何工作的?
当节点带有 node.kubernetes.io/out-of-service taint 时,Network fencing 自动将对应 Ceph client blocklist,防止脑裂写。该功能依赖 CSI-Addons 控制器和 sidecar,默认不启用,需在 OperatorConfig/Driver 中开启。
StorageClass 作为多租户边界时,需要区分哪些维度?
需要区分 provisioner 前缀、pool/fsName、encrypted 和 encryptionKMSID、allowVolumeExpansion 和 reclaimPolicy,以及快照类引用。平台模式建议由 Cluster 管理员拥有 SC 和 SnapshotClass,租户只引用允许的 SC 名。
在 Rook/CSI 中,VolumeSnapshot 如何成为数据外流通道?
能创建快照类并在可写命名空间恢复卷的主体,等于能复制卷内容。如果平台只锁 PVC 创建而不锁 SnapshotClass 绑定,多租户隔离可能被绕过。处理原则是快照类由平台拥有,租户只引用允许的类名。
安全评审时,需要回答哪四个关键问题?
1. 谁能创建或编辑 StorageClass?若是租户,默认假设 Secret 劫持可行。2. 节点插件持有的 cephx 用户 caps 覆盖哪些池?过宽则节点沦陷等于多租户数据沦陷。3. 静态加密防的是盗盘、平台管理员还是租户横向?决定 OSD 层还是 PVC 层。4. 节点假死时谁负责打 out-of-service,fencing 是否启用?未启用则脑裂风险必须写进残留风险。