使用 cyberduck 拒绝对大型文件的 s3 文件访问

使用 cyberduck 拒绝对大型文件的 s3 文件访问

当我使用下面的自定义策略时,使用 cyberduck 上传大文件(1G 及以上)时出现以下错误

文件访问被拒绝。请联系您的网站托管服务提供商寻求帮助

但是上传小文件(大约 200M)不是问题,而且我使用 cyberduck 和相同的登录凭据创建新文件夹和文件也没有问题。所以我肯定有读/写访问权限。

此外,如果我添加预定义策略 (AmazonS3FullAccess),那么大文件上传也可以正常工作。我有点困惑。我的策略如何限制大文件上传?我遗漏了什么?

我的政策

{
    "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:::photoshoot2016"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::photoshoot2016/*"
        }
    ]
}

AmazonS3FullAccess 策略

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

答案1

我继续研究,发现亚马逊建议对所有超过 100M 的文件使用分段上传(http://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html),我猜这也是 cyberduck 所做的。

我最后要做的就是添加缺少的权限(ListMultipartUploadParts 和 ListBucketMultipartUploads)以启用分段上传。现在我的策略如下所示

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListMultipartUploadParts"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListMultipartUploadParts",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": "arn:aws:s3:::photoshoot2016"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::photoshoot2016/*"
        }
    ]
}

我通过启用 bucket 日志记录找到了主要线索,其中有大量 REST.GET.UPLOADS 的“AccessDenied 243”错误。Amazon 的 Policy Simulator 也非常有用,可以找出缺少的内容以及应该将其放在哪里。

相关内容