使用Cloudfront和S3网站搭配,外加一个用于特定媒体的第二个存储桶。

0

【以下的问题经过翻译处理】 大家好,我有一个具体需求,但却无法实现。

我已经配置了Cloudfront和OAI,以提供带有静态网站的S3桶。目前为止,主桶中的OAI策略已经按预期工作了。

但是,业务要求我们提供一些培训视频,他们不想将这些视频放在同一个桶中,因为这不是静态的。

我已将包含媒体的第二个桶(即次要桶)更新为与主桶相同的策略(OAI权限),但尝试加载内容时仍然无法访问。

我的困惑在于:如果我更新策略以允许IP源从次要桶访问,则开发人员就可以使用S3 URL加载内容。如果我移除IP策略,只留下OAI,则网页会显示403状态码。我尝试搜索整个CloudFront和S3文档,但找不到此类情况的应对方案。

我看到的一个建议是创建另一个CloudFront分发来服务次要桶,但我缺乏相关开发知识,不知道如何在不创建整个网页的情况下服务媒体文件。您是否遇到过这种情况?您是否了解可以在次要桶上设置的其他策略,以允许主桶+OAI使用S3 URL访问媒体?我尝试使用预签名URL解决方案,但我找不到一种方法让开发人员在网页中生成和提供此类内容(我知道如何这么做,但不知道该如何考虑业务需求)。

感谢您的时间和帮助。我非常感激!

profile picture
专家
已提问 5 个月前10 查看次数
1 回答
0

【以下的回答经过翻译处理】 嗨,Gabriel

我了解并使用CloudFront和S3,我希望可以帮助你解决问题。

首先,你的使用情况是非常常见的,所以没有什么问题。

通常,当bucket的权限不正确或者你试图访问不存在的文件路径/文件时,S3会返回403错误。而使用OAI是访问私有bucket的最佳方式。

因此,请确保你的设置如下:

S3 Bucket

  1. 确保你的源是S3源类型,而不是自定义源。这将针对静态bucket和媒体bucket。
  2. S3 Bucket Access,选择你的OAI,并让CloudFront为你更新bucket策略。
  3. 保存更改。

CloudFront

对于行为,我假设你的静态网站位于bucket的根目录。这没有问题。

  1. 确保媒体内容在文件夹中,而不是bucket的根目录。示例:bucket-name/mediafolder/mediafile.mp4
  2. 创建一个行为,将行为路径设置为/ mediafolder/ *。
  3. 对于源,选择S3媒体桶。
  4. 选择你的协议和允许的方法。
  5. 如果你想缓存内容,请选择CachingOptimized策略,否则选择CachingDisabled策略。
  6. 对于源请求策略,选择CORS-S3Origin。但是,如果你不做CORS请求,则可以将其保留为None并保存行为。
  7. 为所有其他请求设置默认行为,主要针对你的静态bucket。

请注意,在使用S3时,URL和行为路径需要与S3文件夹结构匹配。如果你的URL是https://example.com/media/mediafile.mp4,那么就需要有这样的文件夹结构。bucketname/media/mediafile.mp4。

如果上述方法不起作用,请告诉我。我们可以进一步研究

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则