如何根据网站用户在S3上添加非公共网站文件?

时间:2018-05-09 15:50:54

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

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

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

有没有办法可以在S3上为文件要求特定的秘密,可能在网址中?或者还有其他标准方法来实现这一目标吗?

欢迎所有提示!

1 个答案:

答案 0 :(得分:3)

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

您可以从代码中以编程方式生成指向s3中资源的云端URL,它将强制执行您提供的策略。该网址根据if (!isset($_SESSION['language']) || isset($_GET['language'])) { if (isset($_GET['language']) && !empty($_GET['language']) && $OSCOM_Language->exists($_GET['language'])) { $OSCOM_Language->set($_GET['language']); } $_SESSION['language'] = $OSCOM_Language->get('code'); // default language } IpAddress等各种条件提供临时访问权限。这些可以用于动态构建限于特定IP(即当前用户IP)的URL,并且仅在特定日期/时间之前有效。

取自AWS文档: Typical s3 backed Cloudfront distribution

DateLessThan

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