首页 > 解决方案 > 如何在不使用 IAM 的情况下允许将第 3 方文件上传到私有 S3 存储桶?

问题描述

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

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

基于浏览器的上传需要我制作自己的前端 html 表单并在服务器上运行以上传(哈哈)。

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

标签: amazon-web-servicesamazon-s3

解决方案


管理控制台

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

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

预签名网址

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

网页

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

产生...

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

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

为什么这么复杂?

因为安全很重要。

那么该怎么办?

几个选项:

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

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


推荐阅读