为什么可以';我是否可以使用AWS javascript sdk删除s3存储桶中的对象?

为什么可以';我是否可以使用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

我在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: '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
或您拥有的版本/编码信息。