AWS权限无法放置对象

时间:2019-09-18 04:41:23

标签: reactjs amazon-web-services amazon-s3

抱歉,没有菜鸟问题,但是我试图将文件从我的react node.js应用程序上传到S3。我正在使用Uppy和Companion处理到S3的上传。

如果我的S3权限允许,我可以上传文件 Block all public access 处于未选中状态(又名公共场所中的任何人都可以使用我的存储桶)。

但是,我显然不想要这个。据我了解,我需要配置我的

  1. IAM权限
  2. 桶策略权限
  3. CORS设置

我敢肯定,我的CORS设置是可以的,但是无论我做什么,当选中Block all public access时,我的上传内容都无法正常工作。我一直收到403禁止响应。我的权限是:

IAM:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::MY_BUCKET_NAME"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:ListBucketVersions",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::MY_BUCKET_NAME/*"
        }
    ]
}

时段政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::00000000000:user/MY_IAM_USERNAME"
            },
            "Action": [
                "s3:ListBucket",
                "s3:ListBucketVersions",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::MY_BUCKET_NAME",
                "arn:aws:s3:::MY_BUCKET_NAME/*"
            ]
        }
    ]
}

CORS:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

我一直在尝试不同设置的组合,但是没有运气。我想知道这是否是我做错的基本事情。

预先感谢

1 个答案:

答案 0 :(得分:1)

根据IAM策略规则,显式拒绝会覆盖显式允许。因此,如果选中“阻止所有公共访问权限”(这是新创建的S3的默认安全性),则意味着您明确拒绝了任何公共访问权限。

  

Amazon S3为存储桶和存储桶提供阻止公共访问设置   帐户,以帮助您管理对Amazon S3资源的公共访问。通过   默认情况下,新的存储桶和对象不允许公共访问,但用户   可以修改存储桶策略或对象权限以允许公共   访问。 Amazon S3阻止公共访问设置会覆盖这些策略   和权限,以便您可以限制对这些内容的公共访问   资源。借助Amazon S3阻止公共访问,账户管理员   和存储桶所有者可以轻松设置集中控制以限制   公共访问其强制执行的Amazon S3资源   不管如何创建资源。

Using Amazon S3 Block Public Access