如何在template.yml中配置AWS Lambda函数间互相调用的权限
正确配置方案
你当前的配置逻辑方向是对的,只需要优化权限配置的写法避免硬编码错误即可,按以下步骤修改template.yml:
1 优化router函数的权限配置
推荐两种可选写法,优先选SAM内置策略的简化写法:
写法一:使用SAM内置托管策略(推荐,无需手动写权限声明)
直接在router的Policies节点下添加LambdaInvokePolicy,自动生成符合要求的权限:
router: Type: AWS::Serverless::Function Properties: # 其余原有配置保持不变 Policies: # 新增这一行即可,不需要手动写Statement - LambdaInvokePolicy: FunctionName: !Ref helpSlashCommand # 原有DynamoDB权限、AWSLambdaBasicExecutionRole保持不变 - Statement: Sid: DynamoDbAllowLambda Effect: Allow Action: - dynamodb:GetItem Resource: 'arn:aws:dynamodb:us-east-2:xxxxxxxxxxxxxxxx:table/waiting-room' - AWSLambdaBasicExecutionRole
写法二:手动写Statement,用动态ARN避免硬编码错误
如果你要保留手动写Statement的方式,把Resource的硬编码ARN替换为内置函数自动获取的目标Lambda ARN:
- Statement: Sid: LambdaAllowLambda Effect: Allow Action: - lambda:InvokeFunction Resource: !GetAtt helpSlashCommand.Arn
注意:
lambda:InvokeAsync是旧版异步调用API的权限,你当前代码用的是invoke方法加InvocationType: Event的异步调用,只需要lambda:InvokeFunction权限即可,多余的权限可以移除。
2 部署验证
修改完成后重新部署SAM栈即可,新的权限会自动生效。
内容的提问来源于stack exchange,提问作者sissonb
相关产品推荐
相关产品推荐

