Node.js AWS_IAM auth用于通过ApiGateway从elastic beanstalk调用Lambda

Node.js AWS_IAM auth用于通过ApiGateway从elastic beanstalk调用Lambda,node.js,amazon-web-services,aws-lambda,amazon-iam,amazon-elastic-beanstalk,Node.js,Amazon Web Services,Aws Lambda,Amazon Iam,Amazon Elastic Beanstalk,我正在与aws权限作斗争 TL/DR: 我有一个弹性beanstalk服务器,它需要调用隐藏在Api网关后面的lambda函数。只要我不在ApiGateway上实现auth,它就可以正常工作 我所做的: 将“AWS_IAM”添加到相应资源(此处为“/signS3”)和方法(此处为GET)的“方法请求”中 在我的“Elastic Beanstalk服务角色”和“Elastic Beanstalk实例概要文件”中添加了“AmazonaPiGatewayInvokeelAccess”策略 使用调用

我正在与aws权限作斗争

TL/DR: 我有一个弹性beanstalk服务器,它需要调用隐藏在Api网关后面的lambda函数。只要我不在ApiGateway上实现auth,它就可以正常工作

  • 我所做的:
    • 将“AWS_IAM”添加到相应资源(此处为“/signS3”)和方法(此处为GET)的“方法请求”中
    • 在我的“Elastic Beanstalk服务角色”和“Elastic Beanstalk实例概要文件”中添加了“AmazonaPiGatewayInvokeelAccess”策略
    • 使用调用我的ApiGateway“方法/资源”
      • 我得到的信息:“缺少身份验证令牌”…
      • 可能是什么
    • 也许我应该使用AWS-SDK调用ApiGateway,以便将角色链接到我的请求?但是我在sdk文档中没有找到合适的方法
    • 我必须承认的策略是错误的。。。但我不这么认为,我使用的是默认AWS AmazonaPigatewayInvokuelLaccess默认策略
有什么想法吗

==============

整个故事:

  • 业务需求:我正在构建一个带有nodejs后端的移动应用程序,我需要我的用户能够将文件上传到S3 bucket
  • 技术回答:使用S3预签名URL=>应用程序将有关要存储的文件的一些信息发送到我的后端,后端将获取特定文件一次性上载到S3的一些信息,并将其发送回我的应用程序,后者将文件直接上载到S3。合成良好
不是问题,完全正常!是 啊但是等等…

我戴上安全帽,看了看设置:来自移动应用的每个请求都会进入服务器A(托管在Elastic Beanstalk上),这是我后端的入口点。当时,服务器A有一个带有AWS密钥的配置文件,用于配置AWS-SDK以访问S3。因此,基本上,如果我的服务器由于某种原因被破坏,我的安全密钥就会泄漏。那怎么办呢

我的答案是将请求委托给S3,以将预签名的URL发送给AWS Lambda函数,该函数通过ApiGateway调用。然后,我的lambda函数(未暴露于互联网)必须被泄露,以泄漏我的密钥。安全性得到加强。。。几分钟后,它启动并运行,我的应用程序请求通过这个过程很好,但仍然不完美:如果我不在ApiGateway方法中添加$%#@Auth,它就可以工作


事实上,这是我的问题,我无法使AWS_IAM权限正常工作。==>查看TL/DR,了解我是如何尝试这样做的。

您缺少的是发送到API网关的请求的相应签名。当您向需要AWS_IAM身份验证的API网关发出REST请求时,您需要使用附加角色的凭据自己对该请求进行签名。其他详情如下: