我应该使用 Secrets Manager 来存储客户的 API 密钥吗?

Should I use Secrets Manager for storing customers' API keys?

我正在实施一项服务,要求我使用客户的 API 键呼叫他们的 API。我的客户将在他们的帐户中向我提供他们的 API 密钥。

当我打电话给客户的 API 时,我必须在拨打电话之前取回他们的 API 密钥。由于这些是我客户的 API 密钥,我希望将它们安全保存,因此我正在考虑将它们全部保存在 AWS Secrets Manager 中。我大约有 5,000 名用户(仍在增长),我计划将他们的所有密钥存储到 Secrets Manager 中的一个秘密中。我的应用程序每月向我的客户发出大约几百万次调用 API,它需要以高频率和并发方式检索密钥。

但是,我不确定这是否是 Secrets Manager 的用例类型,因为他们的文档对我来说听起来像是只为应用程序而不是像数据库这样的客户保留秘密信息。同时,将加密密钥存储在数据库中并必须使用 KMS 密钥对其进行解密听起来我最终可能会花费大致相同的成本。

Secrets Manager 是否适用于此类用例来存储客户的敏感信息,例如 API 密钥?如果不是,我应该考虑什么?

50k api 个密钥中的单个密钥将变得非常笨重。假设一个 40 字节的令牌,您正在查看 2mb 的数据 - SSM 的最大数据长度为 4096 字节,除非我弄错了。

对我来说,使用 KMS 生成密钥并使用该密钥加密客户 API 密钥,然后再将它们写入 DynamoDB table(如果您愿意,甚至可以是 RDS)会更有意义) 当你需要使用客户API密钥时,从dynamoDB中获取它,用KMS密钥解密,然后使用它。

如果您想要自动密钥轮换,可以使用 SSM 来加密您用来加密客户端 API 令牌的密钥。您的令牌解密密钥将保持可用,而包装 SSM 条目将使用策略设置的密钥轮换重新加密。

最后,正如上面 Software Engineer 所建议的,有 Vault。