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

Car*_*ven 3 amazon-web-services secret-key aws-secrets-manager

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

当我调用客户的 API 时,我必须在调用之前检索他们的 API 密钥。由于这些是我客户的 API 密钥,并且我希望安全地保存它们,因此我正在考虑将它们全部保存在 AWS Secrets Manager 中。我大约有 5,000 个用户(仍在增长),我计划将他们的所有密钥存储到 Secrets Manager 中的单个密钥中。我的应用程序每月对客户 API 进行大约数百万次调用,并且需要以高频率和并发性检索密钥。

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

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

mcf*_*gan 5

单个秘密中的 50k api 密钥将变得非常难以处理。假设有一个 40 字节的令牌,您将看到 2mb 的数据 - SSM 的最大数据长度为 4096 字节,除非我弄错了。

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

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

最后,正如软件工程师上面所建议的,还有 Vault。