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

时间:2019-05-20 15:20:49

标签: amazon-web-services amazon-s3

免责声明:我是AWS的新手。

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

我尝试通过Java SDK使用ACL,但没有运气。另外,我认为IAM在这里不可用,因为用户是客户端,即他们没有AWS账户。

欢迎任何建议或纠正!

2 个答案:

答案 0 :(得分:1)

一种实现方法是设置一个后端应用程序,该应用程序将向您的客户端公开REST API。 这个应用程式可以在执行个体上执行,也可以没有伺服器。 BE应用程序将包含S3上用户权限的逻辑。 S3存储桶将是私有的,只有BE才能对其进行访问。

如何在AWS Elastic Beanstalk(Python烧瓶)上设置REST API

https://camillovisini.com/barebone-flask-rest-api-on-aws-elastic-beanstalk/

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

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-quick-start.html

答案 1 :(得分:1)

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

  • 对象访问控制列表(ACL):不适用于您的用例,因为不同的用户将需要访问不同的对象
  • 存储桶策略:可以授予对整个存储桶或存储桶中路径的公共访问权限。再次,不适用,因为它使对象公开,而不是授予特定用户访问权限。
  • IAM策略:可以将权限添加到IAM用户和IAM组,以授予他们对存储桶,路径或对象的访问权限。但是,您的用户来自Cognito,而不是IAM。
  • 预签名URL::这些授予对对象的时间限制访问。这些非常适合您的情况!

预签名URL的工作方式如下:

  • 用户登录到您的应用程序
  • 用户请求访问私有对象,或者您的应用希望在网页上放置指向私有对象的链接(例如,在<img src=.../>标签中)。
  • 您的应用程序验证(允许他们使用您编写的任何业务逻辑)访问对象,然后生成预签名的URL ,并指定 URL的持续时间
  • 用户可以使用此预先签名的URL在指定的时间范围内访问对象

可以用几行代码创建预签名的URL。它可以在应用程序内生成,而无需调用AWS。

请参阅:Share an Object with Others - Amazon S3

相关问题