【问题标题】:How to allow Lambda function to call itself recursively如何让 Lambda 函数递归调用自身
【发布时间】:2019-06-20 21:11:17
【问题描述】:

我有一个在 Lambda 上运行并可通过 APIGateway 访问的应用程序。

在我的 SAM 模板中,我对其进行了设置,以便 APIGateway 可以调用我的函数。

  ConfigLambdaPermission:
    Type: "AWS::Lambda::Permission"
    DependsOn:
    - MyFunction
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref MyFunction
      Principal: apigateway.amazonaws.com

但现在我需要应用程序递归调用它自己的函数。我认为我可以像这样将一个新的 ConfigLambdaPermission 附加到我现有的。

  ConfigLambdaPermission:
    Type: "AWS::Lambda::Permission"
    DependsOn:
    - MyFunction
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref MyFunction
      Principal: apigateway.amazonaws.com
  ConfigLambdaPermission:
    Type: "AWS::Lambda::Permission"
    DependsOn:
    - MyFunction
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref MyFunction
      Principal: lambda.amazonaws.com

但是,当函数尝试调用自身时,会抛出以下错误:

2019-01-27 14:27:56 - Aws::Lambda::Errors::AccessDeniedException -
User: arn:aws:sts::666666666666:assumed-role/my-app-MyFunction-166U166U166U1/my-app-MyFunction-1DJIJCDO1DJIJ 
is not authorized to perform: lambda:InvokeFunction on resource:
arn:aws:lambda:us-west-2:666666666666:function:my-app-MyFunction-1DJIJCDO1DJIJ:

我不确定我是否错误地添加了权限,或者是否需要执行其他步骤来通知 AWS 权限已更改。

知道如何正确地允许这个 lambda 函数调用自身吗?

【问题讨论】:

  • 我认为这种情况下的委托人将是 Lambda 运行的 IAM 角色:arn:aws:iam::aws-account-id:role/role-name
  • 是的。你是对的。一旦将角色作为原则引用,一切都很好。

标签: amazon-web-services aws-lambda amazon-iam aws-sam


【解决方案1】:

在这种情况下,Principal 将是 Lambda 本身运行的 IAM 角色,如下所示(替换 aws-account-idrole-name 视情况而定):

Principal: arn:aws:iam::aws-account-id:role/role-name

【讨论】:

  • 这对我也有用!。确切的步骤 -> 打开 lambda - 配置 -> 权限 -> 基于资源的策略 -> 添加权限 -> 选择帐户 -> 主体为 "arn:aws:iam::1234:role/role123456" ,一些合适的名称......
猜你喜欢
  • 2010-10-03
  • 2016-01-03
  • 2013-09-09
  • 1970-01-01
  • 2022-11-30
  • 2021-03-21
  • 2022-01-23
  • 1970-01-01
  • 2014-12-30
相关资源
最近更新 更多