【问题标题】:How I can upload files to Amazon S3 without listing bucket如何在不列出存储桶的情况下将文件上传到 Amazon S3
【发布时间】:2017-07-06 15:57:23
【问题描述】:

我正在使用带有 S3 存储桶策略的 Angular 前端将文件上传到 S3:

{
  "Id": "Policy1499245520254",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1499245493674",
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::test-dev/*",
                "arn:aws:s3:::test-dev"],
      "Principal": "*"
    }
  ]
}

但如果我将上述政策更改为

{
  "Id": "Policy1499245520254",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1499245493674",
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::test-dev/*",
                "arn:aws:s3:::test-dev"],
      "Principal": "*"
    },
    {
      "Sid": "Stmt1499245517941",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::test-dev",
      "Principal": "*"
    }
  ]
}

我添加的地方:

{
      "Sid": "Stmt1499245517944",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::test-dev",
      "Principal": "*"
 }

添加bucket listdeny,上传失败。无论如何我可以在不列出存储桶的情况下上传文件。

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:
    {
        "Version": "2008-10-17",
        "Statement": [
            {
                "Sid": "",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "*"
                },
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:GetObjectACL",
                    "s3:PutObject",
                    "s3:PutObjectAcl",
                    "s3:PutObjectTagging",
                    "s3:PutObjectVersionAcl",
                    "s3:PutObjectVersionTagging"
                ],
                "Resource": [
                    "arn:aws:s3:::test-dev",
                    "arn:aws:s3:::test-dev/*"
                ]
            }
        ]
    }
    

    我只是通过允许这些权限来解决它,显然这里不需要存储桶列表并解决了问题。

    【讨论】:

      【解决方案2】:

      这是因为s3:ListBucket 操作涵盖了GET Bucket (List Objects)HEAD Bucket 操作。 HEAD Bucket 操作确定存储桶是否存在以及您是否有权访问它,这似乎在对对象的任何操作(例如s3:PutObject 操作)之前调用。见Specifying Permissions in a Policy

      【讨论】:

      • 那么有没有办法解决这个问题?
      • @mango:我不这么认为。根据我自己的观察,如果没有s3:ListBucket,我永远无法使用s3:PutObject(尽管我找不到任何关于为什么会这样的官方AWS文档)。
      猜你喜欢
      • 2015-05-05
      • 2018-04-04
      • 2018-04-12
      • 2022-01-14
      • 2016-07-11
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多