假设我有1k个用户(而不是AWS用户(,每个用户都有自己的S3存储桶。我将使用签名的URL让他们访问他们的数据。出于安全考虑,我想在创建签名的URL时扮演一个角色,这样只有当他们开始篡改URL时,它才会被限制在他们的bucket中。
最好的方法是什么?为每个用户创建角色和策略?创建签名URL时,我可以创建一个附加策略的角色吗?
谢谢!
您不应该为每个用户创建一个bucket。bucket不是一种可扩展的资源,因为AWS帐户中的bucket数量有限制。
您可以将所有用户数据保存在一个bucket中。如果您希望按用户对其进行隔离,请使用子目录。
另一种方法是将所有数据混合在一起,而不是按用户划分。你的应用程序应该维护每个对象的数据库,以及元数据,如"所有者"、创建时间、任何共享权限等。然后,你的应用可以通过使用Amazon S3预签名URL为用户提供对其数据的访问权限。通过这种方式,您的应用程序可以控制访问。
这种方法的一个好处是可以在用户之间共享数据。例如,假设你有一个照片共享应用程序,一个用户想与另一个用户共享照片。该应用程序可以维护用户之间共享的内容列表,然后创建预先签名的URL,让用户访问其他用户上传的数据。是应用程序决定所有权,而不是文件的"放置位置"。
您不应该害怕预先签名的URL可以访问其他内容。预签名的URL包含一个散列签名,用于验证对象和到期时间。签名不能进行反向工程,也不能用于授予对其他资源的访问权限。不需要使用具有权限子集的特定IAM角色。