当我尝试运行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>
答案 0 :(得分:0)
我认为错误的地区。登录AWS控制台后,您可以检查存储桶上的属性。美国标准为us-east-1
。
var AWS_REGION = us-east-1;
您还可以在静态网站托管部分下查看端点:my-bucket-name.s3-website-us-east-1.amazonaws.com