为什么可以';我是否可以使用AWS javascript sdk删除s3存储桶中的对象?
我在s3上有一个bucket,里面有我的网站可以通过aws javascript sdk删除的对象。作为参考,我的网站位于us-east-1地区的s3上,我的bucket中包含需要通过网站删除的对象,该bucket位于us-west-1 我在我的网站上尝试了以下代码:为什么可以';我是否可以使用AWS javascript sdk删除s3存储桶中的对象?,javascript,amazon-web-services,amazon-s3,cors,Javascript,Amazon Web Services,Amazon S3,Cors,我在s3上有一个bucket,里面有我的网站可以通过aws javascript sdk删除的对象。作为参考,我的网站位于us-east-1地区的s3上,我的bucket中包含需要通过网站删除的对象,该bucket位于us-west-1 我在我的网站上尝试了以下代码: var bucketInstance = new AWS.S3({region: 'us-west-1'}); var params = { Bucket: 'MyBucketName', Key: 'photoT
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://MyDomain.com因此,不允许访问。响应的HTTP状态代码为403
2) aws sdk.js:2122选项403(禁止)
3) 无法加载XMLHttpRequest。对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。起源'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 bucket具有以下bucket策略:
{
"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>
MyDomain.com
得到
放
邮递
删除
3000
授权
我还为bucket上的每个人设置读写权限。你知道我为什么会出现这个令人沮丧的错误吗?你需要以错误中显示的方式添加你的域 &许可证
https://example.com
放
邮递
删除
*
*
得到
您需要以错误中显示的方式添加域
&许可证
https://example.com
放
邮递
删除
*
*
得到
看来CORS配置是出问题的地方。您可以尝试将允许的原点更改为*
以重新测试吗?感谢您的建议-我将原点更改为*并且出现了相同的结果!我在这里认真地抓住了线索,但我能找到的所有示例/示例都没有指定xmlns
或您拥有的版本/编码信息。看起来CORS配置是出问题的地方。您可以尝试将允许的原点更改为*
以重新测试吗?感谢您的建议-我将原点更改为*并且出现了相同的结果!我在这里认真地抓住了要点,但我能找到的所有示例/示例都没有指定xmlns
或您拥有的版本/编码信息。