【发布时间】:2017-12-15 10:36:42
【问题描述】:
我正在为 aws 权限而苦苦挣扎......
TL/DR: 我有一个弹性 beanstalk 服务器,它需要调用隐藏在 Api 网关后面的 lambda 函数。只要我不在 ApiGateway 上实现身份验证,它就可以正常工作。
- 我做了什么:
- 将“AWS_IAM”添加到相应资源(此处为“/signS3”)和方法(此处为 GET)的“方法请求”中
- 在我的“Elastic Beanstalk 服务角色”和“Elastic Beanstalk 实例配置文件”中添加了“AmazonAPIGatewayInvokeFullAccess”策略
- 使用 nodejs https methods 调用我的 ApiGateway “方法 /ressources”
- 我得到了什么:“缺少身份验证令牌”...
- 可能是什么?
- 也许我应该使用 AWS-SDK 调用 ApiGateway 以使角色与我的请求相关联?但是我在sdk文档中没有找到合适的方法
- 我必须授予的策略有误...但我不这么认为,我使用的是默认 AWS AmazonAPIGatewayInvokeFullAccess 默认策略。
有什么想法吗?
==============
整个故事:
- 业务需求:我正在构建一个带有 nodejs 后端的移动应用,我需要我的用户能够将文件上传到 S3 存储桶.
- 技术答案: 使用 S3 Pre-Signed URL ==> 应用程序将一些关于要存储的文件的信息发送到我的后端,它会获取一些信息,以便将特定文件 1 次上传到S3,并将其发送回我的应用程序,该应用程序将文件直接上传到 S3。在the following 中合成得很好
没问题,可以正常工作!是的 !但是等等……
我戴上安全帽,查看了设置:来自移动应用程序的每个请求都发送到服务器 A(托管在 Elastic Beanstalk 上),这是我后端的入口点。当时,服务器 A 有一个带有 AWS 密钥的配置文件来配置 AWS-SDK 以访问 S3。所以基本上,如果我的服务器由于某种原因受到威胁,我的安全密钥就会泄露。那该怎么办呢?
我的回答是将请求委托给 S3,以获取 AWS Lambda 函数的预签名 URL,该函数通过 ApiGateway 调用。然后,我的 lambda 函数 - 没有暴露在互联网上 - 必须被破坏才能泄露我的密钥。安全性得到了增强……过了一会儿,它就启动并运行了,我的应用程序请求通过了这个过程。 很好,但仍然不完美:如果我不在我的 ApiGateway 方法中添加 $%#@ Auth,它会起作用!
确实,这是我的问题,我无法让 AWS_IAM 权限正常工作。 ==> 看看 TL/DR 看看我是怎么做的它。
【问题讨论】:
标签: node.js amazon-web-services aws-lambda amazon-iam amazon-elastic-beanstalk