在不同的IAM角色下运行AWS Lambda函数

时间:2018-10-26 00:31:52

标签: amazon-s3 aws-lambda aws-iam amazon-iam

我正在开发一个恰好具有AWS lambda函数的Node.js项目。我们将其称为funcA。它可以在特定的s3存储桶上getObject()putObject()

我们有一个Dev环境,在Elastic Beanstalk实例上运行Node.js。该实例在专门用于开发人员的IAM角色上运行。这个IAM角色允许它调用Lambda函数并访问dev S3存储桶。这就是棘手的地方...

我们还需要有单独的暂存和生产环境,这些环境也将在Elastic Beanstalk上。这些环境还需要使用此lambda函数。但是,这些是在不同IAM角色下运行的不同EB实例。这些角色只能分别访问登台存储桶和生产存储桶。

我们的基础架构团队告诉我,这意味着我必须具有三个独立的特定于环境的Lambda函数:funcA_dev,funcA_staging和funcA_prod。从字面上看,相同的代码执行相同的操作,但是因为它将扮演不同的角色,所以我必须具有三份副本。

我知道Lambda必须发挥作用。但是,这似乎是一个非常不合标准的工作流程。有没有更好的方法来解决这个问题?关键标准是使用IAM角色(不使用永久密钥或硬编码密钥),并严格限制角色的范围,这样,例如,如果开发人员凭证受到某种程度的损害,就不会影响生产存储桶和堆栈。

1 个答案:

答案 0 :(得分:1)

在每个环境中进行lambda部署是很普遍的(我会说standard way是实现您想要的目标)-当然,它们可能是 now 一样的东西,但是您可能需要向仅在开发&c中测试的lambda添加新功能。

随着项目的增长,通常会在单独的AWS账户中使用开发/阶段/产品环境(尤其是考虑到AWS施加的账户范围限制-discussion)。

如果您真的要避免有三个lambda,那么最好的方法是自己承担角色扮演的职责。 lambda用来获得其临时IAM角色的机制是STS(https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。这意味着您可以向lambda传递不同的临时凭证,您可以在Elastic Beanstalk实例中指定和分配这些凭证。

不过,我强烈建议您为所有三种环境提供一份lambda副本。