如何删除 Amazon S3 上的"delete"权限



在AmazonS3控制台中,我只看到"上传/删除"的权限选项。是否有允许上传但不允许删除的方法?

您在AWS管理控制台中直接看到的权限基于S3可用的初始且相对简单的访问控制列表(ACL),该列表本质上区分了READWRITE权限,请参阅指定权限:

  • READ-允许被授予者列出bucket中的对象
  • WRITE-允许被授予者在铲斗

这些限制已经通过添加Bucket Policies(应用于存储桶级别的权限)和IAM Policy(应用于用户级别的权限。

您的用例可能需要相应的bucket策略,您也可以直接从S3控制台添加该策略。点击添加bucket策略打开bucket策略编辑器,该编辑器具有指向几个示例的链接以及强烈推荐的AWS策略生成器,该生成器允许您组装一个针对您的用例的策略。

对于以其他方式锁定的bucket,最简单的形式可能是这样的(请确保根据您的需求调整PrincipalResource):

{
  "Statement": [
    {
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::<bucket_name>/<key_name>",
      "Principal": {
        "AWS": [
          "*"
        ]
      }
    }
  ]
}

根据您的用例,您可以通过组合各种AllowDeny操作等,轻松地组成相当复杂的策略。这显然也会产生无意的权限,因此正确的测试是通常的关键;因此,请注意在一起使用ACL和Bucket Policies或IAM和Bucket Policy时的含义。

最后,您可能想看看我对在简单的AWS用户策略中指定单个bucket的问题的回答,它解决了策略中另一个常见的陷阱。

您不能在s3存储桶中附加任何删除策略。例如,如果您不希望此IAM用户对任何bucket或任何对象执行任何删除操作,您可以设置如下内容:

{
    "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检查您的设置是否符合您的预期。

希望这能有所帮助!

这非常完美。感谢Pung Woratiti Manosroi。结合他提到的政策如下:

{    
"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

然而,更改现有对象(这将允许有效地删除它)和创建新对象之间没有区别。

最新更新