使用源访问身份(OAI)限制对 Amazon S3 内容的访问

使用源访问身份限制对 Amazon S3 内容的访问

很多互联网公司,会选择将图片放在S3上,并利用CloudFront对存储桶的内容进行加速分发,这样用户就可以通过S3访问图片,也可以通过CloudFront的域名来访问图片,但是,公司希望能够限制对S3内容的访问,只希望用户通过CloudFront的域名来访问,从而达到加速的效果。可以通过下面几个步骤达到这一需求。

  1. 创建cloudfront加速的源S3桶
  2. 创建一个称为源访问身份 (OAI) 的特殊 CloudFront 用户 ,可在创建CloudFront分发的时候创建
  3. 配置 S3 存储桶权限,以便 CloudFront 能够使用 OAI 访问存储桶中的文件并将这些文件提供给您的用户

OAI创建和自动配置S3存储桶权限(配置Cloudfront时创建)

  • 限制存储桶访问:选择(如果您希望要求用户始终使用 CloudFront URL 而非 Amazon S3 URL 访问您的 Amazon S3 内容,请单击“是”。当您使用签名的 URL 或签名的 Cookies 来限制对您的内容的访问时,这会很有用。)
  • 源访问身份(OAI):选择创建新身份,并选择更新存储桶策略(否则需要自己去S3修改存储桶策略)

使用源访问身份(OAI)限制对 Amazon S3 内容的访问

效果展示

  • 通过S3 URL访问对象

使用源访问身份(OAI)限制对 Amazon S3 内容的访问

  • 通过CloudFront URL访问对象

使用源访问身份(OAI)限制对 Amazon S3 内容的访问

这样就可以达到我们想要的效果了,也就是S3 URL访问不到,只能通过CloudFront URL 访问。

注意事项

在创建 Amazon S3 存储桶之后,存储桶名称最多需要 24 小时才能传播到所有 AWS 区域。在此期间,向与 S3 存储桶不在同一个区域中的区域终端节点发送请求时,您可能会收到“307 临时重定向”响应。

  • 例如,如果您创建一个新的存储桶并立即向该存储桶发出请求,则可能会收到临时重定向,具体取决于存储桶的位置限制。如果您在美国东部(弗吉尼亚北部)AWS地区创建了存储桶,则不会看到重定向,因为这也是默认的AmazonS3终端节点。
  • 但是,如果在其他任何区域中创建了存储桶,则在传播存储桶的DNS条目时,对存储桶的所有请求都会转到默认端点。默认终结点使用HTTP302响应将请求重定向到正确的终结点。临时重定向包含指向正确工具的URI,您可以使用该URI立即重新发送请求。

解决方法:如果您使用 Amazon CloudFront 分配功能并以 Amazon S3 为源,CloudFront 将请求转发到默认 S3 终端节点 (s3.amazonaws.com),即位于 us-east-1 区域。如果您必须在创建存储桶的前 24 个小时内访问 Amazon S3,可以更改分配的原始域名以包括存储桶的区域终端节点。例如,如果存储桶位于 us-west-2,您可以将原始域名从 bucketname.s3.amazonaws.com 更改为 bucketname.s3-us-west-2.amazonaws.com。