CloudFormation配置Lambda InvokePermission时SourceArn如何填写(boto3调用场景)
问题解答
你当前的配置存在基础错误:你设置的Principal: events.amazonaws.com是用于允许Amazon EventBridge服务触发Lambda的场景,完全不适用于boto3调用的场景,需要先修改Principal配置,再根据你运行boto3代码的身份决定SourceArn的取值:
场景1:boto3代码运行在非AWS环境(如本地服务器、个人电脑),使用IAM用户/角色的访问密钥调用
这种场景不需要填写SourceArn字段,直接将Principal设置为你用于调用的IAM实体的ARN即可,示例配置如下:
MyFunctionInvokePermission: Type: AWS::Lambda::Permission Properties: FunctionName: Fn::GetAtt: [MyFunctionLambda, Arn] Action: lambda:InvokeFunction Principal: arn:aws:iam::[你的AWS账号ID]:user/[你的IAM用户名] # 替换为你实际使用的IAM用户/角色ARN
你也可以选择不用配置Lambda Permission,直接在调用方IAM身份的权限策略中添加如下配置,即可获得调用权限:
{ "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:[区域]:[你的AWS账号ID]:function:MyLambdaFunction" }
场景2:boto3代码运行在其他AWS服务上(如EC2实例、另一个Lambda函数、ECS任务)
这种场景需要先将Principal设置为对应服务的服务主体,再将SourceArn设置为运行boto3代码的AWS资源的ARN:
- 示例:调用方为另一个Lambda函数
MyFunctionInvokePermission: Type: AWS::Lambda::Permission Properties: FunctionName: Fn::GetAtt: [MyFunctionLambda, Arn] Action: lambda:InvokeFunction Principal: lambda.amazonaws.com SourceArn: arn:aws:lambda:[区域]:[你的AWS账号ID]:function:[调用方Lambda函数名] # 此处填写运行boto3代码的Lambda的ARN
- 示例:调用方为EC2实例
MyFunctionInvokePermission: Type: AWS::Lambda::Permission Properties: FunctionName: Fn::GetAtt: [MyFunctionLambda, Arn] Action: lambda:InvokeFunction Principal: ec2.amazonaws.com SourceArn: arn:aws:ec2:[区域]:[你的AWS账号ID]:instance:[EC2实例ID] # 此处填写运行boto3代码的EC2实例的ARN
内容的提问来源于stack exchange,提问作者Xar
相关产品推荐
相关产品推荐

