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

问题描述

我正在实施一项服务,该服务要求我使用客户的 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 表(或什至 RDS,如果您愿意)之前使用该密钥加密它们会更有意义当您需要使用客户 API 密钥时,从 dynamoDB 中获取它,用 KMS 密钥解密它,然后使用它。

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

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