0

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

所以流程看起来像这样

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

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

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

我阅读了很多论坛,我看到有些人说将它们存储在 root 之外的文件中,甚至 .env 之外的 root 也可以,其他人说使用 memcache,但大多数人说缓存凭证只是一种不可行的模式。

我知道没有 100% 安全这样的事情,但是任何关于缓存凭据的建议以及用于 PHP 的流行工具是什么都将不胜感激。

4

2 回答 2

0

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

于 2021-04-04T05:50:10.990 回答
0

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

** redis 实例应该与服务器/应用程序有直接的信任关系,以缓解安全事件。

于 2021-04-06T05:30:59.963 回答