Juju Charm - Barbican
Go to file
Corey Bryant 2c99cba7e0 Add Kinetic and Zed support
* sync charm-helpers to classic charms
* change openstack-origin/source default to zed
* align testing with zed
* add new zed bundles
* add zed bundles to tests.yaml
* add zed tests to osci.yaml and .zuul.yaml
* update build-on and run-on bases
* add bindep.txt for py310
* sync tox.ini and requirements.txt for ruamel
* use charmcraft_channel 2.0/stable
* drop reactive plugin overrides
* move interface/layer env vars to charmcraft.yaml

Change-Id: I054650d578c30b5c865cbd7a567eb5d7c8032d01
2022-08-31 18:48:39 +01:00
src Add Kinetic and Zed support 2022-08-31 18:48:39 +01:00
unit_tests Use unittest.mock instead of mock 2021-12-15 14:40:18 +00:00
.gitignore Add *.charm to gitignore 2022-04-18 21:05:20 +01:00
.gitreview OpenDev Migration Patch 2019-04-19 19:29:32 +00:00
.stestr.conf Add support for pluggable secrets backend 2018-10-22 07:36:39 +02:00
.zuul.yaml Add Kinetic and Zed support 2022-08-31 18:48:39 +01:00
bindep.txt Add Kinetic and Zed support 2022-08-31 18:48:39 +01:00
build-requirements.txt Update to build using charmcraft 2022-02-01 18:29:11 +00:00
charmcraft.yaml Add Kinetic and Zed support 2022-08-31 18:48:39 +01:00
LICENSE Add barbican-hsm-plugin interface support 2016-07-12 12:35:51 +00:00
metadata.yaml Migration charm to charmhub latest/edge track 2022-01-27 19:27:53 +00:00
osci.yaml Add Kinetic and Zed support 2022-08-31 18:48:39 +01:00
pip.sh Add xena bundles 2021-09-21 13:58:47 +01:00
README.md Keystone v2 and v3 manual and amulet/bundle testing 2016-08-09 16:49:09 +00:00
rebuild Add xena bundles 2021-09-21 13:58:47 +01:00
rename.sh Update to build using charmcraft 2022-02-01 18:29:11 +00:00
requirements.txt Add Kinetic and Zed support 2022-08-31 18:48:39 +01:00
setup.sh Render paste ini properly and other fixes 2015-12-11 13:43:03 +00:00
test-requirements.txt Add Kinetic and Zed support 2022-08-31 18:48:39 +01:00
tox.ini Add Kinetic and Zed support 2022-08-31 18:48:39 +01:00

Barbican Source Charm

THIS CHARM IS FOR EXPERIMENTAL USE AT PRESENT.

This repository is for the reactive, layered, Barbican source charm. From the wiki 'Barbican is a REST API designed for the secure storage, provisioning and management of secrets such as passwords, encryption keys and X.509 Certificates. It is aimed at being useful for all environments, including large ephemeral Clouds.'

Barbican can be used without an HSM for test purposes.

Plugins

The Barbican charm currently supports the following plugins:

  • charm-barbican-softhsm

However, due to an odd quirk of interelating software issues, barbican + SoftHSM2 + OpenSSL < 1.0.2h is not functionaly due to a missing feature in OpenSSL (EVP_aes_128_wrap_pad specifically).

Thus the plugin interface is currently provided to show how to interface an HSM to the barbican charm.

Creating the primary MKEK and primary HMAC

Barbican (can use|uses) a Master Key Encryption Key (MKEK) scheme to wrap other keys so that in the course of issuing new encryption keys, it does not exhaust the storage capacity of an HSM.

See KMIP MKEK Model Plugin for more details.

Barbican itself can generate the MKEK and HMAC keys and store them in the associated HSM through the use of two actions 'generate-mkek' and 'generate-hmac'.

The names of the keys are stored in the configuration for the service as 'mkek-label' and 'hmac-label'. These default to 'primarymkek' and 'primaryhmac' respectively.

Note that these keys are not recoverable from the HSM. If the HSM has already been configured with these keys then these actions would overwrite the existing key. So only use them for the initial implementation or to change the MKEK and HMAC keys in the HSM.

Use of actions

For juju 1.x:

juju action do generate-mkek

For juju 2.x:

juju run-action generate-mkek

Note that, depending on the HSM, it may only be possible to do this ONCE as the HSM may reject setting up the keys more than once.

Developer Notes

The Barbican charm has to be able to set [crypto] and [xxx_plugin] sections in the barbican-api.conf file. This data comes via the barbican-hsm interface from a charm (probably a subordinate) that provides the interface.

On the barbican-hsm interface the data is provided in the plugin_data() method of the interface (or if it is adapted) in the plugin_data property.

The theory of operation for the crypto plugin is that a local library that supports the PKCS#11 interface that Barbican can talk to locally.

Note(AJK): it is not clear yet how a clustered Barbican can be created with a single HSM backend. It's likely to be a separate piece of hardward with a local library that talks to it.

In order for Barbican to be configured for the example softhsm2 library, the configuration file needs to include the entries:

[crypto]
enabled_crypto_plugins = p11_crypto

[p11_crypto_plugin]
library_path = '/usr/lib/libCryptoki2_64.so'
login = 'catt'
mkek_label = 'primarymkek'
mkek_length = 32
hmac_label = 'primaryhmac' slot_id = <slot_id>

Note that the /var/lib/softhsm/tokens directory HAS to exist as otherwise the softhsm2-util command won't work.