我有一个可以在Lambda上运行的应用程序,可以通过APIGateway进行访问。
在我的SAM模板中,我对其进行了设置,以便APIGateway可以调用我的函数。
ConfigLambdaPermission:
Type: "AWS::Lambda::Permission"
DependsOn:
- MyFunction
Properties:
Action: lambda:InvokeFunction
FunctionName: !Ref MyFunction
Principal: apigateway.amazonaws.com
但是现在我需要该应用程序以递归方式调用其自己的函数。我以为我可以像这样将新的ConfigLambdaPermission附加到我现有的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函数自行调用?
答案 0 :(得分:1)
在这种情况下,Principal
将成为Lambda本身所运行的IAM角色,如下所示(替换 aws-account-id 和 role-名称(视情况而定):
Principal: arn:aws:iam::aws-account-id:role/role-name