这是我第一次使用Amazon S3。我已经阅读了问题和答案。它们似乎都与这个问题相似,但没有一个答案为我解决了。
我可以成功上传图片,但我可以让它们显示它们(403禁止状态)。
这是一揽子政策:
{
"Version": "2012-10-17",
"Id": "Policy1475848347662",
"Statement": [
{
"Sid": "Stmt1475848335256",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::235314345576:user/userx"
},
"Action": [
"s3:*"
],
"Resource": "arn:aws:s3:::bucketdev/*"
}
]}
这是CORS配置:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
这是用户的政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:GetObject",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]}
使用此组件:https://www.npmjs.com/package/react-dropzone-s3-uploader。
有人可以帮忙吗?
感谢。
答案 0 :(得分:1)
有两点需要注意:
在何处分配访问Amazon S3的权限
Amazon S3中的对象默认为私有。有三种方法可以分配访问对象的权限:
如果您打算将S3存储桶的内容保密,但允许访问特定用户,则应该为 IAM用户分配权限(正如您所做的那样)。这也意味着您不需要Bucket政策,因为通过上述任何一种方法授予访问权限就足够了。
请参阅文档:Guidelines for Using the Available Access Policy Options
仅当从一个域提供的HTML页面引用来自另一个域的内容时,才需要 CORS策略。您很可能不需要CORS策略 - 进行一些测试以确认是否属于这种情况。
分配哪些权限
这总是令人困惑......某些权限与 Bucket 相关联,而某些权限则与Bucket的内容相关联。
您的政策中的以下权限应位于广告管道级别(arn:aws:s3:::MyBucket
):
其他API调用(例如GetObject
)应该在对象级别(例如arn:aws:s3:::MyBucket/*
)。
请参阅:Specifying Permissions in a Policy
因此,与您的IAM用户关联的策略应该更像这样:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::MY-BUCKET"
]
},
{
"Sid": "Stmt2",
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::MY-BUCKET/*"
]
}
]
}
这将授予{<1}}对桶中对象的权限,而不是对存储桶本身。
答案 1 :(得分:0)
即使某些机构也会遇到相同的问题-请确保所有文件都已上传到存储桶,因为如果使用“添加文件”按钮,则不会上传嵌套文件夹。最好使用“拖放”。