无法列出存储桶的内容

时间:2014-11-04 22:27:43

标签: javascript google-chrome amazon-web-services amazon-s3

当我尝试运行example of listing the contents of a bucket时,出现以下错误。我尝试在本地计算机上运行它,因为在浏览器中打开文件,然后在远程服务器上打开文件。当我在本地机器上运行时,发生'null'。两种情况都以同样的方式失败:

XMLHttpRequest cannot load `my-bucket.s3-us-west-1.amazonaws.com`. 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.

这可能是一个权限问题,因为我开始了解策略和CORS以及IAM服务。我似乎已经成功地对我的凭据进行了硬编码,因为AWS.config.getCredentials已成功完成。

var AWS_BUCKET_NAME = 'my-bucket';
var AWS_ACCESS_KEY_ID = 'myId';
var AWS_SECRET_ACCESS_KEY = 'myKey';
var AWS_REGION = 'us-west-1';
var AWS_API_VERSION = '2012-10-17';

var listBucketContents = function() {
  var bucket = new AWS.S3({params: {Bucket: AWS_BUCKET_NAME}});
  bucket.listObjects(function (err, data) {
    if (err) {
      console.log('Could not load objects from S3');
    } else {
      console.log('Loaded ' + data.Contents.length + ' items from S3');
      for (var i = 0; i < data.Contents.length; i++) {
        console.log(data.Contents[i].Key);
      }
    }
  });
};

var initializeWindow = function() {
  AWS.config.update({
    accessKeyId: AWS_ACCESS_KEY_ID,
    secretAccessKey: AWS_SECRET_ACCESS_KEY,
    region: AWS_REGION,
    apiVersion: AWS_API_VERSION
  });

  AWS.config.getCredentials(function(err) {
    if (err) console.log(err.stack); // credentials not loaded
    else console.log("Access Key:", AWS.config.credentials.accessKeyId);
  });

  listBucketContents();
};

我在AWS控制台上的用户权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListAllMyBuckets"],
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::my-bucket"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

我在AWS控制台中对该存储桶的CORS权限是:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>HEAD</AllowedMethod>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <ExposeHeader>ETag</ExposeHeader>
        <ExposeHeader>x-amz-meta-custom-header</ExposeHeader>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

1 个答案:

答案 0 :(得分:0)

我认为错误的地区。登录AWS控制台后,您可以检查存储桶上的属性。美国标准为us-east-1

var AWS_REGION = us-east-1;

您还可以在静态网站托管部分下查看端点:my-bucket-name.s3-website-us-east-1.amazonaws.com