Lambda 的参数存储与加密环境变量
Parameter Store Vs Encrypted Environment Variables for Lambda
我最近正在准备安全专业考试,我遇到了一个问题,是使用 Parameter Store 存储可以保存密码的秘密数据库连接 URL 还是使用 KMS 加密环境变量在 Lambda 中。
IMO 环境变量更可取,因为否则对于每天调用数千或数十万次的 Lambda 函数,这可能会开始花费大量成本,甚至可能导致达到帐户限制。
此外,每次调用获取参数都会增加延迟,这可能并不重要,但仍然会累加。总的来说,我希望看到为 Lambda 环境变量实现的参考语法解析为 AWS SSM 参数值,类似于现在为 SSM 和秘密管理器的 Cloudformation 实现的内容。
但在此之前,考虑到增加的成本和延迟,为什么 SSM 优于使用 KMS 加密环境变量? (这是我在练习考试中看到的推荐)
想到的最大原因是以解耦的方式使用您的 tokens/secrets 的能力,从而允许其他服务利用相同的令牌。例如,如果您有两个 lambda,它们都需要使用相同的 API 令牌调用外部服务,那么您只需要更新一个地方。如果您没有这样做,假设令牌已轮换,那么您将需要重新配置每个 lambda 以使用新令牌,而不是对 SSM 进行一次更新。
This article 有一些有用的要点:
- Hard to share configs across projects
- Hard to implement fine-grained access control
- [SSM Parameter Store] records a history of changes
所以使用 SSM 通常是一种更灵活的架构。也就是说,如果这些好处真的不适用于您,那么您仍然可以使用环境变量并减少延迟,正如您所指出的那样。与其说一个是错误的,不如说另一个是通常被认为更像是一种“well-architected”方法。但具体情况可能需要其他实施方式。
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."
安全是一个重要的考虑因素,与安全性较低的替代方案相比,为提高安全性所做的大部分工作都会带来延迟或处理成本。
需要考虑的其他一些想法:
上面提到了 SSM 相对于常规环境变量的细粒度安全性和单一真实来源优势。
为了避免延迟的缺点,本文提供了当前从SSM读取参数时避免延迟的最佳实践:
基本上您需要做的是全局读取环境变量一次。同一 lambda 的后续调用已经可以访问它们,因此不需要额外往返 SSM。
我最近正在准备安全专业考试,我遇到了一个问题,是使用 Parameter Store 存储可以保存密码的秘密数据库连接 URL 还是使用 KMS 加密环境变量在 Lambda 中。
IMO 环境变量更可取,因为否则对于每天调用数千或数十万次的 Lambda 函数,这可能会开始花费大量成本,甚至可能导致达到帐户限制。
此外,每次调用获取参数都会增加延迟,这可能并不重要,但仍然会累加。总的来说,我希望看到为 Lambda 环境变量实现的参考语法解析为 AWS SSM 参数值,类似于现在为 SSM 和秘密管理器的 Cloudformation 实现的内容。
但在此之前,考虑到增加的成本和延迟,为什么 SSM 优于使用 KMS 加密环境变量? (这是我在练习考试中看到的推荐)
想到的最大原因是以解耦的方式使用您的 tokens/secrets 的能力,从而允许其他服务利用相同的令牌。例如,如果您有两个 lambda,它们都需要使用相同的 API 令牌调用外部服务,那么您只需要更新一个地方。如果您没有这样做,假设令牌已轮换,那么您将需要重新配置每个 lambda 以使用新令牌,而不是对 SSM 进行一次更新。
This article 有一些有用的要点:
- Hard to share configs across projects
- Hard to implement fine-grained access control
- [SSM Parameter Store] records a history of changes
所以使用 SSM 通常是一种更灵活的架构。也就是说,如果这些好处真的不适用于您,那么您仍然可以使用环境变量并减少延迟,正如您所指出的那样。与其说一个是错误的,不如说另一个是通常被认为更像是一种“well-architected”方法。但具体情况可能需要其他实施方式。
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."
安全是一个重要的考虑因素,与安全性较低的替代方案相比,为提高安全性所做的大部分工作都会带来延迟或处理成本。
需要考虑的其他一些想法:
上面提到了 SSM 相对于常规环境变量的细粒度安全性和单一真实来源优势。
为了避免延迟的缺点,本文提供了当前从SSM读取参数时避免延迟的最佳实践:
基本上您需要做的是全局读取环境变量一次。同一 lambda 的后续调用已经可以访问它们,因此不需要额外往返 SSM。