amazon-web-services - 如何在不使用 IAM 的情况下允许将第 3 方文件上传到私有 S3 存储桶?
问题描述
我可以在不使用 IAM 的情况下允许将第 3 方文件上传到 S3 存储桶吗?我想避免向他们发送 AWS 账户凭证的麻烦,但仍然利用 S3 UI。我只找到了其中一个的解决方案。
预签名的 url选项听起来很棒,但似乎只适用于他们的 SDK,我不打算告诉我的客户在他们的计算机上安装 python 以上传文件。
基于浏览器的上传需要我制作自己的前端 html 表单并在服务器上运行以上传(哈哈)。
我不能简单地创建一个预签名的 url,将用户导航到 S3 控制台并允许他们在到期时间之前上传吗?当然,将存储桶公开也不是一种选择。为什么这么复杂!
解决方案
管理控制台
Amazon S3 管理控制台将仅显示与用户的 AWS 账户关联的 S3 存储桶。此外,无法限制显示的存储桶(它将显示帐户中的所有存储桶,即使用户无法访问它们)。
因此,您当然不想让他们访问您的 AWS 管理控制台。
预签名网址
您的用户不需要AWS 开发工具包使用预签名 URL。相反,您必须运行自己的系统来生成预签名的 URL 并使其可供用户使用(例如,通过网页或 API 调用)。
网页
您可以在 Amazon S3 上托管静态上传页面,但无法对用户进行身份验证。由于您只希望向特定人员提供访问权限,因此您需要在后端运行一些代码来对他们进行身份验证。
产生...
你问:“我能不能简单地创建一个预签名的 url,将用户导航到 S3 控制台并允许他们在过期时间之前上传?”
是和不是。是的,您可以生成预签名 URL。但是,它不能与 S3 控制台一起使用(见上文)。
为什么这么复杂?
因为安全很重要。
那么该怎么办?
几个选项:
- 使存储桶可公开写入,但不可公开读取。告诉您的客户如何上传。缺点是任何人都可以上传到存储桶(如果他们知道的话),所以这只是obscurity 的安全性。但是,这对您来说可能是一个简单的解决方案。
- 生成一个非常长寿的预签名 URL。您可以创建一个可以使用数月或数年的 URL。将此提供给他们,他们可以上传(例如,通过您提供给他们的静态 HTML 页面)。
- 为他们生成一些 IAM 用户凭证,然后让他们使用AWS 命令行界面 (CLI)或Cloudberry 等实用程序。为他们提供足够的凭据以进行上传访问。这假设您只有少数需要访问权限的客户。
底线:安全很重要。然而,您希望“避免向他们发送凭据的麻烦”,也不希望运行系统来执行身份验证检查。不做一些工作就无法获得安全性,而安全性差的成本将远远超过实施良好安全性的成本。
推荐阅读
- reactjs - 有没有办法替换从子组件传递给 ReactDOM.render() 的第一个参数的内容?
- android - Mockito 不模拟存储库
- acumatica - 在 Acumatica 报表设计器中启用多页子报表
- php - 在 WordPress i18n 项目中,通过使用变量触发内部链接来添加前缀
- postgresql - libpq.so 不在 `pg_config --libdir` 路径中 [OpenSUSE]
- javascript - 过滤具有嵌套结构的 JavaScript 对象
- raml - 我可以在 RAML 文档中包含代码示例吗?
- python - 为什么我不能在 Anaconda 中安装软件包?
- python - 识别数据框中除了多索引中的日期索引值之外相同的行?
- c# - LINQ to SQL 错误。- 类型不能转换为可为空的值