如何验证大量的亚马逊S3获取请求

时间:2017-02-03 16:08:39

标签: authentication amazon-s3

这应该很简单,但我找不到任何内容。 我有一个具有大量地图图块的地图应用程序。我正在考虑托管亚马逊S3存储桶中的所有磁贴,使它们更贴近用户,但只希望我的网页用户访问它们。

所以,我已经创建了这个存储桶,我有一个对存储桶具有读取权限的IAM用户,如何验证客户端浏览器获取文件的请求?

我可以在服务器端为每个文件创建一个签名的URL,但是用户可能会在一秒钟内发出大量请求,而当我发回签名的URL时,我可能刚刚发送了该文件,再加上我们就失去了缓存。

用户在本地进行身份验证。我不希望将密钥发送给客户端。

1 个答案:

答案 0 :(得分:3)

  

当您不想更改当前网址或希望提供对多个受限文件的访问权限时,CloudFront签名的Cookie允许您控制谁可以访问您的内容,例如订阅者区域中的所有文件一个网站。

     

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-cookies.html

与S3预签名网址不同,CloudFront签名Cookie(以及CloudFront签名网址)允许您创建一个签名策略,允许用户访问与通配符匹配的受保护内容,例如from dateutil.parser import parse parse("12 05:37:52") # datetime.datetime(2017, 2, 12, 5, 37, 52) parse("05:37:52") # datetime.datetime(2017, 2, 6, 5, 37, 52)

签名的cookie(实际上是3个一起工作的cookie)告诉CloudFront允许浏览器访问所请求的对象。

CloudFront使用名为origin access identity的对象与S3集成。在CloudFront后面配置S3时,一旦CloudFront验证请求是否已获得授权(通过CloudFront签名cookie,CloudFront签名URL或配置为不限制存储区访问的缓存行为),原始访问标识的凭据将用于签名请求并将其发送到S3以获取对象,假设请求的CloudFront边缘尚未缓存对象。

通过使用原始访问标识(您授予从桶中读取的权限),在存储桶策略中,CloudFront可以从存储桶读取非公共对象,并将它们提供给授权请求者。

用于签名cookie的凭据不是IAM凭证 - 一组独立的凭证与原始访问身份相关联。

由于CloudFront生成并发送给S3的签名URL对浏览器不可见(这一切都在后端完成),因此使用S3签名URL不会对对象的浏览器可缓存性产生负面影响能。

在将CloudFront与S3一起使用时,请查看CloudFront和S3定价表,以熟悉对S3定价的影响。由于CloudFront具有使用与AWS其他部分不同的区域边界的地理定价,因此涉及许多变量。 CloudFront有自己的成本,但会大幅降低S3的成本,有时导致CloudFront + S3的成本略低于仅使用S3的成本(可能这是因为将流量从AWS核心转移到边缘代表成本亚马逊的储蓄,这是建立在价格结构中的。)