AWS_IAM通过 ApiGateway 从弹性 betalk 调用的 Lambda 调用的身份验证



我正在努力解决 aws 权限问题...

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

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

有什么想法吗?

====

==========整个故事 :

  • 业务需求 :我正在使用 nodejs 后端构建移动应用程序,并且我需要我的用户能够将文件上传到 S3 存储桶
  • 技术答案:使用 S3 预签名 URL ==> 应用程序将一些有关文件的信息发送到我的后端,后端获取一些信息,以便将特定文件一次性上传到 S3,然后将其发送回我的应用程序,该应用程序将文件直接上传到 S3。在以下方面很好地合成了

没问题,完全工作!是的!但是等等...

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

我的答案是将请求委托给 S3,以获取通过 ApiGateway 调用的 AWS Lambda 函数的预签名 URL。然后,我的 lambda 函数 - 未暴露在互联网上 - 必须受到损害才能泄漏我的密钥。安全性得到增强...片刻之后,它启动并运行,我的应用程序请求经历了此过程。很好,但仍然不完美:如果我不在我的 ApiGateway 方法中放入 $%#@ 身份验证,它可以工作!

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

您缺少的是发送到 API 网关的请求的适当签名。当您向需要AWS_IAM身份验证的 API 网关发出 REST 请求时,您需要使用附加角色中的凭据自行签署该请求。此处的其他详细信息:使用 IAM 授权从 EC2 访问 AWS API 网关 (NodeJS(

相关内容

  • 没有找到相关文章

最新更新