首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS S3使用预先签名的URL认证用户访问权限?

AWS S3使用预先签名的URL认证用户访问权限?
EN

Stack Overflow用户
提问于 2019-01-28 15:01:07
回答 2查看 2.3K关注 0票数 4

我想在一个私有的AWS S3桶上托管文件,该桶只能由通过我的web应用程序认证的用户访问。这些文件下载的链接必须是静态的。

简单代理方法:

我知道这可以使用代理服务来完成。在这种情况下,静态链接将指向服务,服务将处理对请求用户会话的验证,如果它是有效的,则服务将响应来自S3的文件内容。

预先签名的URL代理方法:

然而,与其实现代理来访问文件,我还想知道是否可以以某种方式使用预先签名的URL?

https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html

在这种情况下,代理的作用是只向用户返回一个预先签名的URL,而不是从S3返回文件的实际有效负载。最终用户可以使用这个预先签名的URL直接从S3下载文件。我不清楚这个流是如何在浏览器中管理的,我假设我需要将JavaScript写到以下内容:

  1. 从代理服务请求预先签名的URL
  2. 等待回应
  3. 使用响应中提供的预签名URL (预签名URL)下载实际文件

我在这里走得对吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-28 15:09:03

只需将307重定向从您的服务器返回到预先签名的URL。例如,客户请求:

代码语言:javascript
复制
GET /the/file HTTP/1.1

服务器生成一个预先签名的URL并以以下方式进行响应:

代码语言:javascript
复制
HTTP/1.1 307 Temporary Redirect
Location: https://s3.aws..../the/file?...
票数 5
EN

Stack Overflow用户

发布于 2019-01-28 15:20:30

这是个有效的方法。

小心即将到期的全权证书。签名的URL对较少的时间是好的,直到用于签名的访问凭据过期,或者它们的过期时间(在限制范围内由您控制)。如果您已经在使用临时凭据(这非常好!)您可能希望显式地使用AssumeRole来控制过期时间(您可以从角色中承担一个角色,以获得具有新时间限制的新临时凭据)。

还有另一种选择:亚马逊科尼图。这可以弥合用户帐户之间的差距,然后直接向用户的浏览器环境颁发每个用户的短期凭据。然后,他们可以使用自己的凭据对S3进行API调用。这有一些好处(您可以在他们的配置文件中更好地表示用户权限,而不是在生成URL之前亲自检查它们)和一些复杂性(我可以用我的用户DoS来管理您的帐户,还是可以控制我可以调用的API?)在另一个方面,IAM呼叫是免费的,而且您不需要为服务器支付托管费用,所以如果您使用的是联邦身份-用户池,这听起来很划算。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54404672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档