为授权用户设置S3存储桶的策略

时间:2016-10-24 09:13:55

标签: amazon-web-services amazon-s3

我正在尝试为S3存储桶设置策略,因此只能通过URL访问内部文件,仅供经过身份验证的用户使用。我们的想法是只在另一个系统中存储链接而不是文件,当用户想要下载文件时,他们会点击链接。我希望用户在AWS中拥有一个帐户,并授予他下载文件的权限。

但是这个解决方案对我的帐户不起作用。我收到错误代码403 Access Denied。

仅在我设置"Principals" : "*"时 那么文件是可访问的。但我只需限制对注册用户的访问权限。

有人可以帮忙吗? 非常感谢你提前。

亲切的问候,

兰卡

1 个答案:

答案 0 :(得分:1)

要理解的重要一点是,您希望授予对授权用户的访问权限。因此,当用户请求文件时,他们需要提供其身份验证。如果您只是通过匿名链接(例如s3.amazonaws.com/my-bucket/file.txt)访问文件,那么Amazon S3不知道他们是谁,并将拒绝该请求。

有几种方法可以做到:

  • 通过使用AWS SDK的编程语言调用GetObject命令。每次通话都会附有识别用户的访问凭证。
  • 网络浏览器通过传递哈希授权字符串GET requestknown as Signature v4来识别用户
  • 通过Amazon S3 Pre-Signed URL通过哈希授权字符串授权临时访问到Amazon S3中的对象

最合适的解决方案是使用Amazon S3 Pre-Signed URL

Pre-Signed URL 可用于授予对S3对象的访问权限,作为"覆盖"访问控制。通过附加到期时间和签名,可以通过URL访问通常的私有对象。这是一种在不需要Web服务器的情况下提供私有内容的好方法。

使用预签名网址的好处是您的用户不需要AWS凭据。应用程序的责任适当地对用户进行身份验证,以确定是否允许他们访问S3中的对象。如果他们被授予访问权限,那么您的应用程序应为对象生成预签名URL作为经过身份验证的链接。这些网址仅对有限的持续时间有效。

也可以通过aws s3 presign中的AWS Command-Line Interface (CLI)命令生成预签名网址。