Rails 6 - 根据用户角色允许/禁止下载 AWS S3 上文件的文件

Mil*_*ind 5 ruby-on-rails amazon-s3 amazon-web-services aws-sdk-ruby

我有一个 Rails 6 应用程序,注册用户(所有者)可以在 S3 上上传文件 -图像/视频,然后所有者可以向其他用户(邀请)提供访问权限以查看他们上传的内容。

有没有办法限制文件访问,以便只有所有者才能下载他上传的文件(图像/视频),从而对其他非所有者/受邀用户进行限制。视频/图像不应该通过右键单击并保存/下载来如此轻松地下载。

注意- 上传的文件还包括大视频(mp4 和 HLS 流),因此其他受邀用户可以查看它们,但无法下载,除非他们是所有者/上传者,因为文件来自 AWS Cloudfront 的视频和 S3(如果他们是)是图像。

协会的设置如下 -

User has one role
User has many images/videos, each residing in his own folder on s3(`bucket/user_id/image_slug/` or `bucket/user_id/video_slug/`)
User has many invitations(must be view only access to owners file)
Run Code Online (Sandbox Code Playgroud)

不确定,什么是正确的方法,可以 -

  • 如果非所有者访问该文件,是否更新该文件的 ACL 并将其设为只读?
  • 公开所有上传的文件并禁止非所有者的公共访问,但这也会限制对文件的直接访问。

让我知道最适合这种方法的逻辑是什么。

小智 2

您想要实现的目标需要多个层面的基础:

  1. 根据S3 安全最佳实践,您应该将 S3 端的权限级别保持在最低,足以让应用程序提供预期的行为。

  2. S3 允许您授予对用户特定文件夹的访问权限

  3. 您应该查看授予 gem 的访问权限以涵盖服务器端限制。您还应该研究客户端限制。一种常见的技术是禁用鼠标右键单击。

有关的:

如何在不显示 S3 UR 的情况下下载文件

视频流平台的 7 大安全功能

Netflix 如何保护其内容