问题描述
我正在实施一项服务,该服务要求我使用客户的 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。