意外删除 S3 对象;从 Cloudfront 分发中恢复已删除的对象

Accidental S3 Object deletion; Recover deleted object from the Cloudfront distribution

假设,如果我不小心删除了 Cloudfront 正在使用的 S3 对象,我可以在 Cloudfront 缓存未清除且对象未失效的情况下通过 Cloudfront 检索该对象吗?

也许吧。在发生以下任何一种情况之前,您仍然可以通过 http/https 请求该对象:

  • 对象的生存时间到期,
  • 分发无效,或者
  • 对象被缓存逐出以为其他对象腾出空间

但是所有这些都假设对象一开始就在缓存中。不要依赖任何这些。

有几种方法可以处理 S3 中删除的对象:

  1. 在您的 S3 存储桶上启用版本控制。启用对象版本控制后,将保留对象的旧版本。如果您删除一个对象,您仍然可以从 S3 检索以前的版本。

请注意,您将为所有对象(甚至已删除的对象)的所有版本的存储付费。您可以使用 s3 存储桶生命周期在预定时间后删除旧版本以降低这些成本。

更多信息:http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html

  1. 在您的存储桶上启用删除时 MFA。启用此功能后,删除对象会更加困难,因为您必须输入 MFA 密码才能进行删除。

更多信息:http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMFADelete.html

  1. 将存储桶策略应用到您的存储桶以防止删除对象。

这是一个示例策略:

{
  "Id": "ExamplePolicyId12345678",
  "Statement": [
    {
      "Sid": "ExampleStmtSid12345678",
      "Action": [
        "s3:DeleteBucket"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::test-example-com",
      "Principal": {
        "AWS": [
          "*"
        ]
      }
    }
  ]
}

来源:https://serverfault.com/questions/226700/how-do-i-prevent-deletion-of-s3-buckets