이 콘텐츠는 선택한 언어로 제공되지 않습니다.
Manage Secrets with OpenStack Key Manager
How to integrate OpenStack Key Manager (Barbican) with your OpenStack deployment.
Abstract
Chapter 1. Overview 링크 복사링크가 클립보드에 복사되었습니다!
OpenStack Key Manager (barbican) is the secrets manager for Red Hat OpenStack Platform. You can use the barbican API and command line to centrally manage the certificates, keys, and passwords used by OpenStack services. Barbican currently supports the following use cases described in this guide:
- Symmetric encryption keys - used for Block Storage (cinder) volume encryption, ephemeral disk encryption, and Object Storage (swift) encryption, among others.
- Asymmetric keys and certificates - used for glance image signing and verification, among others.
In this release, barbican offers integration with the Block Storage (cinder) and Compute (nova) components.
Chapter 2. Choosing a backend 링크 복사링크가 클립보드에 복사되었습니다!
Secrets (such as certificates, API keys, and passwords) can either be stored as an encrypted blob in the barbican database, or directly in a secure storage system.
To store the secrets as an encrypted blob in the barbican database, the following options are available.
-
Simple crypto plugin - The simple crypto plugin is enabled by default and uses a single symmetric key to encrypt the blob of secrets. This key is stored in plain text in the
barbican.conffile.
The simple crypto plugin is currently the only plugin supported by Red Hat.
- PKCS#11 crypto plugin - The PKCS#11 crypto plugin encrypts secrets with project-specific key encryption keys (KEK), which are stored in the barbican database. These project-specific KEKs are encrypted by a master KEK, which is stored in a hardware security module (HSM). All encryption and decryption operations take place in the HSM, rather than in-process memory. The PKCS#11 plugin communicates with the HSM through the PKCS#11 protocol. Because the encryption is done in secure hardware, and a different KEK is used per project, this option is more secure than the simple crypto plugin.
Alternatively, you can store the secrets directly in a secure storage system:
-
KMIP plugin - The Key Management Interoperability Protocol (KMIP) plugin works with devices that have KIMP enabled, such as an HSM. Secrets are stored directly on the device instead of the barbican database. The plugin can authenticate to the device either with a username and password or a client certificate stored in the
barbican.conffile.
Regarding high availability (HA) options: The barbican service runs within Apache and is configured by director to use HAProxy for high availability. HA options for the back end layer will depend on the back end being used. For example, for simple crypto, all the barbican instances have the same encryption key in the config file, resulting in a simple HA configuration.
2.1. Migrating between backends 링크 복사링크가 클립보드에 복사되었습니다!
Barbican allows you to define a different backend for a project. If no mapping exists for a project, then secrets are stored in the global default backend. This means that multiple backends can be configured, but there must be at least one global backend defined. The heat templates supplied for the different backends contain the parameters that set each backend as the default.
If you do store secrets in a certain backend and then decide to migrate to a new backend, you can keep the old backend available while enabling the new backend as the global default (or as a project-specific backend). As a result, the old secrets remain available through the old backend.
Chapter 3. Installing Barbican 링크 복사링크가 클립보드에 복사되었습니다!
Barbican is not enabled by default in Red Hat OpenStack Platform. This procedure describes how you can deploy barbican in an existing OpenStack deployment. Barbican runs as a containerized service, so this procedure also describes how to prepare and upload the new container images:
This procedure configures barbican to use the simple_crypto backend. Additional backends are available, such as PKCS11 and DogTag, however they are not supported in this release.
On the undercloud node, create an environment file for barbican. This will instruct director to install barbican (when its included in openstack overcloud deploy […])
cat /home/stack/configure-barbican.yaml parameter_defaults: BarbicanSimpleCryptoGlobalDefault: true
$ cat /home/stack/configure-barbican.yaml parameter_defaults: BarbicanSimpleCryptoGlobalDefault: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
BarbicanSimpleCryptoGlobalDefault- Sets this plugin as the global default plugin. Further options are also configurable:
-
BarbicanPassword- Sets a password for the barbican service account. -
BarbicanWorkers- Sets the number of workers forbarbican::wsgi::apache. Uses'%{::processorcount}'by default. -
BarbicanDebug- Enables debugging. -
BarbicanPolicies- Defines policies to configure for barbican. Uses a hash value, for example:{ barbican-context_is_admin: { key: context_is_admin, value: 'role:admin' } }. This entry is then added to/etc/barbican/policy.json. Policies are described in detail in a later section. -
BarbicanSimpleCryptoKek- The Key Encryption Key (KEK) is generated by director, if none is specified.
-
-
This step prepares new container images for barbican. You will need to include the
configure-barbican.yamland all the relevant template files. Change the following example to suit your deployment:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Upload the new container images to the undercloud registry:
openstack overcloud container image upload --debug --config-file container-images-with-barbican.yaml
$ openstack overcloud container image upload --debug --config-file container-images-with-barbican.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Prepare the new environment file:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow To apply these changes to your deployment: update the overcloud and specify all the heat template files that you used in your previous openstack overcloud deploy […]. For example:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1. Add users to the creator role on Overcloud 링크 복사링크가 클립보드에 복사되었습니다!
Users must be members of the creator role in order to create and edit barbican secrets. For example, they require this role to create encrypted volumes that store their secret in barbican.
Create a new role called
creator:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Retrieve the
idof thecreatorrole:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Assign a user to the
creatorrole and specify the relevant project. In this example, a user nameduser1in theproject_aproject is added to thecreatorrole:openstack role add --user user1 --project project_a 4e9c560c6f104608948450fbf316f9d7
openstack role add --user user1 --project project_a 4e9c560c6f104608948450fbf316f9d7Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.1. Test barbican functionality 링크 복사링크가 클립보드에 복사되었습니다!
This section describes how to test that barbican is working correctly.
Create a test secret. For example:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Retrieve the payload for the secret you just created:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2. Understanding policies 링크 복사링크가 클립보드에 복사되었습니다!
Barbican uses policies to determine which users are allowed to perform actions against the secrets, such as adding or deleting keys. To implement these controls, keystone project roles (such as creator you created earlier) are mapped to barbican internal permissions. As a result, users assigned to those project roles receive the corresponding barbican permissions.
3.2.1. Viewing the default policy 링크 복사링크가 클립보드에 복사되었습니다!
The default policy is defined in code and typically does not require any amendments. You can view the default policy by generating it from the barbican source code:
Perform the following steps on a non-production system, because additional components may be downloaded and installed. This example switches to the
queensbranch, so you must adapt this if using a different version.git clone https://github.com/openstack/barbican cd /home/stack/barbican git checkout origin/stable/queens tox -e genpolicy
git clone https://github.com/openstack/barbican cd /home/stack/barbican git checkout origin/stable/queens tox -e genpolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow This generates a policy file within a subdirectory that contains the default settings:
etc/barbican/policy.yaml.sample. Note that this path refers to a subdirectory within the repository, not your system’s/etcdirectory. The contents of this file are explained in the following step.The
policy.yaml.samplefile you generated describes the policies used by barbican. The policy is implemented by four different roles that define how a user interacts with secrets and secret metadata. A user receives these permissions by being assigned to a particular role:-
admin- Can delete, create/edit, and read secrets. -
creator- Can create/edit, and read secrets. Can not delete secrets. -
observer- Can only read data. audit- Can only read metadata. Can not read secrets.For example, the following entries list the
admin,observer, andcreatorkeystone roles for each project. On the right, notice that they are assigned therole:admin,role:observer, androle:creatorpermissions:Copy to Clipboard Copied! Toggle word wrap Toggle overflow These roles can also be grouped together by barbican. For example, rules that specify
admin_or_creatorcan apply to members of eitherrule:adminorrule:creator.
-
Further down in the file, there are
secret:putandsecret:deleteactions. To their right, notice which roles have permissions to execute these actions. In the following example,secret:deletemeans that onlyadminandcreatorrole members can delete secret entries. In addition, the rule states that users in theadminorcreatorrole for that project can delete a secret in that project. The project match is defined by thesecret_project_matchrule, which is also defined in the policy.secret:delete": "rule:admin_or_creator and rule:secret_project_match"
secret:delete": "rule:admin_or_creator and rule:secret_project_match"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Chapter 4. Managing secrets in barbican 링크 복사링크가 클립보드에 복사되었습니다!
4.1. Listing secrets 링크 복사링크가 클립보드에 복사되었습니다!
Secrets are identified by their URI, indicated as a href value. This example shows the secret you created in the previous step:
4.2. Adding new secrets 링크 복사링크가 클립보드에 복사되었습니다!
Create a test secret. For example:
4.3. Updating secrets 링크 복사링크가 클립보드에 복사되었습니다!
You cannot change the payload of a secret (other than deleting the secret), but if you initially created a secret without specifying a payload, you can later add a payload to it by using the update function. For example:
openstack secret update https://192.168.123.163:9311/v1/secrets/ca34a264-fd09-44a1-8856-c6e7116c3b16 'TestPayload-updated' $
$ openstack secret update https://192.168.123.163:9311/v1/secrets/ca34a264-fd09-44a1-8856-c6e7116c3b16 'TestPayload-updated'
$
4.4. Deleting secrets 링크 복사링크가 클립보드에 복사되었습니다!
You can delete a secret by specifying its URI. For example:
openstack secret delete https://192.168.123.163:9311/v1/secrets/ecc7b2a4-f0b0-47ba-b451-0f7d42bc1746 $
$ openstack secret delete https://192.168.123.163:9311/v1/secrets/ecc7b2a4-f0b0-47ba-b451-0f7d42bc1746
$
4.5. Generate a symmetric key 링크 복사링크가 클립보드에 복사되었습니다!
Symmetric keys are suitable for certain tasks, such as nova disk encryption and swift object encryption.
Generate a new 256-bit key using
order createand store it in barbican. For example:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
--mode- Generated keys can be configured to use a particular mode, such asctrorcbc. For more information, see NIST SP 800-38A.
-
View the details of the order to identify the location of the generated key, shown here as the
Secret hrefvalue:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Retrieve the details of the secret:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6. Backup and Restore Keys 링크 복사링크가 클립보드에 복사되었습니다!
The process for backup and restore of encryption keys will vary depending on the type of back end:
4.6.1. Backup and restore the simple crypto back end 링크 복사링크가 클립보드에 복사되었습니다!
Two separate components need to be backed up for simple crypto back end: the KEK and the database. It is recommended that you regularly test your backup and restore process.
4.6.1.1. Backup and restore the KEK 링크 복사링크가 클립보드에 복사되었습니다!
For the simple crypto back end, you need to backup the barbican.conf file that contains the master KEK is written. This file must be backed up to a security hardened location. The actual data is stored in the Barbican database in an encrypted state, described in the next section.
-
To restore the key from a backup, you need to copy the restored
barbican.confover the existingbarbican.conf.
4.6.1.2. Backup and restore the back end database 링크 복사링크가 클립보드에 복사되었습니다!
This procedure describes how to backup and restore a barbican database for the simple crypto back end. To demonstrate this, you will generate a key and upload the secrets to barbican. You will then backup the barbican database, and delete the secrets you created. You will then restore the database and confirm that the secrets you created earlier have been recovered.
Be sure you are also backing up the KEK, as this is also an important requirement. This is described in the previous section.
4.6.1.2.1. Create the test secret 링크 복사링크가 클립보드에 복사되었습니다!
On the overcloud, generate a new 256-bit key using
order createand store it in barbican. For example:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a test secret:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Confirm that the secrets were created:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.1.2.2. Backup the barbican database 링크 복사링크가 클립보드에 복사되었습니다!
Run these steps while logged in to the controller-0 node.
Only the user barbican has access to the barbican database. So the barbican user password is required to backup or restore the database.
Retrieve barbican user password. For example:
sudo grep -r "barbican::db::mysql::password" /etc/puppet/hieradata /etc/puppet/hieradata/service_configs.json: "barbican::db::mysql::password": "seDJRsMNRrBdFryCmNUEFPPev",
[heat-admin@controller-0 ~]$ sudo grep -r "barbican::db::mysql::password" /etc/puppet/hieradata /etc/puppet/hieradata/service_configs.json: "barbican::db::mysql::password": "seDJRsMNRrBdFryCmNUEFPPev",Copy to Clipboard Copied! Toggle word wrap Toggle overflow Backup the barbican database:
mysqldump -u barbican -p"seDJRsMNRrBdFryCmNUEFPPev" barbican > barbican_db_backup.sql
[heat-admin@controller-0 ~]$ mysqldump -u barbican -p"seDJRsMNRrBdFryCmNUEFPPev" barbican > barbican_db_backup.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Database backup is stored in /home/heat-admin
ll total 36 -rw-rw-r--. 1 heat-admin heat-admin 36715 Jun 19 18:31 barbican_db_backup.sql
[heat-admin@controller-0 ~]$ ll total 36 -rw-rw-r--. 1 heat-admin heat-admin 36715 Jun 19 18:31 barbican_db_backup.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.1.2.3. Delete the test secrets 링크 복사링크가 클립보드에 복사되었습니다!
On the overcloud, delete the secrets you created previously, and verify they no longer exist. For example:
openstack secret delete http://10.0.0.104:9311/v1/secrets/93f62cfd-e008-401f-be74-bf057c88b04a openstack secret delete http://10.0.0.104:9311/v1/secrets/f664b5cf-5221-47e5-9887-608972a5fefb openstack secret list
(overcloud) [stack@undercloud-0 ~]$ openstack secret delete http://10.0.0.104:9311/v1/secrets/93f62cfd-e008-401f-be74-bf057c88b04a (overcloud) [stack@undercloud-0 ~]$ openstack secret delete http://10.0.0.104:9311/v1/secrets/f664b5cf-5221-47e5-9887-608972a5fefb (overcloud) [stack@undercloud-0 ~]$ openstack secret list (overcloud) [stack@undercloud-0 ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.1.2.4. Restore the databases 링크 복사링크가 클립보드에 복사되었습니다!
Run these steps while logged in to the controller-0 node.
Make sure you have the barbican database on the controller which grants access to the
barbicanuser for database restoration:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Restore the backup file to the
barbicandatabase:sudo mysql -u barbican -p"seDJRsMNRrBdFryCmNUEFPPev" barbican < barbican_db_backup.sql
[heat-admin@controller-0 ~]$ sudo mysql -u barbican -p"seDJRsMNRrBdFryCmNUEFPPev" barbican < barbican_db_backup.sql [heat-admin@controller-0 ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.1.2.5. Verify the restore process 링크 복사링크가 클립보드에 복사되었습니다!
On the overcloud, verify that the test secrets were restored successfully:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Chapter 5. Barbican Hardware Security Module (HSM) Integration 링크 복사링크가 클립보드에 복사되었습니다!
OpenStack Key Manager (Barbican) is the secrets manager for Red Hat OpenStack Platform. You can use the Barbican API and command line to centrally manage the certificates, keys, and passwords used by OpenStack services. Barbican currently supports the following use cases described in this guide:
- Symmetric encryption keys - used for Block Storage (cinder) volume encryption, ephemeral disk encryption, Object Storage (Sswift) encryption, among others.
- Asymmetric keys and certificates - glance image signing and verification, octavia TLS load balancing, among others.
In this release, Barbican offers integration with the Block Storage (cinder), Networking (neutron), and Compute (nova) components.
5.1. Choosing a backend 링크 복사링크가 클립보드에 복사되었습니다!
Secrets (such as certificates, API keys, and passwords) can either be stored as an encrypted blob in the Barbican database, directly in a secure storage system, including a Hardware Security Module (HSM) appliance.
5.2. Encrypted blob 링크 복사링크가 클립보드에 복사되었습니다!
The simple crypto plugin is enabled by default and uses a single symmetric key to encrypt the blob of secrets. This key is stored in plain text in the barbican.conf file.
5.3. Hardware Security Module (HSM) support 링크 복사링크가 클립보드에 복사되었습니다!
You can use the PKCS#11 crypto plugin to store the secrets in a Hardware Security Module (HSM), which are physical rack-mounted appliances produced by third party vendors. These secrets are encrypted using the pKEK, which in turn is also stored in the Barbican database. The pKEK is encrypted and an HMAC operation is applied using the MKEK and HMAC keys, which are also stored in the HSM.
This guide explains how to integrate Barbican with certain HSM appliances from Atos and nCipher.
You can use the following approaches to interact with an HSM:
- PKCS#11 crypto plugin - The PKCS#11 crypto plugin encrypts secrets with project-specific key encryption keys (KEK), which are stored in the Barbican database. These project-specific KEKs are encrypted by a master KEK. The encrypted blob containing the PKEK also undergoes HMAC processing by an HMAC key, which is also stored in the HSM. All encryption and decryption operations take place in the HSM, rather than in-process memory. The PKCS#11 plugin communicates with the HSM through the PKCS#11 protocol. Because the encryption is performed in secure hardware, and a different KEK is used per project, this option is more secure than the simple crypto plugin.
-
KMIP plugin - Note that this approach is not supported by Red Hat. The Key Management Interoperability Protocol (KMIP) plugin works with devices that have KMIP enabled, such as an HSM. Secrets are stored directly on the device instead of the Barbican database. The plugin can authenticate to the device either with a username and password or a client certificate stored in the
barbican.conffile.
Regarding high availability (HA) options: The Barbican service runs within Apache and is configured by director to use HAProxy for high availability. Your HA options for the backend layer will depend on the which backend is used: For example, with simple crypto, all the Barbican instances have the same encryption key in the configuration file, resulting in a simple HA configuration.
5.4. Migrating between backends 링크 복사링크가 클립보드에 복사되었습니다!
Barbican allows you to define a different backend for a project. If no mapping exists for a project, then secrets are stored in the global default backend. This means that multiple backends can be configured, but there must be only one global backend defined. The heat templates supplied for the different backends contain the parameters that set each backend as the default.
If you do store secrets in a certain backend and then decide to migrate to a new backend, you can keep the old backend available while enabling the new backend as the global default (or as a project-specific backend). As a result, the old secrets remain available through the old backend.
5.5. Integrate with an HSM appliance 링크 복사링크가 클립보드에 복사되었습니다!
This chapter explains how to integrate your Red Hat OpenStack Platform deployment with certain HSM appliances. It also describes general operational procedures that you will need to consider.
5.6. Integrate Barbican with an Atos HSM 링크 복사링크가 클립보드에 복사되었습니다!
This section explains how to integrate the PKCS#11 backend with your Trustway Proteccio NetHSM appliance.
5.7. Requirements 링크 복사링크가 클립보드에 복사되었습니다!
- A working Barbican deployment in your Red Hat OpenStack Platform environment.
Plan your HSM integration so that you have the following settings ready for the director deployment. These values will be entered into
barbican-backend-pkcs11-atos.yaml(described in the following section).-
BarbicanPkcs11CryptoLogin- the passphrase used by the PKCS#11 library (PIN). Prior to installation, you must follow the ATOS procedures to generate a client certificate for the controllers. Host the client certificate, the server certificate, and the Atos client ISO file on an HTTP or FTP server that is accessible by the overcloud nodes. Some of this material is secret (such as client keys) and must be protected; if you use passwords to do this, you must provide the location as
http://user:pass@location, orftp://user:pass@location, among other possibilities. During the installation process, director invokes ansible scripts to retrieve these files. The file paths used in the following values must be accessible during the installation process.-
atos_client_iso_location -
atos_client_cert_location -
atos_client_key_location -
atos_server_cert_location -
atos_client_working_dir -
atos_client_iso_name -
atos_hsm_ip_address
-
-
5.8. Configure the controller 링크 복사링크가 클립보드에 복사되었습니다!
This procedure uses an Ansible role to download and install the Atos client software on the controller, and then modifies the Atos configuration file to include to the predefined HSM IP and credentials.
Create an environment file in
OVERCLOUD_TEMPLATESnamedbarbican-backend-pkcs11-atos.yaml, and enter the configuration details of your HSM. For example:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
BarbicanPkcs11CryptoGlobalDefaultandBarbicanPkcs11CryptoEnabled- These options configure PKCS#11 as the global default backend. -
BarbicanPkcs11CryptoMKEKLabel- Defines the name of the mKEK generated in the HSM. Director creates this key in the HSM using this name. This name must be unique for every fresh installation, otherwise conflicts can occur if the same label name is used. BarbicanPkcs11CryptoHMACLabel- Defines the name of the HMAC key generated in the HSM. Director creates this key in the HSM using this name.NoteBy default, the HSM allows a maximum of 32 concurrent connections. If this number is exceeded, you can expect to receive a memory error from the PKCS#11 client. You can calculate the number of connections as follows:
-
Each controller has one
barbican-apiand onebarbican-workerprocess. -
Each Barbican API process is executed with
NApache workers - (whereNdefaults to the number of CPUs). - Each worker has one connection to the HSM.
BarbicanWorkers - Each
barbican-workerprocess has one connection to the database; this setting lets you define the number of Apache workers per API process. By default, it matches the CPU count. This setting configuresbarbican::wsgi::apache::workers. The number of Barbican workers is controlled by the parameterqueue/asynchronous_workersinbarbican.conf, which defaults to1. Currently there is no tripleO parameter to manage this value.For example, if you have three controllers, each with 32 cores, then each controller’s Barbican API uses 32 Apache workers (because
BarbicanWorkerswill default to32). Consequently, one controller consumes all 32 HSM connections available. To avoid this contention, limit the number of Barbican Apache workers configured for each node. In this example, settingBarbicanWorkersto10will allow all three controllers to make ten concurrent connections each to the HSM.-
Each controller has one
-
-
Execute the script by adding the path to your existing
openstack overcloud deploycommand, and re-running it.
5.8.1. Test your HSM connection 링크 복사링크가 클립보드에 복사되었습니다!
Create a test secret. For example:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Retrieve the payload for the secret you just created:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9. Integrate Barbican with an nCipher nShield Connect XC 링크 복사링크가 클립보드에 복사되었습니다!
This section explains how to integrate the PKCS#11 backend with your nCipher nShield Connect XC crypto backend.
- A working Barbican deployment in your Red Hat OpenStack Platform environment.
Plan your HSM integration so that you have the following settings ready for the Ansible deployment. These values will be entered into
barbican-backend-pkcs11-thales.yaml(described in the following section).-
thales_client_working_dirandthales_client_tarball_location- The nCipher nShield Connect XC client software must be mounted in a location that it is accessible during the install. These values will vary depending on the file location and file names. -
thales_client_working_dir- When the client software is unzipped, the location of the software may change the value. -
thales_km_data_locationandthales_km_data_tarball_name- These describe the security world data, and must also be mounted in an accessible location. This material is secret and must be protected; if you use passwords to do this, you must provide the location ashttp://user:pass@location, orftp://user:pass@location, among other possibilities. During the installation process, director invokes ansible scripts to retrieve these files. The file paths used in the following values must be accessible during the installation process. -
thales_rfs_key- The RFS server must be accessible to a user that has permission to login and execute commands that update the configuration. This allows you to add the controllers as HSM clients. The ansible scripts will ssh to the rfs server using the provided private key. The public key will need to be uploaded to the rfs server as an authorized key first.
-
5.10. Configure the controller 링크 복사링크가 클립보드에 복사되었습니다!
This procedure uses an Ansible role to download and install the nCipher client software on the controller, and then modifies the nCipher configuration file to include to the predefined HSM IP and credentials.
Create an environment file in
OVERCLOUD_TEMPLATESnamedbarbican-backend-pkcs11-thales.yaml, and enter the configuration details of your nCipher nShield Connect XC. For example:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
BarbicanPkcs11CryptoGlobalDefaultandBarbicanPkcs11CryptoEnabled- These options configure PKCS#11 as the global default backend. -
BarbicanPkcs11CryptoMKEKLabel- Defines the name of the mKEK generated in the HSM. Director creates this key in the HSM using this name. BarbicanPkcs11CryptoHMACLabel- Defines the name of the HMAC key generated in the HSM. Director creates this key in the HSM using this name.-
Execute the script by adding the path to your existing
openstack overcloud deploycommand, and re-running it.
-
Execute the script by adding the path to your existing
-
5.10.1. Test your HSM connection 링크 복사링크가 클립보드에 복사되었습니다!
Create a test secret. For example:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Retrieve the payload for the secret you just created:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11. Review TLS activity between Barbican and the HSM 링크 복사링크가 클립보드에 복사되었습니다!
Barbican communicates with the HSM through the vendor-provided PKCS#11 library. For example, for an ATOS Proteccio HSM, you can configure the HSM client to communicate with the HSM using TLS by configuring the proteccio.rc file.
For the Atos HSM, the files containing the CA, server certificate, and key are located on the controller, and are owned by the barbican user. Note that the barbican user does not exist on the controller, and is the barbican user as defined in the Barbican container. As a result, this is indicated in the file as a numerical identifier. The files should be readable for the barbican user (0400); these files are then bind mounted by the Barbican container.
For the nCipher nShield Connect XC, to view additional logs on the pkcs#11 transactions between the HSM and the client software, add the following entries to /opt/nfast/cknfastrc:
CKNFAST_DEBUG=9 CKNFAST_DEBUGFILE=/tmp/hsm_log.txt
CKNFAST_DEBUG=9
CKNFAST_DEBUGFILE=/tmp/hsm_log.txt
5.12. Key storage considerations 링크 복사링크가 클립보드에 복사되었습니다!
The Barbican MKEK and HMAC keys are generated using Barbican utilities that communicate with the HSM using the vendor’s PKCS#11 library. Therefore the MKEK and HMAC keys are generated in the HSM and never leave the HSM.
In a director-based deployment, these utilities are executed within containers on the first controller; the undercloud is never involved in this process.
5.13. Rotating the keys 링크 복사링크가 클립보드에 복사되었습니다!
You can rotate the MKEK and HMAC keys using a director update.
The MKEK and HMAC have the same key type. This is a limitation in Barbican, and is currently expected to be addressed at a later time.
To rotate the keys, add the following parameter to your deployment environment files:
BarbicanPkcs11CryptoRewrapKeys: true
BarbicanPkcs11CryptoRewrapKeys: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow Change the labels on the MKEK and HMAC keys For example, if your labels are similar to these:
BarbicanPkcs11CryptoMKEKLabel: 'barbican_mkek_10' BarbicanPkcs11CryptoHMACLabel: 'barbican_hmac_10'BarbicanPkcs11CryptoMKEKLabel: 'barbican_mkek_10' BarbicanPkcs11CryptoHMACLabel: 'barbican_hmac_10'Copy to Clipboard Copied! Toggle word wrap Toggle overflow You can change the labels by incrementing the values:
BarbicanPkcs11CryptoMKEKLabel: 'barbican_mkek_11' BarbicanPkcs11CryptoHMACLabel: 'barbican_hmac_11'BarbicanPkcs11CryptoMKEKLabel: 'barbican_mkek_11' BarbicanPkcs11CryptoHMACLabel: 'barbican_hmac_11'Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteDo not change the HMAC key type.
-
Re-deploy using director to apply the update. Director checks whether the keys that are labelled for the MKEK and HMAC exist, and then creates them. In addition, with the
BarbicanPkcs11CryptoRewrapKeysparameter set toTrue, director callsbarbican-manage hsm pkek_rewrapto rewrap all existing pKEKs.
5.14. Planning backup for Barbican and the HSM 링크 복사링크가 클립보드에 복사되었습니다!
The section describes the components you will need to consider when planning your Barbican and HSM backup strategy.
- Barbican secrets - These are stored in the database, and must be backed up regularly.
- MKEK and HMAC keys - These are stored in the HSM. Check with your HSM vendor for recommended practices.
- HSM client certificates and keys - These are located on the controller, and must be included in your controller’s file backup procedure. Note that these files are sensitive credentials.
- Barbican configuration files
Chapter 6. Encrypting cinder volumes 링크 복사링크가 클립보드에 복사되었습니다!
You can use barbican to manage your Block Storage (cinder) encryption keys. This configuration uses LUKS to encrypt the disks attached to your instances, including boot disks. Key management is transparent to the user; when you create a new volume using luks as the encryption type, cinder generates a symmetric key secret for the volume and stores it in barbican. When booting the instance (or attaching an encrypted volume), nova retrieves the key from barbican and stores the secret locally as a Libvirt secret on the Compute node.
Nova formats encrypted volumes during their first use if they are unencrypted. The resulting block device is then presented to the Compute node.
If you intend to update any configuration files, be aware that certain OpenStack services now run within containers; this applies to keystone, nova, and cinder, among others. As a result, there are administration practices to consider:
-
Do not update any configuration file you might find on the physical node’s host operating system, for example,
/etc/cinder/cinder.conf. The containerized service does not reference this file. Do not update the configuration file running within the container. Changes are lost once you restart the container.
Instead, if you must change containerized services, update the configuration file in
/var/lib/config-data/puppet-generated/, which is used to generate the container.For example:
-
keystone:
/var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf -
cinder:
/var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf nova:
/var/lib/config-data/puppet-generated/nova/etc/nova/nova.confChanges are applied after you restart the container.
On nodes running the
cinder-volumeandnova-computeservices, confirm that nova and cinder are both configured to use barbican for key management:crudini --get /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf key_manager backend castellan.key_manager.barbican_key_manager.BarbicanKeyManager crudini --get /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf key_manager backend castellan.key_manager.barbican_key_manager.BarbicanKeyManager
$ crudini --get /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf key_manager backend castellan.key_manager.barbican_key_manager.BarbicanKeyManager $ crudini --get /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf key_manager backend castellan.key_manager.barbican_key_manager.BarbicanKeyManagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow Create a volume template that uses encryption. When you create new volumes they can be modeled off the settings you define here:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create a new volume and specify that it uses the
LuksEncryptor-Template-256settings:NoteEnsure that the user creating the encrypted volume has the
creatorbarbican role on the project. For more information, see theGrant user access to the creator rolesection.Copy to Clipboard Copied! Toggle word wrap Toggle overflow The resulting secret is automatically uploaded to the barbican backend.
Use barbican to confirm that the disk encryption key is present. In this example, the timestamp matches the LUKS volume creation time:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Attach the new volume to an existing instance. For example:
openstack server add volume testInstance Encrypted-Test-Volume
$ openstack server add volume testInstance Encrypted-Test-VolumeCopy to Clipboard Copied! Toggle word wrap Toggle overflow The volume is then presented to the guest operating system and can be mounted using the built-in tools.
6.1. Migrate existing volume keys to Barbican 링크 복사링크가 클립보드에 복사되었습니다!
Previously, deployments might have used ConfKeyManager to manage disk encryption keys. This meant that a fixed key was generated and then stored in the nova and cinder configuration files. The key IDs can be migrated to barbican using the following procedure. This utility works by scanning the databases for encryption_key_id entries within scope for migration to barbican. Each entry gets a new barbican key ID and the existing ConfKeyManager secret is retained.
Previously, you could reassign ownership for volumes encrypted using ConfKeyManager. This is not possible for volumes that have their keys managed by barbican.
Activating barbican will not break your existing keymgr volumes.
After it is enabled, the migration process runs automatically, but it requires some configuration, described in the next section. The actual migration runs in the cinder-volume and cinder-backup process, and you can track the progress in the cinder log files.
-
cinder-volume- migrates keys stored in cinder’s Volumes and Snapshots tables. -
cinder-backup- migrates keys in the Backups table.
6.1.1. Overview of the migration steps 링크 복사링크가 클립보드에 복사되었습니다!
- Deploy the barbican service.
Add the
creatorrole to the cinder service. For example:#openstack role create creator #openstack role add --user cinder creator --project service
#openstack role create creator #openstack role add --user cinder creator --project serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
Restart the
cinder-volumeandcinder-backupservices. -
cinder-volumeandcinder-backupautomatically begin the migration process. -
Monitor the logs for the message indicating migration has finished and check that no more volumes are using the
ConfKeyManagerall-zeros encryption key ID. -
Remove the
fixed_keyoption fromcinder.confandnova.conf. You must determine which nodes have this setting configured. -
Remove the
creatorrole from the cinder service.
6.1.2. Behavioral differences 링크 복사링크가 클립보드에 복사되었습니다!
Barbican-managed encrypted volumes behave differently than volumes that use ConfKeyManager:
- You cannot transfer ownership of encrypted volumes, because it is not currently possible to transfer ownership of the barbican secret.
- Barbican is more restrictive about who is allowed to read and delete secrets, which can affect some cinder volume operations. For example, a user cannot attach, detach, or delete a different user’s volumes.
6.1.3. Reviewing the migration process 링크 복사링크가 클립보드에 복사되었습니다!
This section describes how you can view the status of the migration tasks. After you start the process, one of these entries appears in the logs. This indicates whether the migration started correctly, or it identifies the issue it encountered:
-
Not migrating encryption keys because the ConfKeyManager is still in use. -
Not migrating encryption keys because the ConfKeyManager's fixed_key is not in use. -
Not migrating encryption keys because migration to the 'XXX' key_manager backend is not supported.- This message is unlikely to appear; it is a safety check to handle the code ever encountering another Key Manager backend other than barbican. This is because the code only supports one migration scenario: From ConfKeyManager to barbican. -
Not migrating encryption keys because there are no volumes associated with this host.- This may occur whencinder-volumeis running on multiple hosts, and a particular host has no volumes associated with it. This arises because every host is responsible for handling its own volumes. -
Starting migration of ConfKeyManager keys. Migrating volume <UUID> encryption key to Barbican- During migration, all of the host’s volumes are examined, and if a volume is still using the ConfKeyManager’s key ID (identified by the fact that it’s all zeros (00000000-0000-0000-0000-000000000000)), then this message appears.-
For
cinder-backup, this message uses slightly different capitalization:Migrating Volume [...]orMigrating Backup [...]
-
For
After each host examines all of its volumes, the host displays a summary status message:
`No volumes are using the ConfKeyManager's encryption_key_id.` `No backups are known to be using the ConfKeyManager's encryption_key_id.`
`No volumes are using the ConfKeyManager's encryption_key_id.` `No backups are known to be using the ConfKeyManager's encryption_key_id.`Copy to Clipboard Copied! Toggle word wrap Toggle overflow You may also see the following entries:
There are still %d volume(s) using the ConfKeyManager's all-zeros encryption key ID.There are still %d backup(s) using the ConfKeyManager’s all-zeros encryption key ID.Note that both of these messages can appear in thecinder-volumeandcinder-backuplogs. Whereas each service only handles the migration of its own entries, the service is aware of the the other’s status. As a result,cinder-volumeknows ifcinder-backupstill has backups to migrate, andcinder-backupknows if thecinder-volumeservice has volumes to migrate.Although each host migrates only its own volumes, the summary message is based on a global assessment of whether any volume still requires migration This allows you to confirm that migration for all volumes is complete. Once you receive confirmation, remove the
fixed_keysetting fromcinder.confandnova.conf. See the Clean up the fixed keys section below for more information.
6.1.4. Troubleshooting the migration process 링크 복사링크가 클립보드에 복사되었습니다!
6.1.4.1. Role assignment 링크 복사링크가 클립보드에 복사되었습니다!
The barbican secret can only be created when the requestor has the creator role. This means that the cinder service itself requires the creator role, otherwise a log sequence similar to this will occur:
-
Starting migration of ConfKeyManager keys. -
Migrating volume <UUID> encryption key to Barbican -
Error migrating encryption key: Forbidden: Secret creation attempt not allowed - please review your user/project privileges -
There are still %d volume(s) using the ConfKeyManager's all-zeros encryption key ID.
The key message is the third one: Secret creation attempt not allowed. To fix the problem, update the cinder account’s privileges:
-
Run
openstack role add --project service --user cinder creator -
Restart the
cinder-volumeandcinder-backupservices.
As a result, the next attempt at migration should succeed.
6.1.5. Clean up the fixed keys 링크 복사링크가 클립보드에 복사되었습니다!
The encryption_key_id was only recently added to the Backup table, as part of the Queens release. As a result, pre-existing backups of encrypted volumes are likely to exist. The all-zeros encryption_key_id is stored on the backup itself, but it won’t appear in the Backup database. As such, it is impossible for the migration process to know for certain whether a backup of an encrypted volume exists that still relies on the all-zeros ConfKeyMgr key ID.
After migrating your key IDs into barbican, the fixed key remains in the configuration files. This may present a security concern to some users, because the fixed_key value is not encrypted in the .conf files. To address this, you can manually remove the fixed_key values from your nova and cinder configurations. However, first complete testing and review the output of the log file before you proceed, because disks that are still dependent on this value will not be accessible.
Review the existing
fixed_keyvalues. The values must match for both services.crudini --get /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf keymgr fixed_key crudini --get /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf keymgr fixed_key
crudini --get /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf keymgr fixed_key crudini --get /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf keymgr fixed_keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
IMPORTANT: Make a backup of the existing
fixed_keyvalues. This allows you to restore the value if something goes wrong, or if you need to restore a backup that uses the old encryption key. Delete the
fixed_keyvalues:crudini --del /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf keymgr fixed_key crudini --del /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf keymgr fixed_key
crudini --del /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf keymgr fixed_key crudini --del /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf keymgr fixed_keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Chapter 7. Encrypt at-rest swift objects 링크 복사링크가 클립보드에 복사되었습니다!
By default, objects uploaded to Object Storage are stored unencrypted. Because of this, it is possible to access objects directly from the file system. This can present a security risk if disks are not properly erased before they are discarded. When you have barbican enabled, the Object Storage service (swift) can transparently encrypt and decrypt your stored (at-rest) objects. At-rest encryption is distinct from in-transit encryption in that it refers to the objects being encrypted while being stored on disk.
Swift performs these encryption tasks transparently, with the objects being automatically encrypted when uploaded to swift, then automatically decrypted when served to a user. This encryption and decryption is done using the same (symmetric) key, which is stored in barbican.
You cannot disable encryption after you have enabled encryption and added data to the swift cluster, because the data is now stored in an encrypted state. Consequently, the data will not be readable if encryption is disabled, until you re-enable encryption with the same key.
7.1. Enable at-rest encryption for swift 링크 복사링크가 클립보드에 복사되었습니다!
-
You can enable the swift encryption capabilities by including
SwiftEncryptionEnabled: Truein your environment file, then re-runningopenstack overcloud deployusing/home/stack/overcloud_deploy.sh. Note that you still need to enable barbican, as described in the Install Barbican chapter. Confirm that swift is configured to use at-rest encryption:
crudini --get /var/lib/config-data/puppet-generated/swift/etc/swift/proxy-server.conf pipeline-main pipeline pipeline = catch_errors healthcheck proxy-logging cache ratelimit bulk tempurl formpost authtoken keystone staticweb copy container_quotas account_quotas slo dlo versioned_writes kms_keymaster encryption proxy-logging proxy-server
$ crudini --get /var/lib/config-data/puppet-generated/swift/etc/swift/proxy-server.conf pipeline-main pipeline pipeline = catch_errors healthcheck proxy-logging cache ratelimit bulk tempurl formpost authtoken keystone staticweb copy container_quotas account_quotas slo dlo versioned_writes kms_keymaster encryption proxy-logging proxy-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow The result should include an entry for
encryption.
Chapter 8. Validate glance images 링크 복사링크가 클립보드에 복사되었습니다!
After enabling Barbican, you can configure the Image Service (glance) to verify that an uploaded image has not been tampered with. In this implementation, the image is first signed with a key that is stored in barbican. The image is then uploaded to glance, along with the accompanying signing information. As a result, the image’s signature is verified before each use, with the instance build process failing if the signature does not match.
Barbican’s integration with glance means that you can use the openssl command with your private key to sign glance images before uploading them.
8.1. Enable glance image validation 링크 복사링크가 클립보드에 복사되었습니다!
In your environment file, enable image verification with the VerifyGlanceSignatures: True setting. You must re-run the openstack overcloud deploy command for this setting to take effect.
To verify that glance image validation is enabled, run the following command on an overcloud Compute node:
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_signatures
If you use Ceph as the back end for the Image and Compute services, a CoW clone is created. Therefore, Image signing verification cannot be performed.
8.2. Validate an image 링크 복사링크가 클립보드에 복사되었습니다!
To configure a glance image for validation, complete the following steps:
Confirm that glance is configured to use 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 Generate a private key and convert it to the required format:
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 Add the key to the barbican secret store:
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 NoteRecord the resulting UUID for use in a later step. In this example, the certificate’s UUID is
5df14c2b-f221-4a02-948e-48a61edd3f5b.Use
private_key.pemto sign the image and generate the.signaturefile. For example: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 Convert the resulting
.signaturefile into base64 format: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 Load the base64 value into a variable to use it in the subsequent command:
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 Upload the signed image to glance. For
img_signature_certificate_uuid, you must specify the UUID of the signing key you previously uploaded to barbican:Copy to Clipboard Copied! Toggle word wrap Toggle overflow You can view glance’s image validation activities in the Compute log:
/var/log/containers/nova/nova-compute.log. For example, you can expect the following entry when the instance is booted: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
Chapter 9. Validate images used for volume creation 링크 복사링크가 클립보드에 복사되었습니다!
The Block Storage Service (cinder) automatically validates the signature of any downloaded, signed image during volume from image creation. The signature is validated before the image is written to the volume.
To improve performance, you can use the Block Storage Image-Volume cache to store validated images for creating new volumes. For more information, see Configure and Enable the Image-Volume Cache of the Storage Guide.
Cinder image signature validation does not work with Red Hat Ceph Storage or RBD volumes.
9.1. Validate the image signature on a new volume 링크 복사링크가 클립보드에 복사되었습니다!
This procedure demonstrates how you can use validate a volume signature created from a signed image.
- Log in to a controller node.
View cinder’s image validation activities in the
Volumelog,/var/log/containers/cinder/cinder-volume.log.For example, you can expect the following entry when the instance is booted:
2018-05-24 12:48:35.256 1 INFO cinder.image.image_utils [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 cinder.image.image_utils [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
Alternatively, you can use the openstack volume list and cinder volume show commands.
-
Use the
openstack volume listcommand to locate the volume ID. Run the
cinder volume showcommand on a compute node:cinder volume show <VOLUME_ID>
cinder volume show <VOLUME_ID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Locate the
volume_image_metadatasection with the linesignature verified : True.Copy to Clipboard Copied! Toggle word wrap Toggle overflow