当我尝试使用签名 post 上传到 s3 时访问被拒绝,这可能是存储桶策略吗?

access denied when I attempt to upload to s3 with a signed post could it be the bucket policy?

我有一个没有 public 访问权限的 s3 存储桶。我有一个存储桶策略,但它是在我将 CDN 连接到存储桶以获取原始访问身份时自动生成的。

但这就是政策的全部内容。

桶政策对我来说很糟糕。我想知道这是否真的是问题所在,还是其他原因。

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::shofi-mod/*"
        }
    ]
}

为了比较,这里是我的另一个具有 public 访问权限的存储桶的存储桶策略。我正在查看这两个以寻找我应该做什么的线索

{
    "Version": "2012-10-17",
    "Id": "",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam:::user/shofi-stuff-bucket-user"
            },
            "Action": [
                "s3:ListBucket",
                "s3:ListBucketVersions",
                "s3:GetBucketLocation",
                "s3:Get*",
                "s3:Put*"
            ],
            "Resource": "arn:aws:s3:::shofi-stuff"
        }
    ]
}

非常感谢国王

这里有几个话题。

您显示的第一个 存储桶策略 只是通过 Allow 策略授予对 CloudFront 的访问权限。它不会干扰预签名 URL.

第二个存储桶策略(虽然与您的问题没有直接关系)有错误。使用 GetObjectPutObject 时,必须授予对存储桶 内容 的访问权限,而不是存储桶本身。 (而 ListBucket 确实 适用于存储桶。)

因此,Resource 应授予对存储桶 存储桶内容的访问权限:

            "Resource": ["arn:aws:s3:::shofi-stuff", "arn:aws:s3:::shofi-stuff/*"]

至于 为什么您的预签名 URL 不起作用,可能是由于:

  • 用于生成预签名 URL 的基础凭证(IAM 用户、IAM 角色)没有执行上传的权限(可能是由于到类似的 Resource 问题),
  • 预签名 URL 生成不正确