PHP - 如何缓存从 AWS KMS Parameter Store 检索到的数据库凭证

PHP - How to cache database credentials retrieved from AWS KMS Parameter Store

我是 运行 一个 PHP 应用程序,它使用用户名和密码连接到 RDS 数据库以向客户端提供数据。 使用 AWS SSM 客户端从 AWS KMS 检索用户名和密码作为加密字符串。 我对 PHP 应用程序的每个请求都执行此操作以打开与数据库的连接。

所以流程看起来像这样

传入请求 -> 从 AWS 检索数据库凭证 -> 打开数据库连接 -> 查询 -> return 数据

在此流程中,每个请求都会发送到 AWS 以获取数据库凭据,使用 KMS 解密安全字符串,最终结果是 KMS 的高使用率导致更高的账单。 它还为每个 API 请求引入了延迟。

我想知道是否有一些 PHP 缓存库可以用来在 EC2 实例上安全地本地存储凭据,这样我就不需要一直获取它了。

我看了很多论坛,我看到有人说把它们存储在 root 之外的文件中,甚至是 root 之外的 .env 也可以,还有一些人说使用 memcache,但是大多数人说缓存凭据是简单的禁止模式。

我知道没有 100% 安全的东西,但是任何有关缓存凭据的建议以及 PHP 正在使用的流行工具是什么,我们将不胜感激。

原来高额账单是由于使用 KMS 解密的安全字符串参数过多造成的。 我将大部分参数转换为普通字符串类型,只保留敏感字符串作为加密类型,从而整体减少了 KMS 的使用。 在 AWS 文档中,我忽略了它指出“Parameter Store 不收取创建 SecureString 参数的费用,但使用 AWS KMS 加密的费用确实适用” 同样对于缓存库,我发现 phpfastcache 真的很容易使用。但是,我决定暂时保持这种方式,因为随着 KMS 使用量的减少,KMS 定价似乎是合理的。

也许您可以将您的凭据存储在一个快速访问的 Redis 实例中,这样您就不会持续访问 KMS 和 SSM Parameter Store 服务,但在那种情况下我建议您将非常低的 TTL 放入Redis 使这些凭据可以在短时间内死亡,以避免任何安全事件。使用此解决方案,您可以实现一个 Singleton 模式,该模式始终从 Redis 请求凭据,如果您没有凭据,则从 SSM 请求它们并临时存储它们以备后用。

** Redis 实例应该与服务器/应用程序有直接信任关系以减少安全事件。