【问题标题】:AWS_IAM auth for Lambda invokation from elastic beanstalk through ApiGatewayAWS_IAM 身份验证,用于通过 Api Gateway 从弹性 beantalk 调用 Lambda
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-21
      • 2018-07-26
      • 1970-01-01
      • 2021-05-02
      • 2019-11-18
      • 2020-01-05
      • 2022-11-11
      • 2017-04-22
      相关资源
      最近更新 更多