如何删除Amazon S3上的“删除”权限

时间:2012-02-22 16:12:45

标签: permissions amazon-s3

在Amazon S3控制台中,我只看到“上传/删除”的权限选项。有没有办法允许上传但不能删除?

4 个答案:

答案 0 :(得分:19)

您在AWS Management Console中看到的权限直接基于S3可用的初始和相对简单的Access Control Lists (ACL),它基本上区分了 READ WRITE < / em>权限,请参阅Specifying a Permission

  
      
  • READ - 允许被授权者列出存储桶中的对象
  •   
  • WRITE - 允许被授权者创建,覆盖和删除中的任何对象   桶
  •   

这些限制已通过添加Bucket Policies(在桶级别上应用的权限)和IAM Policies(在用户级别上应用的权限)得到解决,并且所有这三个都可以一起使用(可以变得相当复杂,如下所述),请参阅Access Control了解整个情况。

您的用例可能会询问相应的存储桶策略,您也可以直接从S3控制台添加该策略。单击添加存储桶策略将打开存储桶策略编辑器,其中包含指向几个示例的链接以及强烈推荐的AWS Policy Generator,它允许您组装针对您的用例的政策。

对于其他锁定存储桶,最简单的表单可能如此(请确保根据您的需要调整 Principal Resource ):

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

根据您的使用情况,您可以通过组合各种允许拒绝操作等轻松编写相当复杂的策略 - 这显然会产生无意的权限,因此正常的测试是关键;因此,请注意使用Using ACLs and Bucket Policies TogetherIAM and Bucket Policies Together时的影响。

最后,你可能想看看我对Problems specifying a single bucket in a simple AWS user policy的回答,它解决了另一个常见的政策陷阱。

答案 1 :(得分:7)

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

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

希望这有帮助!

答案 2 :(得分:4)

这很完美。感谢Pung Worathiti 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": {}    

    }
]
}    

答案 3 :(得分:1)

是的,s3:DeleteObject是一个选项:

http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html

但是,更改现有对象(可以有效删除它)和创建新对象之间没有区别。