@@ -621,16 +621,64 @@ Instances with local data volumes on that host.
621621Volume Encryption
622622^^^^^^^^^^^^^^^^^
623623
624- CloudStack supports LUKS-based volume encryption on KVM. Encrypted volumes are managed
625- through the :ref: `key-management-system `, where you can create and manage the encryption
626- keys used to protect your data.
627-
628- To create an encrypted volume, select a **KMS Key ** from the UI when creating the volume,
629- or supply the key ID via the API. The key must belong to the same zone as the volume.
624+ CloudStack supports LUKS-based volume encryption on KVM. Encryption is enabled through the
625+ storage offering: create a Disk Offering with encryption enabled (for data volumes) or a
626+ Compute Offering with root volume encryption enabled (for root disks), and deploy on a
627+ primary storage that supports encryption. Volumes deployed from such an offering are
628+ encrypted automatically with a per-volume passphrase. Encryption is performed on the KVM
629+ host, so the guest always sees a normal, decrypted disk and there is no encryption device
630+ to manage inside the Instance.
631+
632+ By default the per-volume passphrase is protected by a single key stored in the database.
633+ Optionally, the :ref: `key-management-system ` (KMS, introduced in 4.23) can instead wrap the
634+ passphrase with a key held in an external HSM/KMS provider, in which case you select a
635+ **KMS Key ** for the volume. KMS is not required for volume encryption.
636+
637+ This choice of key protection is independent of the storage backend: every
638+ encryption-capable backend, including Ceph/RBD, works with either the database key or a KMS
639+ key. The encryption engine on the KVM host uses the resulting per-volume passphrase and does
640+ not depend on how that passphrase was protected, so no storage-specific configuration is
641+ needed to use one method or the other.
630642
631643.. warning ::
632- Deleting the KMS key used to encrypt a volume will render that volume permanently
633- unrecoverable.
644+ If the key material protecting a volume's passphrase is lost — for example by deleting
645+ the KMS key used to wrap it — that volume becomes permanently unrecoverable.
646+
647+ Supported primary storage
648+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
649+
650+ * File-based storage (NFS, local, SharedMountPoint) and Dell PowerFlex/ScaleIO — encrypted
651+ with the qemu-native LUKS stack.
652+ * Ceph/RBD — encrypted with **native librbd LUKS2 **
653+ (``<encryption format='luks2' engine='librbd'> ``), for both data disks and root disks.
654+
655+ The two stacks are not interchangeable: a volume is always decrypted by the same engine
656+ that encrypted it, and they are never mixed on a single volume.
657+
658+ Ceph/RBD encryption
659+ ~~~~~~~~~~~~~~~~~~~
660+
661+ For Ceph/RBD, encryption is applied natively by librbd, which preserves Ceph's thin
662+ provisioning and copy-on-write cloning:
663+
664+ * **Data disks ** stay thin — only written blocks consume space (a 1 TB encrypted volume
665+ with 400 GB written uses roughly 400 GB).
666+ * **Root disks ** deployed from a template already on the same Ceph cluster are created as
667+ thin copy-on-write clones: each Instance stores only its own (encrypted) writes and
668+ shares the template blocks, so deploying many encrypted Instances from one template uses
669+ far less storage than a full per-Instance copy. When the template is not on the same
670+ cluster (for example on first use from secondary storage), the encrypted root is created
671+ as a full copy instead.
672+
673+ .. note ::
674+ Attaching an encrypted RBD volume to a **running ** Instance (hot-plug) requires
675+ **libvirt >= 10.1.0 ** on the KVM host. Older libvirt (for example 10.0.0 shipped with
676+ Ubuntu 24.04 LTS) has a bug that breaks hot-plug of encrypted block devices; on such a
677+ host the CloudStack agent refuses the attach with a clear error. Booting an Instance
678+ from an encrypted RBD root disk is **not ** affected and works on older libvirt.
679+
680+ Requirements on the KVM host: ``ceph-common `` (the ``rbd `` CLI) and a QEMU/librbd build
681+ that supports librbd LUKS2 encryption (Ceph Pacific / QEMU 6.1 and newer).
634682
635683
636684To Create a New Volume
0 commit comments