首页 > 解决方案 > 如何根据网站用户在 S3 上添加非公开网站文件?

问题描述

在我们的网站上,我们希望添加上传个人文件的可能性。这些文件应该是非公开的,并且可以选择与网站上的其他人共享。我曾经为另一个项目构建了一个类似的功能,其中我将文件存储在服务器上的 MongDB 实例中。这使我们能够为每个文件构建细粒度的可访问性规则。然而,对于这个项目,我们希望将文件存储在 Amazon S3 上。现在我想知道如何使用 S3 构建类似的可访问性规则。

我以前在 S3 上存储过文件,但那些只是公共文件。由于这些文件仅限于一个特定用户(或与文件共享的用户),我不确定如何使用 S3 做到这一点。我在互联网上进行了搜索,发现了一些有关定义用户策略的信息。然而,这些策略基于 S3 用户,而不是基于我的网站用户。所以我真的找不到这样做的标准方法(或者我正在寻找错误的词)。

有没有一种方法可以要求 S3 上的文件的特定秘密,可能在 url 中?还是有其他标准方法可以实现这一目标?

欢迎所有提示!

标签: amazon-web-servicessecurityamazon-s3

解决方案


如果您对用于内容存储的 S3 感到满意,您可以查看 AWS CloudFront CDN 和 API 以提供访问控制。Cloud Front 很乐意使用 S3 存储桶作为私有来源,并提供签名 URL 以授予临时访问权限。

您可以以编程方式从指向 s3 中资源的代码生成云端 URL,它将强制执行您提供的策略。该 url 提供基于各种标准(如IpAddress和)的临时访问DateLessThan。这些可用于动态构建限制为特定 IP(即当前用户 IP)的 url,并且仅在特定日期/时间之前有效。

取自 AWS 文档: 典型的 s3 支持的 Cloudfront 分发

A signed URL includes additional information, for example, an expiration date and time, that gives you more control over access to your content. This additional information appears in a policy statement, which is based on either a canned policy or a custom policy.

请参阅 AWS 文档:https ://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html


推荐阅读