amazon-web-services - 保护 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。有人可以在这里帮忙吗?
解决方案
这样做的方法是创建一个 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 分发可能需要一些时间来复制。