4.4. 签名镜像服务(glance)镜像
当您配置镜像服务(glance)以验证上传的镜像是否已被篡改时,您必须先为镜像签名,然后才能使用这些镜像启动实例。使用 openssl 命令使用存储在 barbican 中的密钥为镜像签名,然后使用附带的签名信息将镜像上传到 glance。因此,在每次使用前会验证镜像的签名,如果签名不匹配,实例构建过程会失败。
前提条件
- OpenStack Key Manager 已安装并启用
流程
-
在环境文件中,使用
VerifyGlanceSignatures: True设置启用镜像验证。您必须重新运行openstack overcloud deploy命令,才能使此设置生效。 要验证 glance 镜像验证是否已启用,请在 overcloud Compute 节点上运行以下命令:
sudo crudini --get /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf glance verify_glance_signatures
$ sudo crudini --get /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf glance verify_glance_signaturesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您使用 Ceph 作为镜像和计算服务的后端,则会创建一个 CoW 克隆。因此,无法执行镜像签名验证。
确认 glance 已配置为使用 barbican :
sudo crudini --get /var/lib/config-data/puppet-generated/glance_api/etc/glance/glance-api.conf key_manager backend castellan.key_manager.barbican_key_manager.BarbicanKeyManager
$ sudo crudini --get /var/lib/config-data/puppet-generated/glance_api/etc/glance/glance-api.conf key_manager backend castellan.key_manager.barbican_key_manager.BarbicanKeyManagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成证书:
openssl genrsa -out private_key.pem 1024 openssl rsa -pubout -in private_key.pem -out public_key.pem openssl req -new -key private_key.pem -out cert_request.csr openssl x509 -req -days 14 -in cert_request.csr -signkey private_key.pem -out x509_signing_cert.crt
openssl genrsa -out private_key.pem 1024 openssl rsa -pubout -in private_key.pem -out public_key.pem openssl req -new -key private_key.pem -out cert_request.csr openssl x509 -req -days 14 -in cert_request.csr -signkey private_key.pem -out x509_signing_cert.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书添加到 barbican secret 存储中:
source ~/overcloudrc openstack secret store --name signing-cert --algorithm RSA --secret-type certificate --payload-content-type "application/octet-stream" --payload-content-encoding base64 --payload "$(base64 x509_signing_cert.crt)" -c 'Secret href' -f value https://192.168.123.170:9311/v1/secrets/5df14c2b-f221-4a02-948e-48a61edd3f5b
$ source ~/overcloudrc $ openstack secret store --name signing-cert --algorithm RSA --secret-type certificate --payload-content-type "application/octet-stream" --payload-content-encoding base64 --payload "$(base64 x509_signing_cert.crt)" -c 'Secret href' -f value https://192.168.123.170:9311/v1/secrets/5df14c2b-f221-4a02-948e-48a61edd3f5bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意记录生成的 UUID 以供稍后的步骤使用。在本例中,证书的 UUID 是
5df14c2b-f221-4a02-948e-48a61edd3f5b。使用
private_key.pem为镜像签名并生成.signature文件。例如:openssl dgst -sha256 -sign private_key.pem -sigopt rsa_padding_mode:pss -out cirros-0.4.0.signature cirros-0.4.0-x86_64-disk.img
$ openssl dgst -sha256 -sign private_key.pem -sigopt rsa_padding_mode:pss -out cirros-0.4.0.signature cirros-0.4.0-x86_64-disk.imgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将生成的
.signature文件转换为 base64 格式:base64 -w 0 cirros-0.4.0.signature > cirros-0.4.0.signature.b64
$ base64 -w 0 cirros-0.4.0.signature > cirros-0.4.0.signature.b64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 base64 值加载到变量中,以便在后续命令中使用它:
cirros_signature_b64=$(cat cirros-0.4.0.signature.b64)
$ cirros_signature_b64=$(cat cirros-0.4.0.signature.b64)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将已签名的镜像上传到 glance。对于
img_signature_certificate_uuid,您必须指定之前上传到 barbican 的签名密钥的 UUID:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以在 Compute 日志中查看 glance 的镜像验证活动:
/var/log/containers/nova/nova-compute.log。例如,您可以在实例引导时预期以下条目:2018-05-24 12:48:35.256 1 INFO nova.image.glance [req-7c271904-4975-4771-9d26-cbea6c0ade31 b464b2fd2a2140e9a88bbdacf67bdd8c a3db2f2beaee454182c95b646fa7331f - default default] Image signature verification succeeded for image d3396fa0-2ea2-4832-8a77-d36fa3f2ab27
2018-05-24 12:48:35.256 1 INFO nova.image.glance [req-7c271904-4975-4771-9d26-cbea6c0ade31 b464b2fd2a2140e9a88bbdacf67bdd8c a3db2f2beaee454182c95b646fa7331f - default default] Image signature verification succeeded for image d3396fa0-2ea2-4832-8a77-d36fa3f2ab27Copy to Clipboard Copied! Toggle word wrap Toggle overflow