【问题标题】:Deploying an AWS Lambda from a different account从不同账户部署 AWS Lambda
【发布时间】:2019-10-17 12:52:30
【问题描述】:

我有一个 Lambda .jar,它是从 AWS 账户(“Account_Bld”)中的 Jenkins 盒子构建的。构建完成后,我将 .jar 复制到不同 AWS 账户(“Account_Dst”)中的 S3 存储桶,并尝试根据 S3 中新复制的 .jar 更新 Account_Dst 中的 Lambda。

我将此命令用作我的部署脚本的一部分,这是对另一个版本的轻微修改,当所有内容都位于同一帐户中时该版本可以工作:

aws lambda update-function-code --function-name arn:aws:lambda:us-east-1:{Account_Dst_Id}:function:{lambda_function_name} --zip-file 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 on resource : 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,所以这似乎也不是一个好的解决方案。

所以,问题是,这里是否有一个我缺少的简单解决方案?

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

    • 补充:现在可以向 Lambda 函数添​​加基于资源的策略(例如,用于跨账户权限),the docs 说跨账户 update-function-code 应该是可能的。但是,我无法让它工作,只好按照您的描述使用目标帐户中的角色。
    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 2019-06-05
    • 2020-04-10
    • 2020-01-12
    • 2019-09-08
    • 1970-01-01
    • 2017-07-23
    • 2020-10-07
    相关资源
    最近更新 更多