整體架構圖
各個抽象概念的關係圖
抽象概念解釋web
Secrets:
Secrets是須要存儲的密鑰,可能的形式如:私鑰、證書、密碼等。
ACL:
除了基於角色的權限控制外,ACL能夠提供基於用戶訪問列表的權限控制。便可以指定哪些用戶對該密鑰有訪問權限。
Containers:
Containers是一個容器,用於存儲多個secret引用。當不得不跟蹤、訪問上百個secret時,container很是有用。
barbican支持3種類型的container:
每種類型的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的加解密插件系統