PHP-如何缓存从AWS KMS参数存储检索到的数据库凭据

PHP-如何缓存从AWS KMS参数存储检索到的数据库凭据,php,amazon-web-services,amazon-kms,Php,Amazon Web Services,Amazon Kms,我正在运行一个PHP应用程序,它使用用户名和密码连接到RDS数据库,以便向客户端提供数据。 用户名和密码使用AWS SSM客户端作为加密字符串从AWS KMS中检索。 我对PHP应用程序的每个请求都这样做,以打开与数据库的连接 所以流看起来像这样 传入请求->从AWS检索数据库凭据->打开数据库连接->查询->返回数据 在这个流中,每个请求都发送到AWS以获取DB凭据,安全字符串使用KMS解密,最终结果是KMS的高使用率导致更高的账单。 它还为每个API请求引入延迟 我想知道是否有一些PHP缓存

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

所以流看起来像这样

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

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

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

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


我知道没有100%安全这样的东西,但是任何关于缓存凭证的建议,以及目前PHP使用的流行工具,都将受到赞赏。

结果表明,高账单是由于有太多使用KMS进行解密的安全字符串参数造成的。 我将大多数参数转换为普通字符串类型,只留下敏感字符串作为加密类型,从而总体上减少了KMS的使用。 在AWS文档中,我忽略了其中的内容:“创建SecureString参数不收取参数存储费用,但使用AWS KMS加密的费用确实适用”
同样对于缓存库,我发现phpfastcache非常易于使用。但是,由于KMS的使用量减少,KMS的定价似乎合理,因此我决定暂时保持原样。

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


**redis实例应与服务器/应用程序建立直接信任关系,以减少安全事件。

RDS代理的使用如何?这样,您就不必为每一个新请求都重新连接了?谢谢您的推荐。我试过Redis,效果很好。我喜欢这样一个事实,即缓存的数据保留在内存中,而不是保存在任何地方。你能给我一些关于黑客如何访问Redis以获取缓存数据的想法/建议吗?我的服务器位于ALB后面,不向公众开放。我假设他们需要进入服务器才能访问Redis,但如果是这样的话,他们还是可以运行SSM来获取任何数据?那么,在我的例子中,ReDIS是相当安全的吗?你好,例如,如果你的整个解决方案是在AWS上,黑客的一个非常真实的攻击形式是黑客窃取凭据并连接到AWS控制台,黑客无法从攻击向量中访问,因为他们不能拥有.PEM文件,但是,如果您的Redis服务没有经过身份验证,它可能会创建一个Lambda/Ec2服务,连接到Redis并获取它承载的所有信息。我知道这听起来有点偏执,但如果你的解决方案是针对一家大公司,你就会知道这是经常发生的事情。