金鑰儲存
目錄:
摘要
問題
我們需要儲存金鑰(secrets),例如密碼、私鑰、認證令牌等。
有些金鑰面向使用者。例如,我們的開發人員希望能夠使用手機查詢某項服務的密碼。
有些金鑰面向系統。例如,我們的持續交付流水線需要能夠查詢我們雲託管的憑據。
決策
面向使用者的金鑰使用 Bitwarden。
面向系統的金鑰使用 Vault by HashiCorp。
狀態
已決定。對出現的新備選方案持開放態度。
詳情
假設
就此目的和我們目前的狀態而言,我們看重面向使用者的便利性,例如好用的移動應用。
我們希望確保在外出時也能快速輕鬆地訪問,例如對於負責值班的系統可靠性工程開發人員。
我們希望能夠在選定的人員(例如團隊)之間共享一些金鑰。
我們並不打算解決單一提供商的問題,例如把所有金鑰專門儲存在 Amazon、Azure 或 Google 上。
我們不想要「記在腦子裡」、「寫在便條上」或「自己想辦法儲存」這類臨時性的做法。
對於這一目的,我們的安全模型可以接受使用受人尊敬的商業現貨(COTS)供應商,例如 SaaS 密碼管理工具。
約束
目前我們想要簡便的東西,也就是說,無需編寫程式碼,無需安裝伺服器,無需做出重大承諾,無需讓所有人統一標準。
立場
我們考慮了:
面向使用者的現成密碼管理器:LastPass、1Password、Bitwarden、Dashlane、KeePass、pass、GPG 等。
面向系統的 COTS 密碼管理器:AWS KMS、Vault by HashiCorp、EnvKey、Secret Server by Thycotic、Devolutions Password Server、Confidant by Lyft。
面向共享的方法:使用共享的 Google 文件、共享的 Slack 頻道或共享的網路資料夾等。
低技術含量的臨時做法,例如靠記憶、寫便條,或依靠每個使用者自己想辦法。
論證
Bitwarden、LastPass、1Password 和 Dashlane 都是商業現貨產品。
對使用者、團隊、組織等提供類似種類的功能。
具有 Windows 和 Mac 的桌面端能力,以及 Android 和 iOS 的移動端能力。
提供適用於 Chrome 和 Firefox 的瀏覽器擴充套件,用於自動填寫表單等。
Bitwarden 比其他產品有兩個優勢:
Bitwarden 是開源的,這意味著其安全性可以接受同行評審,而且該公司受到注重安全的開發者的廣泛讚賞。
軟體從業者的軼事描述顯示,他們明顯更偏愛 Bitwarden 而非其他產品。
一篇典型的優秀文章:https://jcs.org/2017/11/17/bitwarden
一個典型的並排投票網站:https://stackshare.io/stackups/bitwarden-vs-dashlane
我們暫緩考慮 KeyPass、pass、GPG 等,因為它們帶來額外的複雜性。所有這些對技術使用者來說都是不錯的解決方案。對於希望獲得跨系統命令列能力的技術使用者,GPG 看起來尤其出色。
我們暫緩考慮 KMS,因為它存在單一提供商鎖定。
對於面向系統的需求,我們選擇 Vault,因為評價極為正面,而且 HashiCorp 在高品質軟體和支援方面有著出色的業績記錄。
我們否決透過共享文件、共享頻道、共享網路資料夾等進行共享的做法。它們不具備我們想要的安全品質。
我們否決臨時性的低技術做法,因為大家一致認為這不是長遠之路。
影響
開發人員可能需要在兩個地方跟蹤金鑰:面向使用者訪問的 Bitwarden,以及面向系統訪問的 Vault。
相關內容
相關決策
關於選擇哪種 CI/CD 伺服器的決策,必須包含其訪問金鑰的能力證明。
我們將需要決定如何管理金鑰,包括策略、輪換、組織等方面。
相關需求
金鑰將帶有與合規、審計以及人力資源入職/離職相關的需求。
相關製品
我們預計可能會將一些金鑰匯出到環境變數中。
相關原則
易於撤銷。
易於並行,即很容易同時使用多種密碼管理器。
試用成本低,即有免費試用且無需承諾。
備註
評估備註見下文。這些備註都是在各個 DevOps 討論板上的公開評論。
Vault by HashiCorp
Vault 正是你在這裡想要的。
不過不要直接把 Vault 投入生產環境,先在測試環境中搭建起來,因為即使 HashiCorp 的產品很出色,他們的文件也可能相當欠缺。
學習曲線非常陡峭,搭建起來並不簡單。
初始設定有點痛苦。但這非常值得,而且社群對它的支援足夠你應付過去。
文件糟糕透頂,但網上有很多人搭建它的指南,把其中幾篇組合起來你就能得到一套可用的配置。
初始設定需要折騰他們的 helm chart(vault 和 consul)。雖然從技術上講你可以使用許多其他後端,但我真的非常不推薦。如果你沒有大量資料要儲存,後端/consul 可以非常小。
一定要熟悉並習慣使用命令列,因為圖形介面更像是他們企業版的概念驗證/廣告入口。
你不能直接「批次填充」這一點很痛苦。例如,如果你有 5 個欄位,就需要為每個條目手動新增每個欄位。所以並不是為特定類別預先定義欄位,然後為該類別中的所有條目填寫這些欄位,而更像是「每次都要生成所有內容」,在我看來這很麻煩。
你可能還想看看 goldfish,它是 vault 之上的 UI。它讓你的團隊更容易接受 vault。他們也有演示。1. 搭建 consul。2. 搭建指向 consul 的 vault。3. 搭建指向 vault 的 goldfish。3. 設定某個 cron 任務來執行 consul 快照以進行備份。
LastPass
LastPass Teams。我們在用,有自定義範本、ACL,依我看沒有缺什麼。
我在我的組織裡實施了 LastPass,給它打 C+/B-。最近最大的問題是缺乏可靠性。在過去 90 天裡,有好幾次長達數小時保險庫被強制進入離線模式。這對我的組織並不理想,因為我們在 20 多個共享資料夾中儲存了 4,000 多個密碼。可以想象,有這麼多密碼,每天至少會有幾個被更新或新增。如果問題持續超過一兩個小時,我們有災難恢復計劃:一個指令碼每晚對保險庫的 CSV 匯出進行簽名和加密,可以匯入到 keepass 中。
LastPass 出現過未經報告的服務降級:登入「能用」但不拉取站點、管理面板中的某些功能隨機出錯,以及未能為新的頂層共享資料夾正確共享金鑰。我有一個專門的「金鑰推送」/備份使用者,它在每個組裡。通常以該使用者身份登入就能修復任何金鑰共享問題,但在服務降級時則不行,不管狀態頁面怎麼說……
關於整合,如果你有采用最小許可權模型的合理 ACL,整合可以很容易,例如,如果某個使用者對某個條目或資料夾既有讀寫許可權又有隻讀許可權,他們只會獲得只讀許可權。不幸的是,我所在組織的 ACL 並不是最好的,所以由於我們數百條 ACL 之間的依賴關係與最小許可權模型不太匹配,我最終使用了 JSON 配置 API 和約 500 行 Python。我最後獲取了使用者所在的所有 ACL,並做了某種依賴遍歷。
如果你的 ACL 或組結構本來就是按最小許可權來構建的,那麼適用於 Windows 的 AD/LDAP 同步工具會運作良好。
聯絡他們的銷售團隊,他們可以為你提供更長時間的企業版試用。在決定購買之前,務必充分了解它的侷限性。我們經歷了不少成長的陣痛,但除了伺服器端的中斷或受損之外,它一直非常順暢。
Bitwarden
Bitwarden 周邊有不錯的工具(Web 介面、命令列、移動端、桌面端)。可自託管,且相當容易搭建。文件相當不錯,並且是 PrivacyTools 推薦的工具。
EnvKey
https://www.envkey.com/ 是一項 SaaS。非常容易實施、整合和管理。
功能:
保護 API 金鑰和憑據。
讓配置在各處保持同步。
智慧的、端到端加密的配置和金鑰管理。
防止不安全的共享和配置蔓延。
幾分鐘內即可整合。
能力:
在一個地方管理所有應用、環境和團隊的配置與訪問級別。
僅用一個環境變數即可配置任何開發或伺服器環境。
優點:
首頁不錯。
價值主張清晰。
Web 應用視覺效果出色。
範例資料出色,例如 Algolia、AWS、Datadog、GitHub、Stripe 等。
與創始人就公司、介面等聊了 30 分鐘。Dane 聽起來見多識廣,對優缺點很坦誠,是可行的合作伙伴。
這家公司基本上是一家典型的 Y Combinator 公司,只有 1 位創始人。2018 年 1 月融資 12 萬美元。
重點是邁向企業級功能,尤其是從 EnvKey 雲託管轉向本地部署或自帶雲(BYOC)。
一條潛在的前進路徑是先從易用的 EnvKey 開始,然後(稍後或並行)再加入 Vault。
Confidant by Lyft
https://lyft.github.io/confidant/
Confidant 是 Lyft 開發者開發的一項開源金鑰管理服務,以安全的方式提供對金鑰的使用者友好儲存和訪問。
KMS 認證:Confidant 透過使用 AWS KMS 和 IAM,解決了認證中的「先有雞還是先有蛋」問題,允許 IAM 角色生成可由 Confidant 驗證的安全認證令牌。Confidant 還為你的 IAM 角色管理 KMS 授權,使 IAM 角色能夠生成可用於服務間認證的令牌,或在服務之間傳遞加密訊息。
版本化金鑰的靜態加密:Confidant 以僅追加的方式將金鑰儲存在 DynamoDB 中,使用 Fernet 對稱認證加密,為每個金鑰的每個修訂版本生成唯一的 KMS 資料金鑰。
用於管理金鑰的使用者友好 Web 介面:Confidant 提供一個 AngularJS Web 介面,使終端使用者能夠輕鬆管理金鑰、金鑰到服務的對映以及變更歷史。
Devolutions Password Server
https://server.devolutions.net/
保護、管理和監控對特權賬戶和會話的訪問。
一個全面、高度安全的密碼保管庫,讓你控制對特權賬戶的訪問,同時也提升系統管理員對整體網路的可見性,併為終端使用者提供無縫體驗。
功能:集中式組織密碼保管庫、使用者專屬私有保管庫、密碼管理器、憑據注入、Active Directory 整合、基於角色的訪問控制、雙因素認證、企業就緒、IP 限制、管理能力、自動密碼生成器、移動應用訪問、密碼歷史、訪問報告、電子郵件告警。
支援資料加密
支援多種認證方案,包括 LDAP、O365 和本地使用者,並支援來自多個來源的 MFA
多個儲存庫/保管庫,可為多個團隊提供細粒度的訪問控制
現代 Web 介面
用於個人憑據/連線的私有憑據和連線保管庫
適用於 iOS/Android 的移動應用
每個條目的審計日誌,記錄誰/什麼/何時,並可選擇提示訪問原因
可自定義的範本(儘管它們原生支援數百種連線型別)
還有更多功能,以及可同步的 Windows/Mac 胖客戶端(Remote Desktop Manager),極大地擴充套件了選項……一鍵連線
價格也不算太糟——密碼伺服器最多 15 個使用者,每年 500 美元
Secret Server by Thycotic
https://thycotic.com/products/secret-server/
本地部署版本功能:
完全掌控你的端到端安全系統和基礎設施
在你的本地資料中心或你自己的虛擬私有云例項中部署軟體
滿足要求所有資料和系統駐留在本地的法律和監管義務
雲版本功能:
軟體即服務模式,讓你註冊後立即開始使用
隨著你的成長而具備彈性可擴充套件性
由 Azure 提供控制和冗餘,具有 99.9% 的正常執行時間 SLA
使用者反饋:
我們過去用過這個產品。它太容易被繞過了,規則只對聰明人有效。懶惰或愚蠢的使用者很容易在團隊區域把它搞砸。與他們交談時價格是可以協商的。
你可以用 SQL express 和一臺 Win 7 機器來執行它。
便宜。