【问题标题】:AWS System Manager Parameter Store vs Secrets Manager vs Environment Variation in Lambda, when to use whichAWS System Manager Parameter Store vs Secrets Manager vs Lambda 中的环境变化,何时使用哪个
【发布时间】:2020-11-23 20:57:55
【问题描述】:
遇到了一些我有些困惑的具体用例:
- 大量免费的公共 API 密钥。使用带有加密的 lambda 环境变量,其他开发人员/管理员仍然可以直接在 lambds 控制台中公开他们的明文值。应该改用 Parameter Store 吗?
- 第三方平台的登录凭据。我假设 Secrets Manager 是唯一的选择?
- 数据库连接字符串。秘密经理?以 0.40 美元/秘密/月的价格计算,该账单将增加数百个数据库用于简单地存储凭据。
【问题讨论】:
标签:
amazon-web-services
environment-variables
aws-secrets-manager
【解决方案1】:
对于存储任何凭证,您有三个 AWS 托管选择:
Lambda 环境变量
这些将通过 Lambda 服务直接传递到 Lambda 函数中。您可以通过控制他们的permissions to KMS via IAM 来阻止其他人访问字符串值。这将提供所有选项中的最佳性能(代码运行时中没有额外的查找)。
使用此选项请注意以下陷阱:
- 如果您对 Lambda 函数使用版本控制,则值是固定的,您需要部署新版本的 Lambda 函数来进行更改。
- 值附加到单个 Lambda 函数,如果键被多个使用,则需要单独传递给每个函数。
Systems Manager 参数存储
使用此选项,您将使用 SDK 检索您想要的任何键/值。它既可以存储纯文本值,也可以存储加密字符串(SecureString 类型)。它提供了基本功能,但如果这就是您所需要的,那么它会很好用。存储值不需要任何成本,但价格是$0.05 per 10,000 Parameter Store API interactions。与环境变量不同,您可以在多个 Lambda 函数中使用该值。
通过使用此选项,您需要注意以下事项:
- 每次检索值都会对性能造成影响,以减少在全局上下文中对函数的调用,以便在调用之间重复使用。
- 每个键/值都需要一个单独的参数。对于数据库,这意味着要么创建单独的参数,要么将整个凭据集存储为 JSON 对象并在检索后进行解码。
秘密经理
使用此选项,服务中内置了很多管理功能,密钥可以包含字符串或单行 JSON 对象。 SDK 将处理这些值的检索,但您必须意识到,就像 SSM 一样,您会受到性能影响,因此您需要查看与参数存储类似的解决方案。与 SSM 参数存储相比,Secrets Manager 的最大优势在于它与其他 AWS 服务的集成,允许提供诸如密钥轮换等功能。
但是,如果您不需要 Secrets Manager 的功能,您所支付的费用可能会超过您实际需要的费用,这是三者中最昂贵的选择。
【解决方案2】:
大量免费的公共 API 密钥。使用带有加密的 lambda 环境变量,其他开发人员/管理员仍然可以直接在 lambds 控制台中公开他们的明文值。
对于开发者可以在控制台看到环境变量的问题,您可以使用非默认的KMS CMK,并对该key进行权限配置,让其他开发者无法使用(doc) .他们仍然可以看到 Lambda 配置的其余部分。
一个更大的问题是如何配置这些环境变量。例如,如果您使用的是 Terraform,则配置将写入状态文件,您将需要使用外部状态(存储在 S3 或 HashiCorp 的服务器上)来保护它。如果您使用 CloudFormation,则可以使用 dynamic reference 将它们配置为 Secrets Manager 密钥,但不 配置为 Parameter Store 安全字符串。
另一种选择是使用环境变量来引用参数存储键,然后以编程方式检索值。比如你有一个名为DATABASE_PASSWORD的环境变量,它的值为/dev/database/password;实际的数据库密码是 Parameter Store 中的 SecureString,可通过该路径访问。
第三方平台的登录凭据。我假设 Secrets Manager 是唯一的选择?
参数存储也提供了一个 SecureString。
数据库连接字符串。秘密经理?以 0.40 美元/秘密/月的价格计算,该账单将增加数百个数据库用于简单地存储凭据。
您的应用程序实际上是否连接到数百个数据库?如果是,每月 40 美元(100 个连接)对您的公司来说真的是财务困难吗?
如果是,那么 Parameter Store 可能是最佳选择,但请注意每个帐户的“免费”参数数量有限。