当我尝试使用签名 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.
第二个存储桶策略(虽然与您的问题没有直接关系)有错误。使用 GetObject
和 PutObject
时,必须授予对存储桶 内容 的访问权限,而不是存储桶本身。 (而 ListBucket
确实 适用于存储桶。)
因此,Resource
应授予对存储桶 和 存储桶内容的访问权限:
"Resource": ["arn:aws:s3:::shofi-stuff", "arn:aws:s3:::shofi-stuff/*"]
至于 为什么您的预签名 URL 不起作用,可能是由于:
- 用于生成预签名 URL 的基础凭证(IAM 用户、IAM 角色)没有执行上传的权限(可能是由于到类似的
Resource
问题), 或
- 预签名 URL 生成不正确
我有一个没有 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.
第二个存储桶策略(虽然与您的问题没有直接关系)有错误。使用 GetObject
和 PutObject
时,必须授予对存储桶 内容 的访问权限,而不是存储桶本身。 (而 ListBucket
确实 适用于存储桶。)
因此,Resource
应授予对存储桶 和 存储桶内容的访问权限:
"Resource": ["arn:aws:s3:::shofi-stuff", "arn:aws:s3:::shofi-stuff/*"]
至于 为什么您的预签名 URL 不起作用,可能是由于:
- 用于生成预签名 URL 的基础凭证(IAM 用户、IAM 角色)没有执行上传的权限(可能是由于到类似的
Resource
问题), 或 - 预签名 URL 生成不正确