我正在实现一个服务,该服务要求我使用客户的API密钥调用客户的API。我的客户将在他们的帐户中向我提供他们的API密钥。
当我调用客户的API时,我必须在调用之前检索他们的API密钥。由于这些是我的客户的API密钥,我希望它们被安全保存,我正在考虑将它们全部保存在AWS秘密管理器中。我大约有5,000个用户(仍在增长),我计划将他们的所有密钥存储在Secrets Manager中的单个密钥中。我的应用程序每个月要对我的客户API进行数百万次调用,它需要以高频率和并发性检索键。
然而,我不确定这是否是秘密管理器的用例,因为他们的文档听起来就像它只是为了为应用程序保存秘密信息,而不是像数据库那样为客户。与此同时,在数据库中存储加密密钥并必须使用KMS密钥对其进行解密,听起来可能最终会产生大致相同的成本。
秘密管理器是否适用于这样一个用例,用于存储客户的敏感信息,如API密钥?如果没有,我应该考虑什么?
在单个秘密中使用50k个API密钥将会非常笨拙。假设一个40字节的令牌,您正在查看2mb的数据- SSM的最大数据长度值为4096字节,除非我弄错了。
对我来说,在将客户API密钥写入DynamoDB表(甚至RDS)之前,用KMS生成一个密钥并使用该密钥加密客户API密钥更有意义。当您需要使用客户API密钥时,从DynamoDB获取它,用KMS密钥解密,然后使用它。
如果您想要自动密钥轮换,可以使用SSM来加密用于加密客户端API令牌的密钥。您的令牌解密密钥将保持可用,而包装SSM条目将使用策略设置的密钥轮换重新加密。
最后,正如Software Engineer上面所建议的,还有Vault。