[glance][nova][cinder] Openstack Glance image signature and validation for upload and boot controls?
Brian Rosmaita
rosmaita.fossdev at gmail.com
Thu Oct 21 23:48:48 UTC 2021
On 10/20/21 8:24 AM, S Andronic wrote:
> Hi,
>
> I have a question in regards to Openstack Glance and if I got it right
> this can be a place to ask, if I am wrong please kindly point me in the
> right direction.
>
> When you enable Image Signing and Certificate Validation in nova.conf:
> [glance]
> verify_glance_signatures = True
> enable_certificate_validation = True
Note: Since Rocky, if you have enable_certificate_validation = True but
have default_trusted_certificate_ids at its default value of empty list,
then a user must supply a list of trusted_image_certificates in the
create-server request, or the request will fail.
>
> Will this stop users from uploading unsigned images
No, glance doesn't have a setting that requires uploaded images to be
signed. However:
- If the image record contains *all* the appropriate image signature
properties, the PUT /v2/images/{image_id}/file call will fail if the
data can't be validated.
- You could write an image import plugin that would disallow import of
image data for which the image record doesn't have the image signature
properties set.
> or using unsigned
> images to spin up instances?
Yes, if verify_glance_signatures is True, nova won't boot unsigned images:
https://docs.openstack.org/nova/latest/configuration/config.html#glance.verify_glance_signatures
> Intuitively I feel that it will enforce checks only if the signature
> property exists, but what if it doesn't?
See above.
> Does it control in any way unsigned images?
Yes, if verify_glance_signatures is True, unsigned images can't be used
to boot an instance.
> Does it stop users from uploading or using anything unsigned?
No, glance doesn't require it.
> Would an image without the signing properties just be rejected?
It depends on what service you are talking about:
Glance: no, glance won't reject an unsigned image.
Nova: yes, if verify_glance_signatures is set.
Cinder: it depends ... if verify_glance_signatures is enabled:
- if you create a volume from an image AND the image has *any* of the
image signature properties set, cinder will try to validate the image
data and the volume will go to error if validation fails. If the
validation succeeds, you get signature_verified: true in the
volume-image-metadata.
- if you create a volume from an image AND the image has NONE of the
image signature properties, the volume creation will succeed (assuming
nothing else goes wrong) and you get signature_verified: false in the
volume-image-metadata.
But ... Nova won't do certificate validation for a boot-from-volume
request (as described in [0]). But I'm not clear on what happens if
verify_glance_signatures is true and enable_certificate_validation is
false. I believe that nova will boot the volume on the theory that
cinder has already handled the signature validation part (which it has,
if the option is enabled and at least one image signature property is
set on the image), and it's the certificate validation part that isn't
being handled? Hopefully someone else will explain this.
[0]
https://specs.openstack.org/openstack/nova-specs/specs/rocky/implemented/nova-validate-certificates.html
> If this feature doesn't stop the use of unsigned images as a security
> control what is the logic behind it then?
I guess you can look at the spec to see what threat models the feature
was proposed to address:
https://specs.openstack.org/openstack/nova-specs/specs/mitaka/implemented/image-verification.html
> Is this meant not to stop users from using unsigned images but such
> that people who do use signed images have verification for their code?
This is a good question, and the asymmetry between how nova and cinder
treat requests to create a resource from an unsigned image when
verify_glance_images is enabled makes this difficult to answer (at least
for me).
> So if the goal is to stop people from using random images and image
> signing and validation is not the answer what would be?
It really depends on what your cloud users want/need, and what you mean
by a "random image". For example, you could only allow public images
provided by you the operator to be used to boot servers by blocking
image uploads and server snapshots, or allowing snapshots but not
allowing image sharing (which could get you "random" images, but they'd
be restricted to a single project, which would probably be OK). Like I
said, it depends on your goals and what your users will put up with (I
think users would absolutely hate not being able to create server
snapshots, but there are probably some users for whom that wouldn't be a
problem).
While we're talking about server snapshots, however, note that with
verify_glance_images enabled in nova, you can boot a server from a
signed image and then use the server createImage action to create an
image in Glance. This image won't have the image signature properties
on it, however, and hence won't be bootable. Your users will have to
download the image so they can generate a signature for it and then set
all the image signature metadata on the image before it nova will boot
it. (I'm pretty sure this is true.)
You may want to send another email with '[ops]' in the subject line to
ask other operators who use this feature what their configuration and
experiences are like.
>
> Kind Regards,
> S. Andronic
Good luck!
brian
More information about the openstack-discuss
mailing list