【问题标题】:CORS via accessing Amazon S3 via JavascriptCORS 通过 Javascript 访问 Amazon S3
【发布时间】:2017-02-05 19:15:54
【问题描述】:

我已经完成了 stackoverflow 中提到的所有解决方案,但我无法解决错误。我在 S3 中列出我的所有存储桶时收到 403 错误,并且在列出特定存储桶中的对象时也收到相同的错误。

我在 S3 上更改了我的 CORS 配置,如下所示

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

但没有白费。我的代码如下所示

s3=new  AWS.S3({ accessKeyId: userId ,secretAccessKey: password, sslEnabled: false, s3ForcePathStyle: true});
    function listBuckets(){
        $("#function").empty();
        $("#function").hide();
        $("#listObjectsOption").hide();
        $("#uploadFile").hide();
        s3.listBuckets(function(err,data){
      console.log(data);
    }

我使用的浏览器是谷歌浏览器。

任何人都可以请建议。我得到的错误是

aws.js:8167 OPTIONS 
XMLHttpRequest cannot load http://s3.amazonaws.com/. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 403.

我也无法创建存储桶或采取任何行动。

【问题讨论】:

    标签: javascript amazon-web-services amazon-s3 cors


    【解决方案1】:

    可能与 CORS 无关,因为您在这里使用的是 API。您使用的访问/密钥的用户可能没有必要的权限。 listBuckets 需要这样的策略:

    {
            "Sid": "Stmt1472023667000",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": [
                "*"
            ]
    }
    

    【讨论】:

    • 添加 ListAllMyBuckets 表示操作无效
    • docs.aws.amazon.com/AWSJavaScriptSDK/guide/… 中的“为 Amazon S3 存储桶配置 CORS”下它说“请注意,这不会授权用户对存储桶执行任何操作,它只是使浏览器的安全模型允许对 S3 的请求。用户的实际权限必须通过存储桶权限或 IAM 角色级别权限进行配置。”。是否设置了这些 IAM 角色级别权限?
    • 策略有无效操作 - s3:ListAllMyBuckets for IAM 策略 { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1475046496223", "Action": [“s3:GetObject”、“s3:ListAllMyBuckets”、“s3:ListBucket”、“s3:PutObject”]、“效果”:“允许”、“资源”:“arn:aws:s3:::sample/* ", "校长" : { "AWS" : "*" } } ] }
    • 这个错误来自哪里?对于 ListAllMyBuckets,您无需指定存储桶名称。它为我抱怨校长。应该看起来像 { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Effect": “允许”、“资源”:“arn:aws:s3:::sample/*”}、{“操作”:[“s3:ListAllMyBuckets”]、“效果”:“允许”、“资源”:“* " } ] }
    猜你喜欢
    • 2020-10-08
    • 2011-10-21
    • 2016-09-04
    • 2017-12-30
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    相关资源
    最近更新 更多