Architecture Decision Record

Active theme: Light

← 决策记录例子

机密存储

目录:

摘要

问题

阿拉需要存储机密,比方密码、私钥、身份认证令牌等等。

有眼机密是面向用户个。比方,阿拉个开发者想能够用手机查一个服务个密码。

有眼机密是面向系统个。比方,阿拉个持续交付流水线需要能够查找阿拉云托管个凭据。

决策

面向用户个机密用 Bitwarden

面向系统个机密用 Vault by HashiCorp。

状态

已决定。对出现个新备选方案,阿拉保持开放。

详情

假设

对迭个目的,以及阿拉现在个状态,阿拉看重面向用户个便利,比方好用个移动应用。

  • 阿拉想确保随时随地快速又容易访问,比方做待命系统可靠性工程个开发者。

  • 阿拉想能够辣选定个人当中分享一眼机密,比方一个团队。

阿拉勿是想针对单一提供商来解决,比方拿所有机密完全存辣 Amazon 或者 Azure 或者 Google 上。

阿拉勿想要“记辣脑子里”或者“写辣便条上”或者“自家想办法存”迭类临时应付个办法。

阿拉对迭个目的个安全模型,可以接受用备受尊重个 COTS 供应商,比方 SaaS 密码管理工具。

限制

现在阿拉想要容易个东西,也就是勿需要写代码、勿需要装服务器、勿需要做重大承诺、勿需要让所有人侪标准化。

立场

阿拉考虑过:

  1. 面向用户、现成个密码管理器:LastPass、1Password、Bitwarden、Dashlane、KeePass、pass、GPG 等等。

  2. 面向系统、COTS 个密码管理器:AWS KMS、Vault by HashiCorp、EnvKy、Secret Server by Thycotic、Devolutions Password Server、Confidant by Lyft。

  3. 面向分享个办法:用共享个 Google 文档,或者共享个 Slack 频道,或者共享个网络文件夹等等。

  4. 低技术含量个临时办法,比方记辣脑子里、写便条,或者靠每个用户自家想办法。

论据

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 服务器个决策,必须包括访问机密个能力证明。

阿拉需要决定哪能管理机密,包括策略、轮换、组织等等。

相关需求

机密会有合规、审计,还有 HR 入职/离职个相关需求。

相关工件

阿拉预期可能会拿一眼机密导出到环境变量。

相关原则

容易撤销。

容易并行,也就是容易同时用各种密码管理器。

试用成本低,也就是有免费试用,呒没承诺。

备注

评估备注辣迭里。备注全部是各种 devops 讨论区上个公开评论。

Vault by HashiCorp

Vault 正是侬辣迭搭要个东西。

勿过勿要光拿 Vault 丢进生产环境,先辣测试环境里搭起来,因为即使 HashiCorp 个产品很棒,伊拉个文档可能蛮欠缺。

学习曲线非常陡,搭起来勿是小事。

最初个设置有点痛苦。勿过非常值得,而且社区个支持足够侬应付过去。

文档糟糕,勿过网上有许多人搭起来个指南,侬拿其中几个拼起来,就会有一套能运行个设置。

最初个设置需要摆弄伊拉个 helm chart(vault 搭 consul)。虽然技术上侬可以用许多其他后端,勿过我真个真个勿推荐。要是侬呒没一大堆数据要存,后端/consul 可以非常非常小。

一定要习惯/熟悉使用 CLI,因为 GUI 更加像是伊拉企业版个概念验证/广告门户。

勿能直接“填满”伊,迭点是个痛苦。比方要是侬有 5 个字段,侬必须对每个条目手工加每个字段。所以勿像是侬为某个类别预先定义字段,再对迭个类别里所有条目填迭眼字段,而更加像是“侬每趟侪生成所有东西”,(我觉得)迭是个麻烦事体。

侬可能也想看看 goldfish,作为 vault 之上个 UI。伊让侬个团队更加容易接受。伊拉也有演示。1. 搭起 consul。2. 搭起指向 consul 个 vault。3. 搭起指向 vault 个 goldfish。3. 设置一个定时任务,跑 consul snapshot 做备份。

LastPass

LastPass Teams。阿拉辣用,有自定义模板、ACL,依我看呒没缺啥。

我辣我个组织里实施了 LastPass,给伊打 C+/B-。最近最大个问题是缺乏可靠性。过去 90 日里,有好几个钟头保险库被迫进入离线模式。迭对我个组织勿理想,因为字面上,有 4,000 多个密码存辣 20 多个共享文件夹里。可以想象,密码迭能多,每日起码有几个被更新或者新增。要是问题持续超过一两个钟头,阿拉有灾难恢复计划:一个脚本每夜签名并且加密保险库个 CSV 转储,可以导入 keepass。

LastPass 出现过未报告个服务降级小故障:登录“管用”,却拉勿出站点,管理面板里一眼功能随机坏掉,还有对新个顶层共享文件夹勿能正确分享密钥。我有一个特定个“密钥推送”/备份用户,辣每个组里侪有。通常用迭个用户登录可以修复任何密钥分享问题,勿过服务降级个辰光就勿行,勿管状态页面上讲啥……

讲到集成,要是侬有符合最小权限模型个合适 ACL,会容易,比方要是一个用户对一个条目或者文件夹既有读写权限又有只读权限,伊只会得到只读权限。可惜我组织个 ACL 勿是最好个,所以最后我用了 JSON 配置 API 搭大约 500 行 python,因为阿拉几百个 ACL 个依赖性质,搭最小权限模型对勿上。我最后拿一个用户所在个所有 ACL 取出来,做某种依赖遍历。

要是侬个 ACL 或者组结构已经是按最小权限结构建个,Windows 个 AD/LDAP 同步工具会运行得很好。

联系伊拉个销售团队,伊拉可以给侬安排更加长个企业版试用。扣扳机之前一定要完全了解伊个局限。阿拉碰着勿少成长个烦恼,勿过除了服务器端个中断或者受损之外,一直极其顺畅。

Bitwarden

Bitwarden 周围有蛮好个工具(WebUI、CLI、移动端、桌面端)。可以自托管,搭起来相当容易。文档相当好,也是 PrivacyTools 推荐个工具。

EnvKey

https://www.envkey.com/ 是一个 saas。实施、集成、管理侪非常容易。

功能:

  • 保护 API 密钥搭凭据。

  • 让配置辣各处保持同步。

  • 智能个、端到端加密个配置搭机密管理。

  • 防止不安全个分享搭配置蔓延。

  • 几分钟就能集成。

能力:

  • 辣一个地方管理所有应用、环境搭团队个配置搭访问级别。

  • 只用一个环境变量,就能配置任何开发或者服务器环境。

优点:

  • 主页好。

  • 价值主张清爽。

  • 视觉上出色个 Web 应用。

  • 出色个示例数据,比方 Algolia、AWS、Datadog、GitHub、Stripe 等等。

  • 搭创始人谈了 30 分钟,聊公司、UI 等等。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 UI

  • 个人凭据/连接个私人凭据搭连接保险库

  • 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 机器来跑伊。

  • 便宜。