gpt4 book ai didi

javascript - 为什么我无法使用 AWS javascript sdk 删除 s3 存储桶中的对象?

转载 作者:行者123 更新时间:2023-11-28 04:42:42 27 4
gpt4 key购买 nike

我在 s3 上有一个存储桶,其中包含我的网站能够通过 aws javascript sdk 删除的对象。作为引用,我的网站托管在 us-east-1 区域的 s3 上,而我的存储桶(其中包含需要通过网站删除的对象)位于 us-west-1 中。

我在我的网站上尝试了以下代码:

var bucketInstance = new AWS.S3({region: 'us-west-1'});
var params = {
Bucket: 'MyBucketName',
Key: 'photoToDelete.JPG'
};
bucketInstance.deleteObject(params, function (err, data) {
if (data) {
console.log("Photo deleted successfully");
}
else {
console.log("Check if you have sufficient permissions : "+err);
}
});

但是没有成功 - 控制台中出现以下错误:

1) XMLHttpRequest 无法加载 https://MyBucketName.s3-us-west-1.amazonaws.com/photoToDelete.JPG 。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin” header 。因此,不允许访问源“https://MyDomain.com”。响应的 HTTP 状态代码为 403。

2) aws-sdk.js:2122 选项 https://MyBucketName.s3.amazonaws.com/?max-keys=0 403(禁止)

3) XMLHttpRequest 无法加载 https://MyBucketName.s3.amazonaws.com/?max-keys=0 。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin” header 。因此,不允许访问源“https://MyDomain.com”。响应的 HTTP 状态代码为 403。

这些错误似乎在控制台中重复出现了一些。

这是怎么回事?

为了引用前面的代码,我配置了 AWS SDK,如下所示:

AWS.config.region = 'us-east-1'; // 1. Enter your region

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:*MyIdentityPoolId*'
});

我认为这些可能会导致问题,因为需要删除的对象所在的 s3 存储桶位于 west 1,但我的网站以及我设置的所有 lambda 函数和 api 网关自然位于 east-1我将 AWS.config.region 和凭证配置为 east 值。我不确定这是否会导致这个问题。我明确将 s3 区域设置为 west 1,并且不可能在 us-west-1 中创建 IdentityPool,因此我怀疑这些配置值是否导致了错误,但它们可能是。

最后,us-west-1 中包含需要删除的对象的 s3 存储桶具有以下存储桶策略:

{
"Version": "2012-10-17",
"Id": "Policy2354434234",
"Statement": [
{
"Sid": "MakeItPublic",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:DeleteObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::MyBucketName/*"
}
]
}

我设置 CORS 配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>MyDomain.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

我还为存储桶上的每个人设置了读取和写入权限。知道为什么我会收到这个非常令人沮丧的错误吗?

最佳答案

您需要按照错误中显示的方式添加域&AllowedHeader 恶意卡

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>

<AllowedOrigin>https://example.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>

关于javascript - 为什么我无法使用 AWS javascript sdk 删除 s3 存储桶中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43628570/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com