簡體   English   中英

如何管理微服務/容器/雲環境中的秘密?

[英]How to manage secrets in a Microservice / Container / Cloud environment?

微服務和雲是一件事。 每個人都在談論和寫作。 就我個人而言,我正在考慮這個話題:如何利用它來獲益? 有哪些可能的挑戰? 這怎么能加速日常發展? 以及如何管理所有事情? 幾天之后困擾我的一個問題是“如何管理微服務/雲環境中的秘密?”。

想象一家擁有150名軟件工程師和各種團隊的公司。 每個團隊都在創建一個軟件,每個服務都需要各種秘密(API密鑰,密碼,SSH密鑰等等)。 “舊時尚”方式是以ini / yaml / txt格式創建一些配置文件並從中讀取。 12個因子應用程序說:按照env vars進行。

可以為每台機器設置Env變量,也可以將配置文件放在那里。 如果你手持一台機器並且部署由一些系統管理員完成,這就有效。 一般規則說:“不要在Git回購中存儲秘密。”

現在,新的世界進入了。團隊負責他們自己生產的應用程序。 它們應該由團隊部署和運行。 所以我們公司正在轉向集裝箱和自助服務方式(例如Mesos和Marathon或Kubernetes)。

當然,Dockerfiles也可以設置env變量。 是的,您可以在構建期間將配置文件添加到Docker容器中。 但有了這個,每個人都可以訪問秘密(例如來自其他團隊)。 沒有人知道誰使用這個秘密並做了一些危險的事情。

您還希望對Dockerfiles進行版本化。 您希望在Marathon上運行的應用程序也應該進行版本化(Git或其他)(並由REST API應用)。 那么在哪里存儲和管理這個容器/應用程序的所有秘密? 因為使用Swarm和Machine(對於Docker),Mesos和Marathon(也可用於Docker)或Kubernetes等調度程序框架,您不知道應用程序將在何處運行。 這將安排在幾台機器上。 並且大多數此類工具都沒有身份驗證(默認情況下,當然可以通過Nginx代理或其他方式添加)。

管理機密的一個想法是使用像Vault這樣的工具。 但我從來沒有在應用程序中看到“原生”支持。 Blackbox也是如此 我不知道配置管理如何解決這個問題。 我知道Chef支持加密的數據庫,但是不能使用Chef來設置/構建Docker容器。

您如何在微服務/容器/雲環境中與多名工程師一起管理多個團隊環境中的秘密?

有幾種解決方案。

首先, 不要把你的秘密放入圖像中。 你已經意識到,這只是個壞主意。 如果您不在構建時添加秘密,則必須在運行時執行此操作。 這給我們留下了一些選擇:

  • 使用12 Factor App建議的環境變量。 然后,您需要編寫一個腳本,在容器啟動時使用這些變量的值填充配置文件。 這有效,但我不是很喜歡它,因為環境變量很容易泄露(它們可以在鏈接容器和docker inspect看到,並且通常包含在bug報告中)。 另見Summon

  • 使用卷。 只需在運行時安裝配置文件和秘密。 這有效,但確實意味着你有一個文件,其中包含主機上的秘密。 當您不知道容器將在哪個主機上運行時,例如使用Swarm和Mesos等框架時,這會變得更加復雜。

  • 使用安全的k / v商店,例如Vault / Keywhiz 正如您所指出的,您需要執行一些腳本來將值傳入應用程序(與env變量一樣)。 您還需要以某種方式對k / v存儲進行身份驗證(您可能需要查看KeywhizVault的卷驅動程序,或使用通過env var傳遞的一次性令牌)。

Kubernetes已經擁有相當高級的秘密支持 ,我希望看到其他框架采用自己的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM