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

0

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

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

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

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

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

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

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

profile picture
EXPERTE
gefragt vor 6 Monaten13 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen