我有一个桶,里面装着大部分需要公开的内容。然而,有一个文件夹(也就是"前缀")只能由经过身份验证的IAM用户访问。
{
"Statement": [
{
"Sid": "AllowIAMUser",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucket/prefix1/prefix2/private/*",
"Principal": {
"AWS": [
"arn:aws:iam::123456789012:user/bobbydroptables"
]
}
},
{
"Sid": "AllowAccessToAllExceptPrivate",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucket/*",
"Condition": {
"StringNotLike": {
"s3:prefix": "prefix1/prefix2/private/"
}
},
"Principal": {
"AWS": [
"*"
]
}
}
]
}
当我尝试保存此策略时,AWS会返回以下错误消息:
Conditions do not apply to combination of actions and resources in statement -
Condition "s3:prefix"
and action "s3:GetObject"
in statement "AllowAccessToAllExceptPrivate"
显然,这个错误只适用于第二个语句。使用"s3:prefix"条件和"s3:GetObject"操作不可能吗?
是否可以将公共存储桶的一部分仅限于经过身份验证的用户才能访问?
如果有关系,该存储桶将仅通过api进行只读访问。
这个问题类似于Amazon S3 bucket policy for public restrictions only,但我正在尝试采用不同的方法解决问题。