【问题标题】:AWS roles and policies - limit access to one bucketAWS 角色和策略 - 限制对一个存储桶的访问
【发布时间】:2021-07-18 16:51:37
【问题描述】:

假设我有 1k 个用户(不是 AWS 用户),每个用户都有自己的 S3 存储桶。我将为他们使用签名的 URL 来访问他们的数据。出于安全原因,我想在创建签名 URL 时扮演一个角色,以便仅当他们开始弄乱 URL 时才将其限制在他们的存储桶中。

最好的方法是什么?为每个用户创建角色和策略?在创建签名 URL 时,我可以创建一个附加策略的角色吗?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    您应该为每个用户创建一个存储桶。存储桶不是可扩展的资源,因为 AWS 账户中的存储桶数量是有限制的。

    您可以将所有用户数据保存在一个存储桶中。如果您希望按用户进行隔离,请使用子目录。

    另一种方法是将所有数据混合在一起,而不是按用户划分。您的应用程序应维护每个对象的数据库,以及诸如“所有者”、创建时间、任何共享权限等元数据。然后,您的应用程序可以使用Amazon S3 pre-signed URLs 为用户提供对其数据的访问权限。这样,您的应用就可以控制访问。

    这种方法的一个好处是数据可以在用户之间共享。例如,假设您有一个照片共享应用程序,并且用户想要与另一个用户共享照片。该应用程序可以维护用户之间共享内容的列表,然后创建预签名 URL 以让用户访问由其他用户上传的数据。决定所有权而不是文件放置位置的是应用程序。

    您不必担心预签名的 URL 会提供对其他内容的访问权限。预签名 URL 包含验证对象和到期时间的散列签名。签名不能进行逆向工程,也不能用于授予对其他资源的访问权限。无需使用具有权限子集的特定 IAM 角色。

    【讨论】:

    • 谢谢约翰。您的评论解决了很多我一直在思考如何解决但没有写在 OP 中的问题。我怎么强调都不过分,非常好的答案
    • 我正在尝试这样做,但我无法为 URL 设置过期时间。谷歌搜索它说它应该是 Expires 但我得到一个 paramValidation 错误。 presigned_url = s3.generate_presigned_url(ClientMethod='get_object', Params={ 'Bucket': 'my_bucket', 'Key': key, 'Expires': 3600 }, )
    • 使用ExpiresIn。见:Presigned URLs — Boto3 documentation
    猜你喜欢
    • 1970-01-01
    • 2018-06-08
    • 2016-03-16
    • 2018-05-29
    • 2016-10-31
    • 2021-09-27
    • 1970-01-01
    • 2018-08-09
    • 2015-11-02
    相关资源
    最近更新 更多