AWS S3 Bucket CORS 配置:策略阻止所有访问

Mel*_*Mel 6 amazon-s3 amazon-web-services cors

我正在尝试弄清楚如何配置 AWS S3 存储桶,以便我可以上传到它。我按照本教程中的说明进行操作,但仍然收到错误消息:

从源“http://localhost:3000”获取“https://s3.ap-southeast-2.amazonaws.com/”的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,请将请求模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。

我有一个存储桶(在开发中),具有以下 CORS 策略:

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": []
    }
]
Run Code Online (Sandbox Code Playgroud)

我有一个存储桶策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:List*",
                "s3:Get*"
            ],
Run Code Online (Sandbox Code Playgroud)

// 注意:我还尝试使用通配符“*”来允许所有操作,但我得到了与上面所示相同的错误消息

        "Resource": [
            "arn:aws:s3:::[MY_BUCKET_NAME]",
            "arn:aws:s3:::[MY_BUCKET_NAME]/*"
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

}

我可以看到AWS策略有一个额外的ACL部分,其中有勾选列表和读取的选项,但写入按钮呈灰色,并警告不要使用它以允许每个人写入。我勾选了它们以允许每个人都可以公开访问以列出和阅读(我不知道如何编辑灰色的写入选项)。我处于开发模式,想找到一种方法来测试连接是否可以正常工作,所以想写。即使当我尝试这样做时,我也会遇到与上面发布的相同的错误。

我正在寻找有关如何连接到 AWS S3 存储桶的最新说明。配置要求的变化似乎比博客教程的创建还要快。SO 上的许多答案不再映射到 AWS S3 配置文件中的配置设置。

Reg*_*ole 9

您收到的 CORS 错误应该仅与 CORS 配置有关,与存储桶策略无关。

我注意到您引用的错误消息不包含存储桶名称。通常对于 CORS 错误,它应该如下所示:

'https://<bucket>.s3.eu-west-2.amazonaws.com/' from origin 'https://localhost:3001' has been blocked by CORS policy
Run Code Online (Sandbox Code Playgroud)

建议您仔细检查代码中的 BUCKET_NAME。

另外,我不知道您使用哪种方法来调用 API,但为了完整起见,您也可以包含该HEAD方法。

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "POST",
            "GET",
            "PUT",
            "DELETE",
            "HEAD"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": []
    }
]
Run Code Online (Sandbox Code Playgroud)

对我来说,这对于从客户端上传来说效果很好。