2014-11-04 52 views
0

當我嘗試運行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已成功完成。在AWS控制檯上

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/*" 
    } 
    ] 
} 

而且我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> 

回答

0

我認爲錯誤的區域。登錄到AWS控制檯後,您可以檢查存儲桶中的屬性。美國標準是us-east-1

var AWS_REGION = us-east-1;

您還可以檢查端點的靜態網站在託管部分:my-bucket-name.s3-website-us-east-1.amazonaws.com