AWS S3 策略限制文件夹删除
AWS S3 policy restrict folder delete
我有一个名为“uploads”的 S3 存储桶,结构如下:
uploads|
|_products
|_users
|_categories
|_...
我想限制用户删除文件夹(产品、用户等),但他们可以删除文件夹中的对象。我的政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectTagging",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:GetObjectTagging"
],
"Resource": [
"arn:aws:s3:::uploads",
"arn:aws:s3:::uploads/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::uploads/banners/*",
"arn:aws:s3:::uploads/brands/*",
"arn:aws:s3:::uploads/categories/*",
"arn:aws:s3:::uploads/products/*",
"arn:aws:s3:::uploads/users/*"
]
}
]
}
但是我测试过,用户可以删除文件夹,我哪里出错了?
Amazon S3 中不存在文件夹。
如果创建了一个对象(例如banners/sale.jpg
),那么banners
目录就会神奇地出现。然后,如果该对象被删除,那么该目录将神奇地消失。这是因为 Amazon S3 中不存在目录。
因此,您不必担心有人会删除目录,因为当在该路径中创建对象时,它会自动重新出现。
如果在 S3 管理控制台中使用 创建文件夹 按钮,则会创建一个与目录同名的 zero-length 对象。这会强制目录为 'appear'(即使它不存在)。
根据您的描述,听起来用户可以删除 zero-length 对象,因为它与您指定的 Resource
具有相同的路径。如果是这样,那么就无法仅通过策略来防止这种情况发生。
我有一个名为“uploads”的 S3 存储桶,结构如下:
uploads|
|_products
|_users
|_categories
|_...
我想限制用户删除文件夹(产品、用户等),但他们可以删除文件夹中的对象。我的政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectTagging",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:GetObjectTagging"
],
"Resource": [
"arn:aws:s3:::uploads",
"arn:aws:s3:::uploads/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::uploads/banners/*",
"arn:aws:s3:::uploads/brands/*",
"arn:aws:s3:::uploads/categories/*",
"arn:aws:s3:::uploads/products/*",
"arn:aws:s3:::uploads/users/*"
]
}
]
}
但是我测试过,用户可以删除文件夹,我哪里出错了?
Amazon S3 中不存在文件夹。
如果创建了一个对象(例如banners/sale.jpg
),那么banners
目录就会神奇地出现。然后,如果该对象被删除,那么该目录将神奇地消失。这是因为 Amazon S3 中不存在目录。
因此,您不必担心有人会删除目录,因为当在该路径中创建对象时,它会自动重新出现。
如果在 S3 管理控制台中使用 创建文件夹 按钮,则会创建一个与目录同名的 zero-length 对象。这会强制目录为 'appear'(即使它不存在)。
根据您的描述,听起来用户可以删除 zero-length 对象,因为它与您指定的 Resource
具有相同的路径。如果是这样,那么就无法仅通过策略来防止这种情况发生。