Amazon web services 使用Amazon Cognito和IAM策略访问us-west-2 S3存储桶
亚马逊Cognito仅在两个区域提供:us-east-1和eu-west-1 我在美国西部2区有个水桶 以下是我对Cognito身份池中未经身份验证的客人的IAM政策:Amazon web services 使用Amazon Cognito和IAM策略访问us-west-2 S3存储桶,amazon-web-services,amazon-s3,amazon-iam,amazon-cognito,Amazon Web Services,Amazon S3,Amazon Iam,Amazon Cognito,亚马逊Cognito仅在两个区域提供:us-east-1和eu-west-1 我在美国西部2区有个水桶 以下是我对Cognito身份池中未经身份验证的客人的IAM政策: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::vocal.test14/*"
]
}
]
}
在上传过程中,我无法访问S3存储桶
如本文所述,应可能:
我需要在我的政策中加入什么规则,才能让Cognito与一个不在美国东部的桶进行沟通
有人要求提供更多信息,所以这里是:
我创建了一个名为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>
我正在尝试使用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存储桶
另外请注意,当它是us-east-1 bucket时,执行上载的实际JS代码工作正常。我看到您将region设置为us-east-1以命中Amazon Cognito的端点 实例化S3客户机时,请尝试指定区域
var s3 = new AWS.S3({region: 'us-west-2'});
另外,如果这不起作用,您能提供您得到的错误吗
-Mark我看到您将区域设置为us-east-1以达到Amazon Cognito的端点 实例化S3客户机时,请尝试指定区域
var s3 = new AWS.S3({region: 'us-west-2'});
另外,如果这不起作用,您能提供您得到的错误吗
-标记已解决:
我正在使用AWS.S3.ManagedUpload库。
为了指定S3区域,需要在此处创建AWS.S3对象;不适用于AWS.s3
以下是AWS.S3对象实例化:
var s3 = (new AWS.S3({
region: 'us-west-2'
}))
var upload = (new AWS.S3.ManagedUpload({
params: {
Bucket: 'vocal.test14',
Key: 'filename',
Body: file,
ContentType: 'image/jpeg',
ACL: 'public-read'
},
service: s3
}));
以下是AWS.S3.ManagedUpload实例化:
var s3 = (new AWS.S3({
region: 'us-west-2'
}))
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的帮助解决:
我正在使用AWS.S3.ManagedUpload库。
为了指定S3区域,需要在此处创建AWS.S3对象;不适用于AWS.s3
以下是AWS.S3对象实例化:
var s3 = (new AWS.S3({
region: 'us-west-2'
}))
var upload = (new AWS.S3.ManagedUpload({
params: {
Bucket: 'vocal.test14',
Key: 'filename',
Body: file,
ContentType: 'image/jpeg',
ACL: 'public-read'
},
service: s3
}));
以下是AWS.S3.ManagedUpload实例化:
var s3 = (new AWS.S3({
region: 'us-west-2'
}))
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的帮助您好,您能提供更多信息吗?您是否从S3收到accessDenied异常?代码示例&您正在使用的sdk将是找到解决方案的良好开端。您好,您能提供更多信息吗?您是否从S3收到accessDenied异常?一个代码示例&您正在使用的sdk将是找到解决方案的一个良好开端。感谢您的提示。这里面有一个输入错误,还有其他一些需要做的事情,但是你让我走上了正确的轨道。谢谢你的帮助。很快就要发布答案了。谢谢你的提示。这里面有一个输入错误,还有其他一些需要做的事情,但是你让我走上了正确的轨道。谢谢你的帮助。我马上就要发布答案了。