aws-lambda - Lambda 的参数存储与加密环境变量

标签 aws-lambda aws-kms aws-parameter-store

我最近正在准备安全专业考试,我遇到了一个问题,是选择使用参数存储来存储可以保存密码的 secret 数据库连接 URL,还是使用 Lambda 中的 KMS 加密环境变量。

IMO 环境变量是更可取的,因为否则对于每天调用数千或数十万次的 Lambda 函数,这可能会开始花费大量成本,甚至可能导致达到账户限制。

此外,每次调用获取参数都会增加延迟,这可能并不重要,但仍然会累加起来。总的来说,我希望看到为 Lambda 环境变量实现的引用语法解析为 AWS SSM 参数值,类似于现在为 SSM 和 secret 管理器的 Cloudformation 实现的内容。

但在此之前,考虑到增加的成本和延迟,为什么 SSM 优于使用 KMS 加密环境变量? (这是我在练习考试中看到的推荐)

最佳答案

This article有一些有用的要点:

  • Hard to share configs across projects
  • Hard to implement fine-grained access control
  • [SSM Parameter Store] records a history of changes

所以使用SSM通常是一个更灵活的架构。也就是说,如果这些好处真的不适用于您,那么您仍然可以使用环境变量并减少延迟,正如您所指出的那样。与其说一个是错误的,不如说另一个是通常被认为更像是一种“架构良好”的方法。但具体情况可能需要其他实现方式。

This article提到它带来的更好的安全性。

"While this approach [using environment variables] is simple and straightforward, it comes with considerable security drawbacks - the secrets exist in plaintext in the environment. Any other process, library, or dependency running inside the process has access to the environment which has already been exploited multiple times."

安全性是一个重要的考虑因素,与不太安全的替代方案相比,为提高安全性所做的大部分工作都会带来延迟或处理成本。

需要考虑的其他一些想法:

关于aws-lambda - Lambda 的参数存储与加密环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64607075/

相关文章:

javascript - 我可以使用 AWS lambda 充当 WebSocket(AWS IoT 堆栈)的客户端吗?

amazon-web-services - 与另一个账户共享 AWS 托管的 KMS key

git - 有没有办法在 Windows 上的 Jenkins 中通过 SSH 使用 AWS KMS 进行 key 管理?

javascript - 为什么 JavaScript aws-sdk ssm getParameter 需要所有参数的权限,而不是我需要的那个?

amazon-web-services - 如何在 CloudFormation 模板中使用可选的 Parameter Store 参数?

node.js - AWS Lambda 中的 Gzip 响应 -> API 网关

amazon-web-services - AWS Lambda 函数列出用户的权限

amazon-web-services - AWS Secrets Manager 控制台上的 "Failed to fetch a list of secrets"?

python - 如何在 AWS Lambda 中缓存多个 AWS Parameter Store 值?

python - 如何从 S3 存储桶中读取 CSV 文件,对其应用某些 if 语句,然后编写新的更新的 CSV 文件并将其放入 S3 存储桶中?