我有一个在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 函数调用自己吗?
在这种情况下,Principal
将是 Lambda 本身运行的 IAM 角色,如下所示(根据需要替换 aws-account-id 和 role-name):
Principal: arn:aws:iam::aws-account-id:role/role-name