总体架构图
各个抽象概念的关系图
抽象概念解释
Secrets:
Secrets是需要存储的密钥,可能的形式如:私钥、证书、密码等。
ACL:
除了基于角色的权限控制外,ACL可以提供基于用户访问列表的权限控制。即可以指定哪些用户对该密钥有访问权限。
Containers:
Containers是一个容器,用于存储多个secret引用。当不得不跟踪、访问上百个secret时,container非常有用。
barbican支持3种类型的container:
- Generic
- Certificate
- RSA
每种类型的container应该保存什么类型的secret,有明确的限制。
Generic Containers:
用于存储任意类型的secret。对于secret的类型和存储数量没有任何限制。
Certificate Containers:
用于存储如下类型的secret:
- certificate (如PEM格式的x509证书)
- private_key (可选)
- private_key_passphrase (optional)
- intermediates (optional) (如PEM格式的PKCS7证书链)
RSA Container:
用于存储如下类型的secret:
- RSA public key
- RSA private key
- RSA private key pass phrase
即非对称密钥的公钥、私钥、以及私钥密码。目前只支持RSA算法。用order创建非对称密钥的时候,自动会创建一个该类型的container,并把公钥和私钥放到该container
Orders:
order允许用户请求barbican自己产生secret。并且支持异步生成secret。当希望请求生成多个公私钥对时,非常有用。
order支持如下两种类型:
- symmetric keys 对称密钥
- asymmetric keys 非对称密钥
一个order生成一个对应的secret。
order可以异步生成。
Consumer:
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
barbican的加解密插件系统