AWS_IAM通过ApiGateway从弹性beanstalk调用Lambda调用

时间:2017-07-11 11:28:53

标签: node.js amazon-web-services aws-lambda amazon-iam amazon-elastic-beanstalk

我正在努力争取aws权限......

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

  • 我做了什么:
    • 添加" AWS_IAM"到"方法请求"适当的资源(" / signS3"在这里)和方法(在这里获取)
    • 添加" AmazonAPIGatewayInvokeFullAccess"策略我的" Elastic Beanstalk服务角色"和我的" Elastic Beanstalk实例配置文件"
    • 打电话给我的ApiGateway"方法/资源"使用nodejs https methods
      • 我得到了什么:"缺少身份验证令牌" ...
      • 它可能是什么?
    • 也许我应该使用AWS-SDK调用ApiGateway来将角色与我的请求联系起来?但我在sdk文档中找不到合适的方法
    • 我对我必须授予的策略犯了一个错误......但我不这么认为,我使用默认的AWS AmazonAPIGatewayInvokeFullAccess默认策略。

有什么想法吗?

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

全文:

  • 业务需求:我正在使用nodejs后端构建移动应用,我需要我的用户才能将文件上传到S3桶
  • 技术答案:使用S3预签名网址==>应用程序发送一些有关该文件的信息存储到我的后端,获取一些特定文件上传到S3的信息,并将其发送回我的应用程序,直接将文件上传到S3。在the following
  • 中合成得很好

不是问题,完全正常工作!是的!但是等等......

我推出安全帽并查看设置:移动应用程序的每个请求都转到服务器A(托管在Elastic Beanstalk上),这是我后端的入口点。那时,服务器A有一个带有AWS密钥的配置文件,用于配置AWS-SDK以访问S3。所以基本上,如果我的服务器由于某种原因而受到损害,我的安全密钥就会泄露。该怎么办?

我的回答是将请求委托给S3以获取AWS Lambda函数的预签名URL,该函数通过ApiGateway调用。然后,我的lambda函数 - 不暴露于互联网 - 必须妥协以泄露我的密钥。安全性得到了增强......很久以后,它就启动并运行了,我的应用程序请求也经历了这个过程。 很好,但仍然不完美:如果我不在我的ApiGateway方法中放置$%#@ Auth,它就有效!

确实,这就是我的问题,我没有设法让AWS_IAM权限有效。 ==>看看TL / DR,看看我是如何尝试的。

1 个答案:

答案 0 :(得分:0)

您缺少的是发送到API网关的请求的相应签名。当您向需要AWS_IAM身份验证的API网关发出REST请求时,您需要使用附加角色的凭据自行签署该请求。其他详细信息:Accessing AWS API Gateway from an EC2 using IAM authorization (NodeJS)