我正在集思广益,讨论如何让用户上传的图片只能由用户的 friend 查看。
所以到目前为止我想到的是:
为每个用户创建一个 DynamoDB 表,并添加好友/新好友的动态列表。
为每个用户上传的图片生成签名 URL。
允许 DynamoDB 表中列出的每位 friend 访问签名 URL 以查看设置的图片。
这听起来正确吗?另外,从技术上讲,我是否只有一个存储桶来存放所有用户上传的图片?我的设计听起来有些不对劲……
任何人都可以给我一个关于如何通过 Java 完成此任务的快速教程吗?
最佳答案
有两种基本方法:
- Amazon S3 中的权限,或
- 应用程序控制对 Amazon S3 中对象的访问
Amazon S3 中的权限
您可以提供凭证(通过 IAM 或 Amazon Cognito),以允许用户访问Amazon S3 存储桶内的特定路径。例如,每个用户可以在存储桶中拥有自己的路径。
您的应用程序将生成包含将其标识为特定用户的签名的 URL,并且 Amazon S3 将授予对这些对象的访问权限。
此方法的一个好处是,您可以向用户提供 AWS 凭证,他们可以直接与 AWS 交互,例如使用 AWS Command-Line Interface (CLI)上传/下载文件,而不必总是通过您的应用程序。
应用程序控制的对 Amazon S3 中对象的访问
在此场景中,用户在 Amazon S3 中没有任何权限。相反,每次您的应用程序希望生成 S3 中对象的 URL(例如 <img>
标记中)时,您都会创建一个预签名 URL。这将授予在有限时间内对该对象的访问权限。只需几行代码,即可在应用程序内完成,无需与 AWS 通信即可生成 URL。
无需存储预签名 URL。它们是即时生成的。
这种方法的好处是您的应用程序可以完全控制它们可以访问哪些对象。 friend 可以与其他用户共享图片,应用程序将授予访问权限,而第一种方法仅授予对用户特定路径内的对象的访问权限。
关于java - 用于授予图片访问权限的 S3 存储桶签名 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45392294/