首页 > 解决方案 > 保护 AWS S3 对象免受直接 url 访问

问题描述

我有一个 Angular 应用程序,它作为由云端分发包装的 aws s3 提供的静态托管站点。此外,这个 Angular 应用程序可以访问来自不同 S3 存储桶(随着时间的推移而增长)的所有图像,例如个人资料图片。这个存储桶也被包裹在一个云端分布下。

我的目的是防止任何人使用 url 直接访问这些图像。这些图像应该只能从我的 Angular 应用程序中访问,而不是从外部访问。

我尝试将 CORS 配置添加到我的 S3 存储桶中,如下所示:

<CORSRule>
<AllowedOrigin>https://*.XXXX.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>

此外,我在我的个人资料图片存储桶的云端分发中添加了来源白名单。我仍然无法从浏览器或我的应用程序访问我的个人资料图片。它正在抛出 403。有人可以在这里帮忙吗?

标签: amazon-web-servicesamazon-s3amazon-cloudfront

解决方案


这样做的方法是创建一个 Cloud Front Origin Identity 并将其附加到您的分配中。如果您通过控制台执行此操作,Cloud Front 本身会生成阻止直接访问的 S3 存储桶策略。(https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to- s3.html#private-content-creating-oai )

PS:CloudFront 分发可能需要一些时间来复制。


推荐阅读