使用 AWS 开发工具包的 Lambda 上的 AWS SAM AccessDeniedException
AWS SAM AccessDeniedException on a Lambda that uses the AWS SDK
我在 Node.js 中有一个 AWS Lambda 函数,它使用 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 is not authorized to perform: lambda:ListVersionsByFunction on resource: arn:aws:lambda:us-east-2:999999999:function:my-project-special
如何通过 AWS SAM 模板允许此访问?
该错误表明您的 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
或者您也可以在 IAM 管理控制台 中将此策略添加为 inline policy
,在角色 select 您的函数 getLatest
下并添加政策。查看快照。
希望对你有帮助
我在 Node.js 中有一个 AWS Lambda 函数,它使用 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 is not authorized to perform: lambda:ListVersionsByFunction on resource: arn:aws:lambda:us-east-2:999999999:function:my-project-special
如何通过 AWS SAM 模板允许此访问?
该错误表明您的 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
或者您也可以在 IAM 管理控制台 中将此策略添加为 inline policy
,在角色 select 您的函数 getLatest
下并添加政策。查看快照。