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

uwe*_*uwe 14 permissions amazon-s3

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

Ste*_*pel 19

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

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

这些限制已通过添加存储桶策略(在存储桶级别应用的权限)和IAM策略(在用户级别应用的权限)得到解决,并且所有这三者也可以一起使用(这可能变得相当复杂,如下所述),请参阅整个图片的访问控制.

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

对于其他锁定的存储桶,最简单的形式可能如此(请确保根据您的需要调整主体资源):

{
  "Statement": [
    {
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::<bucket_name>/<key_name>",
      "Principal": {
        "AWS": [
          "*"
        ]
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

根据您的使用案例,您可以通过组合各种允许拒绝操作等轻松编写相当复杂的策略- 这显然也会产生无意的权限,因此正常的测试是关键; 因此,请一起使用ACL和存储桶策略IAM和存储桶策略时,请注意这些问题.

最后,您可能希望查看我在简单AWS用户策略中指定单个存储桶的问题的答案,这解决了另一个常见的策略陷阱.


Pun*_*roi 10

您可以将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:::*"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用政策模拟器https://policysim.aws.amazon.com查看您的政策,以检查您的设置是否符合预期.

希望这可以帮助!


小智 5

这工作完美。感谢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": {}    

    }
]
}    
Run Code Online (Sandbox Code Playgroud)