【问题标题】:How can I allow a 3rd party file upload to a private S3 bucket without using IAM?如何在不使用 IAM 的情况下允许将第 3 方文件上传到私有 S3 存储桶?
【发布时间】:2021-08-05 22:25:18
【问题描述】:

我能否在不使用 IAM 的情况下允许将第 3 方文件上传到 S3 存储桶?我想避免向他们发送 AWS 帐户凭证的麻烦,但仍要利用 S3 UI。我只找到了其中一个的解决方案。

pre-signed url 选项听起来不错,但似乎只适用于他们的 SDK,我不打算告诉我的客户在他们的计算机上安装 python 以上传文件。

browser based upload 要求我制作自己的前端 html 表单并在服务器上运行以上传(哈哈)。

我可以不简单地创建一个预签名的 url 将用户导航到 S3 控制台并允许他们在到期时间之前上传吗?当然,将存储桶公开也不是一种选择。为什么这么复杂!

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    管理控制台

    Amazon S3 管理控制台将仅显示与用户的 AWS 账户关联的 S3 存储桶。此外,无法限制显示的存储桶(它将显示帐户中的所有个存储桶,即使用户无法访问它们)。

    因此,您当然不想让他们访问您的 AWS 管理控制台。

    预签名网址

    您的用户不要求 AWS 开发工具包使用预签名 URL。相反,您必须运行您自己的系统,该系统会生成预签名的 URL 并将其提供给用户(例如通过网页或 API 调用)。

    网页

    您可以在 Amazon S3 上托管静态上传页面,但无法对用户进行身份验证。由于您只想向特定人员提供访问权限,因此您需要在后端运行一些代码来对他们进行身份验证。

    生成...

    您问:“我能不能简单地创建一个预签名的 url,将用户导航到 S3 控制台并允许他们在过期时间之前上传?”

    是和不是。是的,您可以生成预签名 URL。但是,它不能与 S3 控制台一起使用(见上文)。

    为什么这么复杂?

    因为安全很重要。

    那么,该怎么办?

    几个选项:

    • 使存储桶可公开写入,但不可公开读取。告诉您的客户如何上传。缺点是任何人都可以上传到存储桶(如果他们知道的话),所以它只是默默无闻的安全。但是,这对您来说可能是一个简单的解决方案。
    • 生成一个长期有效的预签名 URL。 您可以创建一个可以使用数月或数年的 URL。将其提供给他们,他们就可以上传(例如通过您提供给他们的静态 HTML 页面)。
    • 为他们生成一些 IAM 用户凭证,然后让他们使用像 AWS Command-Line Interface (CLI) 或 Cloudberry 这样的实用程序。为他们提供足够的凭据以进行上传访问。这假设您只有少数需要访问权限的客户。

    底线:安全很重要。然而,您希望“避免向他们发送凭据的麻烦”,也不希望运行系统来执行身份验证检查。不做一些工作就无法获得安全性,安全性差的成本将远远超过实施良好安全性的成本。

    【讨论】:

      【解决方案2】:

      您可以部署一个 lambda 函数来调用“签名 URL”,然后使用该 URL 上传文件。这是一个例子

      https://aws.amazon.com/blogs/compute/uploading-to-amazon-s3-directly-from-a-web-or-mobile-application/

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        • 2019-03-15
        • 2016-07-11
        • 1970-01-01
        • 1970-01-01
        • 2022-12-16
        相关资源
        最近更新 更多