【发布时间】:2015-10-06 17:10:17
【问题描述】:
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 开发工具包上传文件。代码很长,但这里是 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 存储桶时可以正常工作。
【问题讨论】:
-
您好,您能提供更多信息吗?您是否从 S3 收到 accessDenied 异常?您正在使用的代码示例和 sdk 将是寻找解决方案的良好开端。
标签: amazon-web-services amazon-s3 amazon-iam amazon-cognito