【问题标题】:Aws S3 lambda upload using mobile credentials使用移动凭证上传 Aws S3 lambda
【发布时间】:2018-07-13 12:50:39
【问题描述】:

我有一个使用 cognito 为用户提供凭据的移动应用。

我希望用户使用相同的用户凭据上传到网络上的 s3。

这可以通过 lambda 和 api 网关实现吗?文件大小约为 10MB。

这将是一个托管在 s3 上的静态网站,我有一个身份验证过程,可以获取他们的 cognitoID。

或者还有其他使用签名网址的方法吗?

【问题讨论】:

    标签: amazon-s3 aws-lambda aws-api-gateway amazon-cognito


    【解决方案1】:

    上传到 Lambda 不是一个好主意。它的有效负载大小(最大 6mb)和执行时间(如果您的用户连接不良,它将超时)。

    如果您需要在允许用户上传之前处理某些内容,您可以触发 Lambda,处理您想要的任何内容,生成预签名的 S3 URL 并将其传递给用户,以便他可以直接上传到 S3。

    如果您需要在上传完成后处理某些内容,您可以激活 S3 流并在有人将任何内容上传到存储桶时自动触发 Lambda 函数。

    【讨论】:

    • 嘿 Renato,我试过了,你是对的,文件大小和超时都是一个限制因素。我现在正在做的是使用 cognito 对用户进行身份验证,然后为该特定用户获取预签名的 s3 url,因为 s3 存储桶对用户可以上传的位置有限制,所以如果我是 userA,我只能以某些前缀上传。现在的问题是,用户是使用移动 SDK 进行身份验证的,我想给他们一个预签名的 url,而不需要我的自定义身份验证,因为我有办法验证移动设备上的用户是特定时间浏览器上的用户
    • 我正在考虑以某种方式在移动设备上生成一个预签名的 url,对其进行加密,然后将其存储在发电机中,作为用户字段在行中。当网络需要上传时,它会获取用户行,使用 lambda 解密然后上传文件,链接超时将是 10 分钟左右,用户需要去手机重新生成 url 并发送另一个签名的 url。你觉得雷纳托怎么样?
    • 我认为应该可以。当您生成预签名 URL 并存储在 Dynamo 中时,无论用户使用何种设备(移动设备、平板电脑、PC)登录,您都可以将此 URL 提供给用户。除非您在不安全的环境中公开此预签名 URL,否则您可能并不需要对其进行加密。我假设您强制所有用户通过 HTTPS 连接到您的应用程序。在这种情况下,所有通信都已加密......
    • 很高兴知道。我会将它存储在 Json Web 令牌中,因此用户不需要继续从服务器获取它,因此我可以使用 Zappa。谢谢你的帮助,任
    • 例如,如果您是成功的XSS attack 的目标,这只会成为您的问题。在这种情况下,攻击者理论上可以获取用户 JSON 令牌(例如,假设您将其存储在 LocalStorage 上)并发现预签名的 URL。但是,如果您打算在某个时间点将 URL 暴露给最终用户(已解密),XSS 攻击者无论如何都可以得到它,因此,最好花时间保护您的应用程序作为一个整体,而不是只保护前- 签名 URL... ;)
    猜你喜欢
    • 2018-07-12
    • 2020-07-14
    • 2020-04-02
    • 2021-04-17
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多