在Amazon S3控制台中,我只看到了“上传/删除”权限选项。有没有一种方法可以允许上传但不允许删除?
这些限制已通过添加Bucket Policies(应用于存储桶级别的权限)和IAM Policies(应用于用户级别的权限)得到解决,三者也可以一起使用(如下所述,可能变得相当复杂),请参见Access Control以获取完整的图片。
- 读 - 允许被授权者列出存储桶中的对象
- 写 - 允许被授权者创建、覆盖和删除存储桶中的任何对象
{
"Statement": [
{
"Action": [
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::<bucket_name>/<key_name>",
"Principal": {
"AWS": [
"*"
]
}
}
]
}
根据您的使用情况,您可以通过组合各种允许和拒绝等操作轻松地组成相当复杂的策略。这显然也可能产生意外的权限,因此适当的测试通常是关键的;因此,请注意在同时使用使用ACL和桶策略或IAM和桶策略时的影响。
最后,您可能还想看一下我的回答在简单的AWS用户策略中指定单个存储桶的问题,其中还涉及到另一个常见的策略陷阱。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1480692207000",
"Effect": "Deny",
"Action": [
"s3:DeleteBucket",
"s3:DeleteBucketPolicy",
"s3:DeleteBucketWebsite",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
此外,您可以使用策略模拟器https://policysim.aws.amazon.com检查您的策略是否达到了您预期的结果。
希望这可以帮助您!
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::mybucketname/*",
"Condition": {}
},
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
},
{
"Effect": "Deny",
"Action": [
"s3:DeleteBucket",
"s3:DeleteBucketPolicy",
"s3:DeleteBucketWebsite",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": "arn:aws:s3:::mybucketname/*",
"Condition": {}
}
]
}
是的,s3:DeleteObject
是一个选项:
http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html
但是,在更改现有对象(这将使其被有效地删除)和创建新对象之间没有区别。