Amazon web services 使用Amazon Cognito和IAM策略访问us-west-2 S3存储桶

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

亚马逊Cognito仅在两个区域提供:us-east-1和eu-west-1 我在美国西部2区有个水桶

以下是我对Cognito身份池中未经身份验证的客人的IAM政策:

{
    "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将是找到解决方案的一个良好开端。感谢您的提示。这里面有一个输入错误,还有其他一些需要做的事情,但是你让我走上了正确的轨道。谢谢你的帮助。很快就要发布答案了。谢谢你的提示。这里面有一个输入错误,还有其他一些需要做的事情,但是你让我走上了正确的轨道。谢谢你的帮助。我马上就要发布答案了。