我有完全相同的需求:备份Azure中的blob,由于我们有数百万个客户的blob,你是正确的——一个粗心的开发者拥有完全访问权限可以危及整个系统。
因此,我编写了一个完整的应用程序“Blob To Local Backup”,在MIT许可下免费开源发布在github上:https://github.com/smartinmedia/BlobToLocalBackup
它解决了许多问题,包括:
a)您可以只给这个应用程序READ权限,这样应用程序就不能破坏Azure上的任何数据
b)备份到一个服务器,您的粗心的开发人员或黑客无法像访问Azure帐户那样访问该服务器。
c)该软件提供版本控制,因此您甚至可以保护自己免受勒索/加密攻击等。
d)我使用了序列化方法而不是数据库,因此即使在Azure上有数百万个文件,您仍然能够保持同步(我们在Azure上有2000万个文件)。
以下是它的工作原理(更详细信息请阅读github上的README):
1.在主文件夹中设置appsettings.json文件。您可以在这里为整个访问设置LoginCredentials,也可以在存储帐户级别上进行更加细粒度的设置:
{
"App": {
"ConsoleWidth": 150,
"ConsoleHeight": 42,
"LoginCredentials": {
"ClientId": "2ab11a63-2e93-2ea3-abba-aa33714a36aa",
"ClientSecret": "ABCe3dabb7247aDUALIPAa-anc.aacx.4",
"TenantId": "d666aacc-1234-1234-aaaa-1234abcdef38"
},
"DataBase": {
"PathToDatabases": "D:/temp/azurebackup"
},
"General": {
"PathToLogFiles": "D:/temp/azurebackup"
}
}
}
请按照以下方式设置一个 JSON 文件作为工作文件(我添加了许多选项):
{
"Job": {
"Name": "Job1",
"DestinationFolder": "D:/temp/azurebackup",
"ResumeOnRestartedJob": true,
"NumberOfRetries": 0,
"NumberCopyThreads": 1,
"KeepNumberVersions": 5,
"DaysToKeepVersion": 0,
"FilenameContains": "",
"FilenameWithout": "",
"ReplaceInvalidTargetFilenameChars": false,
"TotalDownloadSpeedMbPerSecond": 0.5,
"StorageAccounts": [
{
"Name": "abc",
"SasConnectionString": "BlobEndpoint=https://abc.blob.core.windows.net/;QueueEndpoint=https://abc.queue.core.windows.net/;FileEndpoint=https://abc.file.core.windows.net/;TableEndpoint=https://abc.table.core.windows.net/;SharedAccessSignature=sv=2019-12-12&ss=bfqt&srt=sco&sp=rl&se=2020-12-20T04:37:08Z&st=2020-12-19T20:37:08Z&spr=https&sig=abce3e399jdkjs30fjsdlkD",
"FilenameContains": "",
"FilenameWithout": "",
"Containers": [
{
"Name": "test",
"FilenameContains": "",
"FilenameWithout": "",
"Blobs": [
{
"Filename": "2007 EasyRadiology.pdf",
"TargetFilename": "projects/radiology/Brochure3.pdf"
}
]
},
{
"Name": "test2"
}
]
},
{
"Name": "martintest3",
"SasConnectionString": "",
"Containers": []
}
]
}
}
使用以下命令运行带有您的作业的应用程序:
blobtolocal job1.json