Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services S3向用户授予对象访问权限_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services S3向用户授予对象访问权限

Amazon web services S3向用户授予对象访问权限,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,免责声明:我是AWS新手 我有一个用例,需要将S3 bucket中的对象的读取权限授予用户列表。所有对象都在同一个桶中。我正在使用Cognito进行用户身份验证 我曾尝试通过JavaSDK使用ACL,但没有成功。此外,我认为IAM在这里不可用,因为用户是客户端,即他们没有AWS帐户 欢迎任何建议或更正 一种方法是设置一个后端应用程序,向客户端公开RESTAPI。 此应用程序可以在实例上运行,也可以是无服务器的。 BE应用程序将包含S3上用户权限的逻辑。 S3存储桶是私有的,只有be可以访问它们

免责声明:我是AWS新手

我有一个用例,需要将S3 bucket中的对象的读取权限授予用户列表。所有对象都在同一个桶中。我正在使用Cognito进行用户身份验证

我曾尝试通过JavaSDK使用ACL,但没有成功。此外,我认为IAM在这里不可用,因为用户是客户端,即他们没有AWS帐户


欢迎任何建议或更正

一种方法是设置一个后端应用程序,向客户端公开RESTAPI。 此应用程序可以在实例上运行,也可以是无服务器的。 BE应用程序将包含S3上用户权限的逻辑。 S3存储桶是私有的,只有be可以访问它们

如何在AWS Elastic Beanstalk(python flask)上设置REST API

如何设置REST API(无服务器)


在Amazon S3中,有几种授予对象访问权限的方法:

  • 对象访问控制列表(ACL):不适用于您的用例,因为不同的用户需要访问不同的对象
  • 存储桶策略:可以授予对整个存储桶或存储桶内路径的公共访问权限。同样,它不适用,因为它将对象公开,而不是授予特定用户访问权限
  • IAM策略:可以向IAM用户和IAM组添加权限,授予他们访问存储桶、路径或对象的权限。但是,您的用户来自Cognito,而不是IAM
  • 预签名URL:这些URL授予对对象的有时间限制的访问权限。这些都是你的理想情况
预签名URL的工作原理如下:

  • 用户登录到您的应用程序
  • 用户请求访问私有对象,或者您的应用程序希望在网页上放置指向私有对象的链接(例如在
    标记中)
  • 您的应用程序验证是否允许他们访问对象(使用您编写的任何业务逻辑),然后生成一个预签名的URL,指定URL有效的持续时间
  • 用户可以使用此预签名的URL在指定的时间范围内访问对象
预签名的URL可以在几行代码中创建。它可以在应用程序中生成,无需调用AWS


请参阅:

您的客户如何进行身份验证?您是否编写了一个基于Cognito的应用程序供他们登录?ACL可以使用电子邮件或规范id完成,但我的用户没有。写上面提到的业务逻辑是我想避免的事情,理想情况下,它都是由Cognito和S3处理的。如果所有用户都获得相同的访问权限,那么Cognito可以做到这一点。经过身份验证后,将为用户分配一个角色,该角色可以授予他们对所需bucket/path的访问权限。这不是管理单个文件或为每个用户提供不同访问权限的好方法,但如果大量用户都希望获得相同的访问权限,则可以。具体的用例是聊天应用程序,即支持聊天组。因此,用户应该只能访问该聊天组中的对象(图像)。用户池组限制为每个用户25个组,因此这不是一个选项。在这种情况下,您的应用程序需要单独确定访问权限,并为允许访问受限内容的用户生成预签名URL。Cognito将帮助识别用户,但您的应用程序将负责细粒度权限。这就是我的想法。感谢您的讨论和使用预签名URL的想法!我会接受你的答案,即使它不是我想要的,它是正确的,它就是它。谢谢