将 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_type 是 barbican_key,secret_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 中删除。