AWS S3 CORS 策略是否处于文件级别?

问题描述 投票:0回答:1

我正在尝试将 CORS 策略应用于我的 S3 存储桶,我观察到,如果在任何时间点修改 CORS 策略,上传到 S3 的旧文件仍然不使用新文件CORS 政策。例如

  1. 我创建了一个 S3 存储桶“X”
  2. 添加了以下 CORS 政策 -

    <CORSConfiguration>
    <CORSRule>
        <AllowedOrigin>https://app1.example.com</AllowedOrigin>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <ExposeHeader>ETag</ExposeHeader>
        <ExposeHeader>x-amz-meta-custom-header</ExposeHeader>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    </CORSConfiguration>
    
  3. 已成功从托管在

    https://app1.example.com
    上的应用程序上传文件 a.jpeg。我还能够执行 GET 和 DELETE。

  4. 现在我需要为我的另一个托管应用程序(例如 app2)使用相同的 S3 存储桶。所以我将 CORS 政策修改为 -

    <CORSConfiguration>
    <CORSRule>
        <AllowedOrigin>https://app1.example.com</AllowedOrigin>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <ExposeHeader>ETag</ExposeHeader>
        <ExposeHeader>x-amz-meta-custom-header</ExposeHeader>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    <CORSRule>
        <AllowedOrigin>https://app2.example.com</AllowedOrigin>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <ExposeHeader>ETag</ExposeHeader>
        <ExposeHeader>x-amz-meta-custom-header</ExposeHeader>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    </CORSConfiguration>
    
  5. 现在,当我尝试从

    https://app2.example.com
    获取文件 a.jpeg 时,我仍然看到以下错误

    XMLHttpRequest cannot load <S3 URL>. Origin https://app2.mydomain.com is not allowed by Access-Control-Allow-Origin.
    
  6. 但是,如果我尝试从

    https://app2.mydomain.com
    上传新文件 b.jpeg,一切都会按预期进行。

编辑

我忘了之前提到这一点,但我们的 S3 存储桶前面有一个 CloudFront CDN,但我在 Cloudfront 配置中找不到与设置 CORS 策略相关的任何配置。

是否有一种方法可以对以前上传的文件强制执行新的 CORS 政策?或者还有其他方法可以实现此功能吗?

amazon-web-services amazon-s3 cors
1个回答
0
投票

CORS 标头是 CloudFront 中缓存响应的一部分 - 因此,虽然您可能在存储桶级别设置它们,但只有新对象才能看到它。缓存的对象需要过期才能显示新的标头。

考虑使您的 CloudFront 缓存失效 (https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html) 或将 TTL 设置得更低,以强制 CloudFront 在合理的时间内从 S3 刷新对象时间范围。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.