Amazon Cognito仅适用于2个区域:us-east-1
和eu-west-1
我在us-west-2
以下是我在Cognito身份池中为未经身份验证的访客提供的IAM策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::vocal.test14/*"
]
}
]
}
在上传过程中,我无法访问S3存储桶 如上所述,它应该是可能的:
我需要将哪些规则添加到我的政策中,以便让Cognito能够与不在us-east
中的存储桶进行通信?
有人要求提供更多信息,所以这是:
我创建了一个名为vocal.west2
的新存储桶
我给了桶以下CORS属性:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>https://domain.com</AllowedOrigin>
<AllowedOrigin>https://*.domain.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>Authorization</AllowedHeader>
<MaxAgeSeconds>3000</MaxAgeSeconds>
</CORSRule>
<CORSRule>
<AllowedOrigin>https://domain.com</AllowedOrigin>
<AllowedOrigin>https://*.domain.com</AllowedOrigin>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
<ExposeHeader>ETag</ExposeHeader>
<MaxAgeSeconds>3000</MaxAgeSeconds>
</CORSRule>
</CORSConfiguration>
我已将IAM角色更新为以下内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::vocal.west2/*"
]
}
]
}
我正在尝试使用AWS JavaScript SDK上传文件。代码很长,但这里是Cognito凭证调用:
AWS.config.region = 'us-east-1';
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:REST-OF-ID-HERE'
});
请注意,该区域设置为1us-east-1`,但这是因为它引用了Cognito区域,而不是S3存储桶。
另请注意,执行上传的实际JS代码在us-east-1
存储桶时可以正常工作。
答案 0 :(得分:3)
我正在使用AWS.S3.ManagedUpload
lib
为了指定S3区域,需要创建AWS.S3
对象(这里的情况很重要;不能与AWS.s3
一起使用)
这是AWS.S3
对象实例化:
var s3 = (new AWS.S3({
region: 'us-west-2'
}))
这是AWS.S3.ManagedUpload
实例化:
var upload = (new AWS.S3.ManagedUpload({
params: {
Bucket: 'vocal.test14',
Key: 'filename',
Body: file,
ContentType: 'image/jpeg',
ACL: 'public-read'
},
service: s3
}));
以上是上传/报告进度的逻辑:
upload.on('httpUploadProgress', function(event) {
console.log(
'Progress:',
event.loaded,
'/',
event.total
);
});
upload.send(function(err, data) {
if (data) {
console.log('Uploaded');
console.log(data);
} else {
console.log(arguments);
}
});
感谢@ mark-mercurio的帮助
答案 1 :(得分:2)
我看到你将区域设置为us-east-1(点击Amazon Cognito的端点)。
实例化S3客户端时,请尝试指定区域。
var s3 = new AWS.S3({region: 'us-west-2'});
另外,如果这不起作用,您能提供错误吗?
-Mark