4.2. 加密加载
默认情况下,所有 RBD API 都会像未加密的 RBD 镜像一样对待加密的 RBD 镜像。您可以在镜像的任意位置读取或写入原始数据。在镜像中写入原始数据可能会使加密格式的完整性风险。例如,原始数据可能会覆盖位于镜像开头的加密元数据。要安全地对加密的输入/输出(I/O)或维护操作对加密的 RBD 镜像执行,必须在打开镜像后立即应用额外的加密负载操作。
加密负载操作要求您指定加密格式和密码短语来解锁镜像本身的加密密钥及其明确格式化的镜像。已打开的 RBD 镜像的所有 I/O 都是加密或解密克隆的 RBD 镜像,这包括父镜像的 IO。加密密钥由 RBD 客户端保存在内存中,直到镜像关闭为止。
在 RBD 镜像中载入加密后,就无法应用其他加密加载或格式操作。此外,使用打开的镜像上下文检索 RBD 镜像大小和父级重叠的 API 调用会分别返回有效的镜像大小以及有效的父重叠。当 RBD 镜像通过 rbd-nbd
将 RBD 镜像映射为块设备时,会自动载入加密。
使用打开的镜像上下文检索镜像大小和父级重叠的 API 调用会返回有效的镜像大小以及有效的父级重叠。
如果加密镜像的克隆被明确格式化,则扁平化或缩减克隆的镜像被透明,因为父数据必须根据克隆的镜像格式重新加密,因为它会从父快照复制。如果在发布 flatten 操作前没有加载加密,则之前在克隆的镜像中访问的任何父数据都可能会变得不可读。
如果明确格式化了加密镜像的克隆,则操作将克隆的镜像缩小为透明。这是因为,在包含快照的克隆镜像或克隆的镜像与对象大小不对齐的情况下,从父快照复制一些数据的操作,类似于扁平化。如果在处理缩小操作前没有加载加密,则之前在克隆的镜像中访问的任何父数据都可能会变得不可读。