我在Node.js中有一个AWS函数,它使用SDK方法listVersionsByFunction。
它是从这个AWS SAM模板创建的:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Timeout: 3
Resources:
special:
Type: AWS::Serverless::Function
Properties:
FunctionName: 'my-project-special'
CodeUri: ./handlers
Handler: special.handler
Runtime: nodejs10.x
getLatest:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./handlers
Handler: getLatest.handler
Runtime: nodejs10.x
Events:
getLatest:
Type: Api
Properties:
Path: /latest/
Method: get处理程序像这样调用SDK:
const result = await lambda.listVersionsByFunction({
FunctionName: 'my-project-special',
}).promise();在部署和发出请求之后,会出现一个AccessDeniedException错误:
User: arn:aws:sts::999999999:assumed-role/my-project-getLatest-ADFADSFASD/my-project-getLatest-HJLKHLKJKJ未被授权执行: lambda:ListVersionsByFunction资源: arn:aws:lambda:us-east-2:999999999:function:my-project-special
如何通过AWS SAM模板允许这种访问?
发布于 2019-11-13 11:02:45
此错误指示您的Lambda没有对其他资源(另一个Lambda)执行ListVersionsByFunction操作的权限。
您需要做的是创建一个自定义策略并将其添加到您的template中。
getLatest:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./handlers
Handler: getLatest.handler
Runtime: nodejs10.x
Policies:
- Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- lambda:ListVersionsByFunction
Resource: '*'
Events:
getLatest:
Type: Api
Properties:
Path: /latest/
Method: get也可以将此策略作为inline policy添加到IAM管理控制台中,在角色下选择函数getLatest并添加策略。见快照。

希望它能帮上忙
https://stackoverflow.com/questions/58827977
复制相似问题