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