Java S3 Bucket已签名URL以授予对图片的访问权限

Java S3 Bucket已签名URL以授予对图片的访问权限,java,amazon-web-services,amazon-s3,Java,Amazon Web Services,Amazon S3,我正在讨论如何让用户上传的图片只被用户的朋友浏览 到目前为止,我想到的是: 为每个用户创建一个DynamoDB表,并添加朋友/新朋友的动态列表 为每个用户上传的图片生成签名URL 允许DynamoDB表中列出的每个朋友访问已签名的URL以查看设置的图片 这听起来对吗?另外,从技术上讲,我是否可以为所有用户上传的图片提供一个存储桶?我的设计听起来有些不对劲 有谁能给我一个关于如何通过Java实现这一点的快速教程吗?有两种基本方法: Amazon S3中的权限,或 AmazonS3中应用程序控制的

我正在讨论如何让用户上传的图片只被用户的朋友浏览

到目前为止,我想到的是:

  • 为每个用户创建一个DynamoDB表,并添加朋友/新朋友的动态列表

  • 为每个用户上传的图片生成签名URL

  • 允许DynamoDB表中列出的每个朋友访问已签名的URL以查看设置的图片

  • 这听起来对吗?另外,从技术上讲,我是否可以为所有用户上传的图片提供一个存储桶?我的设计听起来有些不对劲


    有谁能给我一个关于如何通过Java实现这一点的快速教程吗?

    有两种基本方法:

    • Amazon S3中的权限,或
    • AmazonS3中应用程序控制的对象访问
    亚马逊S3中的权限

    您可以提供凭证(通过IAM或Amazon Cognito),允许用户访问Amazon S3 bucket中的特定路径。例如,每个用户都可以在bucket中拥有自己的路径

    您的应用程序将生成包含签名的URL,这些签名将它们标识为特定用户,AmazonS3将授予对这些对象的访问权

    这种方法的一个好处是,您可以向用户提供AWS凭据,用户可以直接与AWS进行交互,例如使用来上载/下载文件,而无需始终通过您的应用程序

    应用程序控制对Amazon S3中对象的访问

    在这种情况下,用户在AmazonS3中没有权限。相反,每次应用程序希望生成指向S3中对象的URL时(例如在
    标记中),您都会创建一个预签名URL。这将在有限的时间内授予对对象的访问权限。它只需要几行代码,并且可以在应用程序中完成,而无需与AWS通信来生成URL

    不需要存储预签名的URL。它们是动态生成的


    这种方法的好处是,您的应用程序可以完全控制它们可以访问哪些对象。朋友可以与其他用户共享图片,应用程序将授予访问权限,而第一种方法仅授予用户特定路径内对象的访问权限。

    我不确定此处是否有足够的信息。它也可以是任何类型的数据,限制用户访问是任何后端提供的所有用户身份验证和授权功能的基本元素。您使用什么来管理您的用户?你已经在使用什么技术了?你已经有什么代码了?谢谢你的回复!我正在使用Cognito对用户进行身份验证。我还是AWS的新手,所以说实话,我不确定自己在做什么。我使用Cognito和android studio开发了一个功能齐全的登录/注册系统。所以我可以列出我所有的注册和验证用户。所以我的问题是,用户将图片上传到S3,那么我需要采取什么步骤才能让他们的朋友只查看设置的图片?这是通过dynamo完成的吗?不,这不起作用,因为签名的URL过期了。在用户请求图像文件时,您需要为每个经过身份验证的用户提供一个新的签名URL。是的,您可以使用一个bucket来维护多个用户的文件(只需根据唯一的用户id使用某种前缀对它们进行分区)。另外,请阅读。您不允许“访问”已签名的URL。签名URL是自包含的,拥有该URL允许访问资源。问题:这些图像是以HTML格式出现在网页上,还是作为一个移动应用程序,它可以像获取列表一样工作?如果它是一个应用程序,该应用程序如何准确了解哪些图像可供下载?