我是S3的新手,我想知道现实世界中的Web应用程序通常如何与之交互,尤其是如何处理用户访问权限。
例如,我设计了一个基本的项目管理Web应用程序,除其他功能外,该应用程序允许用户将项目文件上载到其他项目成员可以访问的共享空间中。
因此,用户文件的上载/读取访问权限将取决于项目成员资格,也取决于项目角色。
使用S3,是否会简单地为一个具有所有权限的S3用户为整个应用程序创建一个存储桶,然后将用户权限的处理留给应用程序?还是我错过了什么?我无法在线找到许多实际使用S3的示例,特别是在涉及访问权限的情况下。
答案 0 :(得分:2)
典型的体系结构是将Amazon S3存储桶保留为完全私有。
当您的应用程序确定允许用户上传或下载文件时,它可以生成Presigned URL。这是一个限时URL,允许上载或下载对象。
上传时,还可以Create a POST Policy对上传施加一些限制,例如上传的长度,类型和存储位置。如果上传符合要求,则文件将被接受。
您应该维护数据库,该数据库标识所有已上传的对象,并将其映射到“所有者”,权限组,共享等。所有这些都是特定于应用程序的。稍后,当用户请求下载特定对象时,您的应用程序可以生成一个预先签名的URL,该URL允许用户下载该对象,即使是私有对象也是如此。
始终让您的应用程序确定访问对象的权限。 请勿将应用程序用户定义为IAM用户。
如果存在直接权限模型(例如,一个用户的所有文件都在S3存储桶中的一个路径/文件夹中),则可以使用 AWS安全令牌服务生成临时凭证在给定路径上授予“列表”和“获取”权限。这对于可以直接调用Amazon S3 API检索对象的移动应用程序很有用。但是,它不适用于基于Web的应用程序。