【问题标题】:Should I use Secrets Manager for storing customers' API keys?我应该使用 Secrets Manager 来存储客户的 API 密钥吗?
【发布时间】:2021-03-03 17:51:49
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这听起来更像是 Hashicorp Vault 的工作,但我认为您可以使用 ASM 来完成这项工作,而无需在生产中运行 Vault 的额外麻烦,假设您不需要 Vault 的其他好处,例如tls 和动态数据库凭据的动态证书,以及细粒度的访问控制。
  • @SoftwareEngineer AWS 生态系统中有类似的服务吗?
  • Hashicorp Vault 是其领域的卓越工具。任何地方都没有类似的东西。没有其他东西可以接近。如果您对秘密很认真,那么您应该使用 Vault。其他人只是在玩游戏,等着被黑。不,我不为 hashcorp 或他们的合作伙伴之一工作 :) 但我曾与 Vault 合作过,它是同类中最好的。

标签: amazon-web-services secret-key aws-secrets-manager


【解决方案1】:

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

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

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

最后,正如上面Software Engineer 建议的那样,有保险柜。

【讨论】:

  • 抱歉,我之前的号码打错了。我现在有大约 5k,还没有 50k。但我可以想象随着它的增长,它可能会达到更高的数字。所以我可以想象你在说什么。您提到使用带有密钥轮换的 SSM,但是如果我使用 Key A 加密了我的 API 令牌,然后它被轮换到 Key B,那么我如何仍然能够解密令牌,因为密钥现在不同了?跨度>
  • @Carven SSM 有版本控制。 AWS 将始终返回由其相应密钥解密的最新版本,除非您请求之前的版本。 SSM 透明地处理密钥轮换,因此您不必担心。
猜你喜欢
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 2019-02-15
  • 2021-10-29
  • 2020-11-23
  • 2021-09-18
  • 2020-09-29
  • 1970-01-01
相关资源
最近更新 更多