从其他帐户部署AWS Lambda

时间:2019-05-31 22:39:39

标签: amazon-web-services deployment aws-lambda

我有一个Lambda .jar,它是通过AWS账户(“ Account_Bld”)中的Jenkins框构建的。构建完成后,我将.jar复制到另一个AWS账户(“ Account_Dst”)中的S3存储桶中,然后尝试基于S3中新复制的.jar来更新Account_Dst中的Lambda。

我将此命令用作部署脚本的一部分,这是对所有版本都位于同一帐户中的另一个版本的略微修改:

  

aws lambda更新功能代码-函数名称arn:aws:lambda:us-east-1:{Account_Dst_Id}:function:{lambda_function_name} --zip文件fileb:// {jar_file_relative_path}- us-east-1地区

毫不奇怪,我收到此错误:

  

调用UpdateFunctionCode操作时发生错误(AccessDeniedException):用户:arn:aws:sts :: {Account_Bld_Id}:assumed-role / {jenkins_ec2_role} / {jenkins_ec2_instance_id}无权执行:lambda:UpdateFunctionCode在资源上:arn:aws:lambda:us-east-1:{Account_Dst_Id}:function:{lambda_function_name}

我已授予jenkins_ec2_role权限来更新另一个帐户中的Lambda,但我有必要在Account_Dst中的某个地方获得这些权利,这是有道理的-假设有一个解决此问题的简单方法。

现在,可能的解决方法。我可以在Account_Dst中担任一个角色,该角色具有正确的权限并更新Lambda,但这比我现在值得的设置麻烦更多。我已经看到一些Google建议可以使用CodePipeline,但显然我正在使用Jenkins,因此,这也不是一个好的解决方案。

所以,问题是,这里有一个我想不起来的简单解决方案吗?

1 个答案:

答案 0 :(得分:0)

Account_Bld中授予访问Account_Dst的权限不足以获得对另一个帐户的访问权限。这很好,因为您不希望人们授予自己访问他人帐户的权限。

目标帐户需要接受传入的请求。该方法因服务而异。例如,Amazon S3可以创建存储桶策略以允许其他帐户(Amazon SQS也可以)访问。

但是,Lambda中没有这样的概念来配置来自其他帐户的传入请求。根本没有地方可以配置为允许其他帐户的update-function-code

因此,您将需要按照建议进行操作:

  • Account_Dst中创建IAM用户或IAM角色
  • 使用来自Account_Dst IAM用户(最简单)的凭据,或使用现有的Account_Bld凭据承担Account_Dst中的角色(多行代码)
  • 使用这些凭据致电update-function-code