从Amazon S3恢复已删除的对象

Cha*_*ava 5 amazon-s3 amazon-web-services

我有一个存储桶(启用了版本),如何找回从存储桶中意外永久删除的对象。

Kc *_*key 7

我创建了一个脚本来使用 deletemarker 恢复对象。你必须像下面这样输入它:

sh undelete_deletemarker.sh 存储桶名 path/to/certain/folder

**Script:**
#!/bin/bash
#please provide the bucketname and path to destination folder to restore
# Remove all versions and delete markers for each object
 aws s3api list-object-versions --bucket $1 --prefix $2 --output text | 
 grep "DELETEMARKERS" | while read obj
   do
        KEY=$( echo $obj| awk '{print $3}')
        VERSION_ID=$( echo $obj | awk '{print $5}')
        echo $KEY
        echo $VERSION_ID
        aws s3api delete-object --bucket $1 --key $KEY --version-id 
        $VERSION_ID

   done
Run Code Online (Sandbox Code Playgroud)

快乐编码!;)


小智 5

谢谢你,Kc Bickey,这个脚本非常棒!我可以为其他人添加的唯一一件事是确保第 12 行上的“$VERSION_ID”紧跟在“--version-id”之后。论坛似乎已将“$VERSION_ID”包装到下一行,这会导致脚本出错,直到已更正。

**Script:**
#!/bin/bash
#please provide the bucketname and path to destination folder to restore
# Remove all versions and delete markers for each object
 aws s3api list-object-versions --bucket $1 --prefix $2 --output text | 
 grep "DELETEMARKERS" | while read obj
   do
        KEY=$( echo $obj| awk '{print $3}')
        VERSION_ID=$( echo $obj | awk '{print $5}')
        echo $KEY
        echo $VERSION_ID
        aws s3api delete-object --bucket $1 --key $KEY --version-id $VERSION_ID

   done
Run Code Online (Sandbox Code Playgroud)


Fré*_*nri 2

使用存储桶版本控制启用永久删除对象时,您需要特别提及该对象的版本DELETE Object versionId 如果您这样做了,则无法恢复此特定版本,您可以访问以前的版本

启用版本控制后,简单的 DELETE 无法永久删除对象。相反,Amazon S3 会在存储桶中插入一个删除标记,以便您可以从该特定标记中恢复,但如果该标记被删除(并且您提到它已被永久删除),您将无法恢复

您是否启用了跨区域复制?如果是这样,您可以检索其他区域中的对象:

如果 DELETE 请求指定要删除的特定对象版本 ID,Amazon S3 将删除源存储桶中的该对象版本,但不会在目标存储桶中复制删除操作(换句话说,它不会从源存储桶中删除相同的对象版本)目标存储桶)。此行为可以保护数据免遭恶意删除。

编辑:如果您的存储桶上启用了版本控制,您应该会看到Versions Hide/Show切换按钮,当Show选择该按钮时,您应该会Version ID根据我的存储桶的屏幕截图获得附加列 S3管理控制台