设置:我有一个当前在服务器上手动部署的应用程序。它需要几个凭据(外部服务、令牌和 AES 密钥和 IV 等的客户端机密),我目前已将这些凭据存储在使用gpg
. 每当我重新启动应用程序时,我gpg
都会在控制台中解锁 -key,然后服务将从应用程序脚本中再次解密文件(gpg-agent
将密码短语保留在内存中一段有限的时间)并通过管道解析它们。
这种方法的优点是gpg
访问它们所需的凭据和-passphrase 都不会持久保存到磁盘,而只保存在内存中。因此,即使具有完全的 root 访问权限,也无法恢复凭据。gpg
唯一的机会是在-key 保持解锁的短时间内获得访问权限。
缺点是(a)没有其他用户可以启动服务(除非我们共享我的帐户)和(b)应用程序不能通过任何自动方式启动。
github上有一个creds项目,和我正在做的类似,但仍然存在上述缺点。可以使用多个gpg
密钥对文件进行加密,然后尝试使用所有密钥对其进行解密,直到一个成功。
问题:有什么更好的方法来处理以下凭据:(a) 多个用户无需共享密钥或帐户即可访问,(b) 可由 CI/CD 系统访问(每次部署时我都没有控制台), (c) 只将密码数据保存在内存中?具有多个键的“解决方法”gpg
看起来像一个复杂的 hack,并且不适用于 CI/CD 系统。
我将讨论机密而不是凭据,因为您可能还想保护其他敏感信息。您的问题是否专门针对 CI/CD 系统并不重要,无论我们是在谈论使用 X.509 证书进行身份验证、保存数据库凭据还是保护构建代理的访问令牌,问题都是一样的。
没有规范的方法来处理这个问题,因为应用程序和组织的需求在什么构成秘密以及如何处理它们方面存在差异。某些应用程序可能只提供文件存储秘密的其他方式。
一些应用程序在磁盘上加密机密,但由于它们通常必须是对称的,这或多或少是装饰性的。
所以,你可以做什么?
您的第一道防线是您的操作系统的 DAC(自主访问控制)和 MAC(强制访问控制)——如果我们谈论的是 Linux,POSIX 权限是 DAC,而 LSM(如 App Armor、SELinux 或 GRSecurity)是 MAC。
根据CIS或DISA STIG等适当标准审核您的操作系统。
想到使用HSM或OpenPGP 智能卡来存储用于加密磁盘上的机密的 PGP 密钥。像这样的设备保证密钥永远不会离开硬件。
请记住,没有单一的措施可以保证 HSM 中的密钥安全 - 物理访问仍然会危及它们。硬件密钥存储设备必须与物理安全性和适当的操作程序相结合,以加强其安全性。
检查主要浏览器的根 CA 策略(Chrome、Firefox、Edge/IE)。他们强制使用硬件加密设备以及如何操作它们以及您必须通过哪些审核的一些限制和规则。