【问题标题】: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
【问题描述】:

遇到了一些我有些困惑的具体用例:

  1. 大量免费的公共 API 密钥。使用带有加密的 lambda 环境变量,其他开发人员/管理员仍然可以直接在 lambds 控制台中公开他们的明文值。应该改用 Parameter Store 吗?
  2. 第三方平台的登录凭据。我假设 Secrets Manager 是唯一的选择?
  3. 数据库连接字符串。秘密经理?以 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 可能是最佳选择,但请注意每个帐户的“免费”参数数量有限。

      【讨论】:

      猜你喜欢
      • 2020-07-22
      • 2023-01-26
      • 2020-07-30
      • 2020-05-09
      • 2020-09-28
      • 2019-04-02
      • 2023-01-01
      • 2020-10-26
      • 2023-03-18
      相关资源
      最近更新 更多