如何在不使用IAM的情况下允许第三方文件上传到私有S3存储桶?

时间:2018-05-15 16:17:29

标签: amazon-web-services amazon-s3

我是否可以在不使用IAM的情况下将第三方文件上传到S3存储桶?我想避免为AWS账户发送凭据的麻烦,但仍然利用S3 UI 。我只找到了一个或另一个的解决方案。

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

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

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

2 个答案:

答案 0 :(得分:4)

管理控制台

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

因此,您当然不希望授予他们访问AWS管理控制台的权限。

预签名网址

您的用户要求AWS SDK使用预先签名的网址。相反,您必须运行您自己的系统,生成预签名的URL并将其提供给用户(例如通过网页或API调用)。

网页

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

生成...

您问:"我是否可以简单地创建一个预先签名的网址,用户将用户导航到S3控制台并允许他们在到期时间之前上传?"

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

为什么这么复杂?

因为安全很重要。

那么,该怎么办?

一些选择:

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

底线:安全性非常重要。但是,您希望避免发送凭据的麻烦",您也不希望运行系统来执行身份验证检查。没有做一些工作就无法获得安全性,安全性差的成本将远高于实现良好安全性的成本。

答案 1 :(得分:0)

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

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