我一直在关注这个教程:https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html#s3-example-photo-album-scenario-prerequisites。将来,它将被修改为管理音频文件而不是图像。
我按照指南进行了操作,但可能错过了某些步骤,因为当尝试列出对象时,仍然遇到了拒绝访问错误。
我在S3上创建了一个存储桶
- 它不是公共存储桶 - 区域是欧盟(伦敦),因此是eu-west-2 CORS配置:
然后在我的网站上我做以下操作:
我按照指南进行了操作,但可能错过了某些步骤,因为当尝试列出对象时,仍然遇到了拒绝访问错误。
我在S3上创建了一个存储桶
- 它不是公共存储桶 - 区域是欧盟(伦敦),因此是eu-west-2 CORS配置:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
访问控制列表仅显示具有列表、写入、读取存储桶和写入存储桶权限的帐户(一长串数字/字母)的访问。
在Amazon Cognito控制台中,我有一个身份池,该身份池分配了未经身份验证和经过身份验证的角色,但我认为我只会使用未经身份验证的角色?
未经身份验证的角色具有以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::thisusesmybucketname/*"
]
}
]
}
然后在我的网站上我做以下操作:
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.243.1.min.js"></script>
<script type="text/javascript">
function getHtml(template) {
return template.join('\n');
}
var albumBucketName = 'myactualname';
var IdentityPoolId = 'eu-west-2:lotsofcharacters';
AWS.config.update({
region: 'eu-west-2',
credentials: new AWS.CognitoIdentityCredentials({
IdentityPoolId: IdentityPoolId,
})
});
var s3 = new AWS.S3({
apiVersion: '2006-03-01',
params: {Bucket: albumBucketName},
});
listAlbums();
function listAlbums() {
s3.listObjects({Delimiter: '/'}, function(err, data) {
if (err) {
console.log(err.message);
//return alert('There was an error listing your albums: ' + err.message);
} else {
// we never get here
}
});
}
</script>
我是否漏掉了什么?如果我回到存储桶并设置公共访问以进行读/写操作,那么一切都能正常工作 - 但我理解这样做是错误的方式,因为它会开放给任何人/每个人使用我的AWS?
谢谢!