famerico opened a new issue, #14662:
URL: https://github.com/apache/cloudstack/issues/14662

   ### problem
   
   When a volume is created from a disk offering with `encrypt=true` and the 
primary storage pool is passed explicitly (`storageid`), the volume is not 
encrypted. There is no error: the volume is created and attached normally, but 
it is a plain qcow2 image with no LUKS header and `volumes.passphrase_id` is 
NULL. The same disk offering used with allocation by storage tag produces a 
LUKS volume.
   
   The silent behavior is the main concern: an operator who picks the pool 
manually believes the data is encrypted at rest and it is not.
   
   The same happens on a SharedMountPoint (iSCSI-backed) pool: manual selection 
produces a plain image with no error, while allocation by tag on that pool 
fails at attach (see the separate SharedMountPoint issue).
   
   ### versions
   
   - Apache CloudStack 4.22.1.1
   - Hypervisor: KVM, host reports `host.volume.encryption`
   - Volume format: qcow2
   - Primary storage: NFS pool (`NetworkFilesystem`) and SharedMountPoint pool 
(iSCSI-backed)
   
   ### The steps to reproduce the bug
   
   1. Use a KVM host that supports volume encryption.
   2. Create a disk offering with encryption enabled and a storage tag that 
matches an NFS pool.
   3. Create a volume from that offering with allocation by tag. Result: LUKS 
volume (works as expected).
   4. Create a second volume from the same kind of encrypted offering (no 
storage tag), passing the NFS pool explicitly:
      `createVolume diskofferingid=<encrypted offering> storageid=<nfs pool id> 
...`
   5. Attach it to a VM. No error is returned.
   6. Check the result: `volumes.passphrase_id` is NULL, and the agent log 
shows no encryption option in the create command and no `<encryption>` element 
in the disk XML (excerpts below).
   7. Repeating steps 4 to 6 on a SharedMountPoint (iSCSI-backed) pool gives 
the same result: `passphrase_id` NULL, plain qcow2, no error. We ran the 
manual-selection test 11 times with two disk offerings on both pool types, with 
the same result every time. In one earlier unplanned run (outside our test 
protocol) a manual selection on the SharedMountPoint pool produced a volume 
with a passphrase and a visible attach failure; we could not reproduce it in 3 
deliberate repeats.
   
   Allocation by tag (works), agent DEBUG log:
   
   ```
   DEBUG [utils.script.Script] Executing command [qemu-img create --object 
secret,file=<keyfile>,id=sec0 -o 
encrypt.format=luks,preallocation=off,encrypt.key-secret=sec0 -f qcow2 
/mnt/50e883ef-d010-3cb7-95fa-30dc5faeae7d/a4dcb52d-6bbc-4edb-afe8-f6a9f8ef902f 
5368709120 ].
   DEBUG [kvm.storage.KVMStorageProcessor] Attaching device: <disk  
device='disk' type='file'>
   <driver name='qemu' type='qcow2' cache='none' />
   <source 
file='/mnt/50e883ef-d010-3cb7-95fa-30dc5faeae7d/a4dcb52d-6bbc-4edb-afe8-f6a9f8ef902f'/>
   <target dev='vde' bus='virtio'/>
   <serial>a4dcb52d6bbc4edbafe8</serial>
   <encryption format='luks'>
   <secret type='passphrase' uuid='2b94d58b-0848-3559-b193-f1d5846dadfc' />
   </encryption>
   </disk>
   ```
   
   Manual pool selection (silent failure), agent DEBUG log:
   
   ```
   DEBUG [utils.script.Script] Executing command [qemu-img create -o 
preallocation=off -f qcow2 
/mnt/50e883ef-d010-3cb7-95fa-30dc5faeae7d/aeb9b9fa-3b24-4a65-9664-ff51cf2f7753 
5368709120 ].
   DEBUG [kvm.storage.KVMStorageProcessor] Attaching device: <disk  
device='disk' type='file'>
   <driver name='qemu' type='qcow2' cache='none' />
   <source 
file='/mnt/50e883ef-d010-3cb7-95fa-30dc5faeae7d/aeb9b9fa-3b24-4a65-9664-ff51cf2f7753'/>
   <target dev='vde' bus='virtio'/>
   <serial>aeb9b9fa3b244a659664</serial>
   </disk>
   DEBUG [cloud.agent.Agent] Seq 1-1174595077813569846: [...] 
"org.apache.cloudstack.storage.command.AttachAnswer":{ [...] "result":"true" 
[...] }
   ```
   
   Manual pool selection on the SharedMountPoint (iSCSI-backed) pool, agent 
DEBUG log: volume created through libvirt (no `qemu-img create`, no encryption 
option), attached without `<encryption>`, and the attach succeeds. The database 
shows `passphrase_id` NULL and `encrypt_format` NULL for the volume.
   
   ```
   INFO  [kvm.storage.LibvirtStorageAdaptor] Attempting to create volume 
f279db6b-d6fd-4339-943c-ad01455af989 (SharedMountPoint) in pool 
0d3db4e4-0e9a-4421-a5a4-72e9770d27c1 with size (5.00 GB) 5368709120
   DEBUG [kvm.storage.LibvirtStorageAdaptor] <volume>
   <name>f279db6b-d6fd-4339-943c-ad01455af989</name>
   <capacity>5368709120</capacity>
   <target>
   <format type='qcow2'/>
   <permissions><mode>0744</mode></permissions></target>
   </volume>
   DEBUG [cloud.agent.Agent] Seq 1-1174595077813576597: [...] 
"org.apache.cloudstack.storage.command.CreateObjectAnswer": [...] 
"result":"true" [...]
   DEBUG [kvm.storage.KVMStorageProcessor] Attaching physical disk 
/mnt/<iscsi-pool>/f279db6b-d6fd-4339-943c-ad01455af989 with format qcow2
   DEBUG [kvm.storage.KVMStorageProcessor] Attaching device: <disk  
device='disk' type='file'>
   <driver name='qemu' type='qcow2' cache='none' />
   <source file='/mnt/<iscsi-pool>/f279db6b-d6fd-4339-943c-ad01455af989'/>
   <target dev='vdc' bus='virtio'/>
   <serial>f279db6bd6fd4339943c</serial>
   </disk>
   DEBUG [cloud.agent.Agent] Seq 1-1174595077813576599: [...] 
"org.apache.cloudstack.storage.command.AttachAnswer": [...] 
"poolType":"SharedMountPoint", [...] "result":"true" [...]
   ```
   
   ### What to do about it?
   
   The decision to encrypt should not depend on how the pool was chosen. Either 
apply LUKS (and store the passphrase) on the manual-pool path, or fail the 
request with a clear error.
   
   Note: PR #13228 changes several `getPassphraseId() != null` checks to 
`isEncrypted()` (which also considers `encryptFormat`). We have not verified 
that it affects this scenario, so it may or may not be related.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to