我有完全相同的要求:从 Azure 备份 blob,因为我们有数百万客户,你是对的 - 一个拥有完全访问权限的草率开发人员可能会危及整个系统。
因此,我编写了一个完整的应用程序“Blob To Local Backup”,在 MIT 许可下在 github 上免费和开源:https ://github.com/smartinmedia/BlobToLocalBackup
它解决了您的许多问题,即:a) 您只能授予此应用程序的 READ 访问权限,以便应用程序无法破坏 Azure 上的任何数据 b) 备份到服务器,您的马虎开发人员或黑客没有与您的 Azure 帐户具有相同的访问权限。c) 该软件提供版本控制,因此您甚至可以保护自己免受例如勒索/加密攻击。d) 我包含了一种序列化方法而不是数据库,因此您甚至可以在 Azure 上拥有数百万个文件,并且您仍然能够保持同步(我们在 Azure 上有 2000 万个文件)。
以下是它的工作原理(有关更多详细信息,请阅读 github 上的 README):
- 您在主文件夹中设置 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