【问题标题】:How do web applications typically interact with Amazon S3?Web 应用程序通常如何与 Amazon S3 交互?
【发布时间】:2019-02-13 07:24:09
【问题描述】:

我是 S3 的新手,我想知道现实世界的 Web 应用程序通常如何与之交互,尤其是如何处理用户访问权限。

例如,假设我设计了一个基本的项目管理 Web 应用程序,除其他功能外,它还允许用户将项目文件上传到其他项目成员可以访问的共享空间。

因此,用户文件上传/读取权限将由项目成员以及项目角色决定。

使用 S3,是否会简单地为整个应用程序创建一个 Bucket,其中包含一个具有所有权限的 S3 用户,并将用户权限的处理留给应用程序?还是我错过了什么?我无法在网上找到很多实际使用 S3 的示例,尤其是在访问权限方面。

【问题讨论】:

    标签: amazon-web-services amazon-s3 authorization


    【解决方案1】:

    典型的架构是让 Amazon S3 存储桶完全私有

    当您的应用程序确定允许用户上传或下载文件时,它可以生成Presigned URL。这是一个限时 URL,允许上传或下载对象。

    上传时,也可以Create a POST Policy 对上传实施一些限制,例如长度、类型和存储位置。如果上传符合要求,文件将被接受。

    您应该维护一个数据库,以识别所有已上传的对象并将其映射到“所有者”、权限组、共享等。所有这些都是特定于应用程序的。稍后,当用户请求下载特定对象时,您的应用可以生成一个预签名 URL,让用户可以下载该对象,即使它是私有对象。

    始终让您的应用程序确定访问对象的权限。 不要将应用程序用户定义为 IAM 用户。

    如果有直接的权限模型(例如,一个用户的所有文件都在 S3 存储桶内的一个路径/文件夹中),您可以使用 AWS Security Token Service 生成临时凭证授予对给定路径的 List 和 Get 权限。这对于可以直接调用 Amazon S3 API 来检索对象的移动应用程序非常有用。但是,它不适合基于 Web 的应用程序。

    【讨论】:

    • 谢谢,这让我们对此有所了解。那么,假设一个假设的界面显示了一个文件表,每个文件都与一个下载链接相关联,系统必须为每个文件生成预签名的 url 吗?如果用户在预签名的 url 过期后点击下载链接,该如何处理?
    • 生成预签名 URL 只需几行代码,无需调用 AWS API。因此,制作链接并不繁琐。您可以指定有效期。例如,将其设置为 20 分钟,这个时间足够点击,但又不能太长,以免在链接“乱七八糟”(例如在推文中)出现时造成麻烦。如果他们单击过期链接,S3 会给他们一个错误。他们需要刷新显示链接的应用页面。
    • 有点过时,但关于元数据,如果一个人为所有与上载文件有关的域相关信息维护一个单独的数据库,如前所述,那么 S3 元数据的作用是什么?自定义 S3 元数据的一些实际用途是什么?
    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 2013-08-27
    • 2012-11-15
    相关资源
    最近更新 更多