将 VIM 凭据保存到 Barbican

概述

本文档展示了如何在 devstack 环境中使用 barbican 保存 vim 密钥来操作 vim。

简要的代码流程如下:

在创建 VIM 时:我们使用 fernet 加密 VIM 密码,然后使用 tacker.conf 中配置的 tacker 服务租户将 fernet 密钥保存到 barbican 中作为 secret。 barbican 将返回 secret_uuid。然后将加密后的密码保存到 vim db 的字段 password 中,并将 secret uuid 保存到 vim db 字段 secret_uuid 中。

tacker.conf 中配置的 tacker 服务租户如下:

[keystone_authtoken]
memcached_servers = localhost:11211
signing_dir = /var/cache/tacker
cafile = /opt/stack/data/ca-bundle.pem
project_domain_name = <DOMAIN_NAME>
project_name = service
user_domain_name = <DOMAIN_NAME>
username = <TACKER_USER_NAME>
password = <TACKER_SERVICE_USER_PASSWORD>
auth_url = http://127.0.0.1/identity
auth_type = password

在检索 vim 密码时:我们使用 tacker.conf 中配置的 tacker 服务租户和 secret_uuid 从 barbican 获取 fernet 密钥,并使用 fernet 解码 password

在删除 VIM 时:我们使用 tacker.conf 中配置的 tacker 服务租户,通过 vim db 中的 secret_uuid 从 barbican 删除 secret。

如何测试

我们需要在 devstack localrc 文件中启用 barbican

enable_plugin barbican https://opendev.org/openstack/barbican
enable_plugin tacker https://opendev.org/openstack/tacker
USE_BARBICAN=True

注意

请确保在启用 tacker 插件之前启用 barbican 插件。 我们设置 USE_BARBICAN=True 来使用 barbican。

创建一个 vim 并验证它是否有效

$ . openrc-admin.sh
$ openstack project create test
$ openstack user create --password a test
$ openstack role add --project test --user test admin

$ cat vim-test.yaml
auth_url: 'http://127.0.0.1/identity'
username: 'test'
password: 'Passw0rd'
project_name: 'test'
project_domain_name: 'Default'
user_domain_name: 'Default'

$ cat openrc-test.sh
export LC_ALL='en_US.UTF-8'
export OS_NO_CACHE='true'
export OS_USERNAME=test
export OS_PASSWORD=Passw0rd
export OS_PROJECT_NAME=test
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://127.0.0.1/identity
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export OS_NETWORK_API_VERSION=2

$ source openrc-test.sh
$ openstack secret list

$ openstack vim register --config-file vim-test.yaml vim-test
Created a new vim:
+----------------+---------------------------------------------------------+
| Field          | Value                                                   |
+----------------+---------------------------------------------------------+
| auth_cred      | {"username": "test", "password": "***", "project_name": |
|                | "test", "user_domain_name": "Default", "key_type":      |
|                | "barbican_key", "secret_uuid": "***", "auth_url":       |
|                | "http://127.0.0.1/identity/v3", "project_id": null,     |
|                | "project_domain_name": "Default"}                       |
| auth_url       | http://127.0.0.1/identity/v3                            |
| created_at     | 2017-06-20 14:56:05.622612                              |
| description    |                                                         |
| id             | 7c0b73c7-554b-46d3-a35c-c368019716a0                    |
| is_default     | False                                                   |
| name           | vim-test                                                |
| placement_attr | {"regions": ["RegionOne"]}                              |
| status         | ACTIVE                                                  |
| tenant_id      | 28a525feaf5e4d05b4ab9f7090837964                        |
| type           | openstack                                               |
| updated_at     |                                                         |
| vim_project    | {"name": "test", "project_domain_name": "Default"}      |
+----------------+---------------------------------------------------------+

$ openstack secret list
+-------------------------------------------+------+---------------------------+--------+-------------------------------------------+-----------+------------+-------------+------+------------+
| Secret href                               | Name | Created                   | Status | Content types                             | Algorithm | Bit length | Secret type | Mode | Expiration |
+-------------------------------------------+------+---------------------------+--------+-------------------------------------------+-----------+------------+-------------+------+------------+
| http://127.0.0.1:9311/v1/secrets/d379f561 | None | 2017-06-20T14:56:06+00:00 | ACTIVE | {u'default': u'application/octet-stream'} | None      | None       | opaque      | None | None       |
| -7073-40ea-822d-9d7bcb594e1a              |      |                           |        |                                           |           |            |             |      |            |
+-------------------------------------------+------+---------------------------+--------+-------------------------------------------+-----------+------------+-------------+------+------------+

我们可以发现 auth_cred 中的 key_typebarbican_keysecret_uuid 存在并被屏蔽,并且 fernet 密钥作为 secret 保存到 barbican 中。

现在我们创建一个 vnf 来验证它是否有效

$ openstack vnf create --vnfd-template vnfd-sample.yaml \
  --vim-name vim-test --vim-region-name RegionOne vnf-test
Created a new vnf:
+----------------+-------------------------------------------------------+
| Field          | Value                                                 |
+----------------+-------------------------------------------------------+
| created_at     | 2017-06-20 15:08:43.267694                            |
| description    | Demo example                                          |
| error_reason   |                                                       |
| id             | 71d3eef7-6b53-4495-b210-78786cb28ba4                  |
| instance_id    | 08d0ce6f-69bc-4ff0-87b0-52686a01ce3e                  |
| mgmt_ip_address|                                                       |
| name           | vnf-test                                              |
| placement_attr | {"region_name": "RegionOne", "vim_name": "vim-test"}  |
| status         | PENDING_CREATE                                        |
| tenant_id      | 28a525feaf5e4d05b4ab9f7090837964                      |
| updated_at     |                                                       |
| vim_id         | 0d1e1cc4-445d-41bd-b3e9-739acb987231                  |
| vnfd_id        | dc68ccfd-fd7c-4ef6-8fed-f097d036c722                  |
+----------------+-------------------------------------------------------+

$ openstack vnf delete vnf-test

我们可以发现 vnf 创建成功。

现在我们删除 vim 以验证 secret 是否可以被删除。

$ openstack vim delete vim-test
All vim(s) deleted successfully
$ openstack secret list

我们可以发现 secret 已从 barbican 中删除。