amazon-s3 - 在不同的 IAM 角色下运行 AWS Lambda 函数
问题描述
我正在开发一个恰好具有 AWS lambda 函数的 Node.js 项目。我们会调用它funcA
。它可以在特定的 s3 存储桶上getObject()
。putObject()
我们有一个在 Elastic Beanstalk 实例上运行 Node.js 的开发环境。该实例在专门用于开发的 IAM 角色上运行。此 IAM 角色允许它调用 Lambda 函数并访问开发 S3 存储桶。这就是它变得棘手的地方......
我们还需要有单独的暂存环境和生产环境,它们也将位于 Elastic Beanstalk 上。那些环境也需要使用这个 lambda 函数。但是,这些是在不同 IAM 角色下运行的不同 EB 实例。这些角色应该只能分别访问暂存桶和生产桶。
我们的基础架构团队告诉我,这意味着我必须拥有三个独立的特定于环境的 Lambda 函数:所以 funcA_dev、funcA_staging、funcA_prod。它实际上是完全相同的代码做同样的事情,但因为它会扮演不同的角色,所以我必须拥有三份副本。
我知道 Lambda 必须有一个角色。但是,这似乎是一个非常不合标准的工作流程。有没有更好的方法来管理这个?关键标准是使用 IAM 角色(没有永久或硬编码的密钥),并严格限定角色范围,以便例如如果开发凭证以某种方式受到损害,它不会影响生产存储桶和堆栈。
解决方案
为每个环境部署一个 lambda 是很常见的(我会说实现你想要的标准方式)——当然,它们现在可能是完全相同的东西,但你可能需要为你的 lambda 添加新功能我只想在开发和 c 中进行测试。
随着您的项目的发展,您的开发/阶段/生产环境最终会出现在不同的 AWS 账户中(尤其是考虑到 AWS 强加的账户范围限制-讨论)。
如果你真的想避免使用三个 lambda,最好的方法是自己承担角色假设的职责。lambda 用于获取其临时 IAM 角色的机制是 STS ( https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html )。这意味着您可以传递您的 lambda 不同的临时凭证,您可以在 Elastic Beanstalk 实例中指定和分配这些凭证。
但是,我真的强烈建议您为所有三种环境提供一份 lambda 副本。
推荐阅读
- java - 使用@Digits 验证数字
- serilog - 当我发布应用程序时,Serilog 没有将日志记录到文件中
- android - 当我们在Android中不使用material.slider滑动时,如何在滑块上方显示滑块值?
- amazon-web-services - AWS Managed Kafka Service 崩溃后恢复
- spring - 使用 OpenApiFeature 为所有 Apache CXF 端点获取相同的 OpenApi 响应
- c# - 将 RestSharp API 调用转换为 HttpClient 以进行多部分表单调用
- excel - Excel 将所有日期格式解释为美国
- javascript - 如何在 ' 中添加 span 元素' wordpress 中的菜单项?
- android - 由于 ACodec 导致 Android 崩溃
- javascript - 如何通过 DOM-Container 的 id 访问 Apache ECharts?