如何在Amazon S3上移除“删除”权限

19
在Amazon S3控制台中,我只看到了“上传/删除”权限选项。有没有一种方法可以允许上传但不允许删除?
4个回答

23
您在AWS管理控制台中看到的权限,直接基于S3可用的最初和相对简单的访问控制列表(ACL)来区分权限,请参见指定权限
  • - 允许被授权者列出存储桶中的对象
  • - 允许被授权者创建、覆盖和删除存储桶中的任何对象
这些限制已通过添加Bucket Policies(应用于存储桶级别的权限)和IAM Policies(应用于用户级别的权限)得到解决,三者也可以一起使用(如下所述,可能变得相当复杂),请参见Access Control以获取完整的图片。
您的用例可能需要一个相应的桶策略,您也可以直接从S3控制台添加。单击添加桶策略会打开Bucket Policy Editor,其中包含一些示例链接以及强烈推荐的AWS Policy Generator,该工具允许您组装一个适合您用例的策略。
对于一个被锁定的存储桶,最简单的形式可能如下(请确保根据您的需求调整PrincipalResource):
{
  "Statement": [
    {
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::<bucket_name>/<key_name>",
      "Principal": {
        "AWS": [
          "*"
        ]
      }
    }
  ]
}

根据您的使用情况,您可以通过组合各种允许拒绝等操作轻松地组成相当复杂的策略。这显然也可能产生意外的权限,因此适当的测试通常是关键的;因此,请注意在同时使用使用ACL和桶策略IAM和桶策略时的影响。

最后,您可能还想看一下我的回答在简单的AWS用户策略中指定单个存储桶的问题,其中还涉及到另一个常见的策略陷阱。


当您在主体元素中指定用户时,不能使用通配符(*)表示“所有用户”。主体必须始终命名特定的用户。参考-https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html - lostintranslation

13
您可以将不删除策略附加到您的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检查您的策略是否达到了您预期的结果。

希望这可以帮助您!


8
这个非常成功,感谢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": {}    

    }
]
}    

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接