OpenStack 密钥管理器(Barbican)是一个用于管理和保护敏感数据的工具。它的主要功能是存储、生成和分发加密密钥、证书和其他敏感信息。在计算机领域中,密钥是用于加密和解密数据的重要组成部分。加密可以帮助保护数据的机密性,确保只有授权的用户能够访问和解读数据。
然而,密钥的管理和保护是一个复杂的任务,因为密钥本身也是敏感的信息,需要保证其机密性和完整性。Barbican 提供了一个集中化的密钥管理和保护解决方案,以帮助组织更好地管理密钥。
它提供了以下功能:
Secrets是需要存储的密钥,可能的形式如:私钥、证书、密码等。
除了基于角色的权限控制外,ACL可以提供基于用户访问列表的权限控制。即可以指定哪些用户对该密钥有访问权限。
Containers是一个容器,用于存储多个secret引用。当不得不跟踪、访问上百个secret时,container非常有用。
barbican支持3种类型的container:
每种类型的container应该保存什么类型的secret,有明确的限制。
用于存储任意类型的secret。对于secret的类型和存储数量没有任何限制。
Certificate Containers 用于存储如下类型的secret:
用于存储如下类型的secret:
即非对称密钥的公钥、私钥、以及私钥密码。目前只支持RSA算法。用order创建非对称密钥的时候,自动会创建一个该类型的container,并把公钥和私钥放到该container。
order允许用户请求barbican自己产生secret。并且支持异步生成secret。当希望请求生成多个公私钥对时,非常有用。
order支持如下两种类型:
一个order生成一个对应的secret,order可以异步生成。
consumer可以把一组用户或服务注册给container,表明这组用户或服务对该container感兴趣。
该设计的初衷是,当一个container被删除时,所有的consumer应该被通知该事件。
barbican除了启动api web 服务之外,还会默认启动两个消息队列的server:
service barbican-keystone-listener start/stop
service barbican-worker start/stop
#启动流程
/etc/init.d/barbican-keystone-listener -> /usr/bin/barbican-keystone-listener -> barbican.cmd.keystone_listener -> main
/etc/init.d/barbican-worker -> /usr/bin/barbican-worker -> barbican.cmd.worker -> main
作用
barbican-keystone-listener
#监听keystone发出的事件,执行相应的操作。目前只有一个功能,即捕获keystone删除project的事件,然后删除对应project下的资源(container、secret等)
barbican-worker
#监听order操作的异步事件,执行相应的操作。如创建密钥等。事件源来自order api
在安装和配置密钥管理器服务之前,您必须创建数据库、服务凭证和 API 端点
①连接数据库
[root@controller ~]# mysql -uroot -p000000
②创建barbican
数据库
MariaDB [(none)]> CREATE DATABASE barbican;
③授权
MariaDB [(none)]> GRANT ALL PRIVILEGES ON barbican.* TO 'barbican'@'localhost' IDENTIFIED BY '000000';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON barbican.* TO 'barbican'@'%' IDENTIFIED BY '000000';
④退出数据库
[root@controller ~]# source admin-openrc.sh
①创建barbican
用户
[root@controller ~]# openstack user create --domain default --password 000000 barbican
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 7d982c41976147c6a0b0d8339c408acd |
| name | barbican |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
②admin
为用户添加角色barbican
[root@controller ~]# openstack role add --project service --user barbican admin
③创建creator
角色
[root@controller ~]# openstack role create creator
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | None |
| domain_id | None |
| id | 3589b190b9ff4ef582a0417ba0f055e6 |
| name | creator |
| options | {} |
+-------------+----------------------------------+
④creator
为用户添加角色barbican
:
[root@controller ~]# openstack role add --project service --user barbican creator
⑤创建barbican服务实体
[root@controller ~]# openstack service create --name barbican --description "Key Manager" key-manager
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Key Manager |
| enabled | True |
| id | 623e7b3cb14e4bffaaeff7424950719e |
| name | barbican |
| type | key-manager |
+-------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne key-manager public http://controller:9311
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 00a78500310445bd8f728884d0acebac |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 6ba9579e9acd449a904327c0cd6efac8 |
| service_name | barbican |
| service_type | key-manager |
| url | http://controller:9311 |
+--------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne key-manager internal http://controller:9311
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 8a0a51041d494daea036b40fd840cc17 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 6ba9579e9acd449a904327c0cd6efac8 |
| service_name | barbican |
| service_type | key-manager |
| url | http://controller:9311 |
+--------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne key-manager admin http://controller:9311
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 71d5a7a9b394408c945d209fc55552d1 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 6ba9579e9acd449a904327c0cd6efac8 |
| service_name | barbican |
| service_type | key-manager |
| url | http://controller:9311 |
+--------------+----------------------------------+
[root@controller ~]# yum install openstack-barbican-api cryptsetup -y
编辑/etc/barbican/barbican.conf
文件并完成以下操作:
在[DEFAULT]
部分中
[DEFAULT]
sql_connection = mysql+pymysql://barbican:000000@controller/barbican
transport_url = rabbit://openstack:000000@controller
bind_host = 0.0.0.0
bind_port = 9311
host_href = http://controller:9311
log_file = /var/log/barbican/api.log
在[keystone_authtoken]
部分中
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = barbican
password = 000000
在[oslo_policy]
部分中
[oslo_policy]
policy_file = /etc/barbican/policy.json
policy_default_rule = default
在[secretstore]
部分中
[secretstore]
namespace = barbican.secretstore.plugin
enabled_secretstore_plugins = store_crypto
在[crypto]
部分中
[crypto]
namespace = barbican.crypto.plugin
enabled_crypto_plugins = simple_crypto
在[simple_crypto_plugin]
中
[simple_crypto_plugin]
kek = 'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY='
[root@controller ~]# su -s /bin/sh -c "barbican-manage db upgrade" barbican
[root@controller ~]# systemctl restart openstack-barbican-api && systemctl enable openstack-barbican-api
[root@controller ~]# source admin-openrc.sh
[root@controller ~]# openstack secret store --name secret01 --payload secretkey
+---------------+------------------------------------------------------------------------+
| Field | Value |
+---------------+------------------------------------------------------------------------+
| Secret href | http://controller:9311/v1/secrets/f9fa0edf-c2b3-4482-818a-7418c7226f66 |
| Name | secret01 |
| Created | None |
| Status | None |
| Content types | None |
| Algorithm | aes |
| Bit length | 256 |
| Secret type | opaque |
| Mode | cbc |
| Expiration | None |
+---------------+------------------------------------------------------------------------+
获取一个指定密钥的信息
[root@controller ~]# openstack secret get http://controller:9311/v1/secrets/f9fa0edf-c2b3-4482-818a-7418c7226f66
+---------------+------------------------------------------------------------------------+
| Field | Value |
+---------------+------------------------------------------------------------------------+
| Secret href | http://controller:9311/v1/secrets/f9fa0edf-c2b3-4482-818a-7418c7226f66 |
| Name | secret01 |
| Created | 2023-07-02T10:43:36+00:00 |
| Status | ACTIVE |
| Content types | {u'default': u'text/plain'} |
| Algorithm | aes |
| Bit length | 256 |
| Secret type | opaque |
| Mode | cbc |
| Expiration | None |
+---------------+------------------------------------------------------------------------+
获取一个指定密钥的明文内容
[root@controller ~]# openstack secret get http://controller:9311/v1/secrets/f9fa0edf-c2b3-4482-818a-7418c7226f66 --payload
+---------+-----------+
| Field | Value |
+---------+-----------+
| Payload | secretkey |
+---------+-----------+
参考文章:https://www.cnblogs.com/tian-jiang- ming/p/8718319.html https://blog.csdn.net/ qq_52089863/article/details/131503907