如何恢复TOS桶中误删除对象

问题描述

如果误删除了TOS存储桶中的对象,是否可以恢复?

问题分析

如果TOS存储桶开启了版本控制,删除的时候是普通的delete操作,则可以通过删除“删除标记”进行恢复。

如果TOS存储桶没有开启版本控制,那删除的对象无法进行恢复。

解决方案

1.先查看TOS存储桶是否开启了版本控制

┌──(root)-[~]
└─# aws s3api get-bucket-versioning --bucket xxxx --endpoint-url=http://tos-s3-cn-beijing.volces.com
{
   "Status": "Suspended"
}

2.如何开启版本控制

┌──(root)-[/home/kali]
└─# aws s3api  put-bucket-versioning --bucket xxxx --versioning-configuration Status=Enabled  --endpoint-url=http://tos-s3-cn-beijing.volces.com
                                                                                                                                   
┌──(root)-[/home/kali]
└─# aws s3api  get-bucket-versioning --bucket xxxx  --endpoint-url=http://tos-s3-cn-beijing.volces.com        
{
    "Status": "Enabled"
}// 可以看到已经开启了版本控制

3.查看桶中对象

┌──(root)-[/home/kali]
└─# aws s3api  list-object-versions --bucket xxxx  --endpoint-url=http://tos-s3-cn-beijing.volces.com             
{
            "ETag": "\"bcca0e55a87efb059e0a6315ba755915\"",
            "Size": 181,
            "StorageClass": "STANDARD",
            "Key": "test.py",
            "VersionId": "583B49DBE8C60880B9BE",
            "IsLatest": true,
            "LastModified": "2021-09-07T10:18:31.000Z",
            "Owner": {
                "DisplayName": "2100046944",
                "ID": "2100046944"
            }
        }

可以看到VersionId

控制台显示如下:

image

4.将对象删除

┌──(root)-[/home/kali]
└─# aws s3api  delete-object --bucket xxxx --key test.py    --endpoint-url=http://tos-s3-cn-beijing.volces.com
{
    "DeleteMarker": true,
    "VersionId": "5831CEA711F2CC6A4E2A"
}

此时使用get-object 尝试进行下载,会报错没有此key,如下:

┌──(root)-[/home/kali]
└─# aws s3api  get-object --bucket xxxx --key test.py ./test.key  --endpoint-url=http://tos-s3-cn-beijing.volces.com

An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist.

5.查看删除对象的删除标记,获取其VersionId

┌──(root)-[/home/kali]
└─# aws s3api  list-object-versions --bucket xxxx --endpoint-url=http://tos-s3-cn-beijing.volces.com
"DeleteMarkers": [
            "Owner": {
                "DisplayName": "2100046944",
                "ID": "2100046944"
            },
            "Key": "test.py",
            "VersionId": "5831CEA711F2CC6A4E2A",
            "IsLatest": true,
            "LastModified": "2021-10-08T07:37:32.000Z"
        }

可以看到起DeleteMarkers中的VersionId

6.删除上步中获取到的versionID

┌──(rootkali)-[/home/kali]
└─# aws s3api  delete-object --bucket xxxx --key test.py --version-id 5831CEA711F2CC6A4E2A   --endpoint-url=http://tos-s3-cn-beijing.volces.com 
{
    "DeleteMarker": true,
    "VersionId": "5831CEA711F2CC6A4E2A"
}

7.控制台进行查看,对象已经恢复

image

使用get-object进行下载,确认恢复:

┌──(rootkali)-[/home/kali]
└─# aws s3api  get-object --bucket xxxx --key test.py ./test.key  --endpoint-url=http://tos-s3-cn-beijing.volces.com
{
    "AcceptRanges": "bytes",
    "LastModified": "Tue, 07 Sep 2021 10:18:31 GMT",
    "ContentLength": 181,
    "ETag": "\"bcca0e55a87efb059e0a6315ba755915\"",
    "VersionId": "583B49DBE8C60880B9BE",
    "ContentType": "multipart/form-data; boundary=aaaeee59bfb0d3f0d16fc12cf8c42891",
    "Metadata": {},
    "StorageClass": "Standard"
}

如果您有其他问题,欢迎您联系火山引擎技术支持服务

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论