2016-11-23 10 views
0

Я пытаюсь использовать AzCopy 5.1.0 скачать одного блоб из контейнера Blob Storage с использованием SAS, порожденную Storage Explorer:Как скачать Blob с помощью SAS

https://myaccount.blob.core.windows.net/mycontainer/[blob-uuid]?st=2016-11-23T18%3A26%3A00Z&se=2016-11-24T18%3A26%3A00Z&sp=rl&sv=2015-12-11&sr=b&sig=[signature]

azcopy /Source:https://myaccount.blob.core.windows.net/mycontainer /SourceSAS:"?st=2016-11-23T18%3A26%3A00Z&se=2016-11-24T18%3A26%3A00Z&sp=rl&sv=2015-12-11&sr=b&sig=[signature]" /Dest:"c:\data" 

Если/Источник должен быть контейнером blob, и/SourceSAS должен быть токеном SAS , тогда где-то мне нужно передать фактический ключ Blob ([blob-uuid]).

IMHO, это должно быть/SourceKey, но с указанием моего ключа blob возвращается ошибка: «Прилагаемый ключ хранения (SourceKey) не является допустимой строкой Base64». Это согласуется с помощью командной строки, которая описывает этот параметр как «ключ учетной записи хранилища».

Единственный другой кандидат, который я могу найти, это/Pattern, но это похоже на случай загрузки капель, перечисляя содержимое контейнера. Это похоже на ошибку 403, которую я получаю, когда я укажу здесь конкретный ключ blob; контейнер является закрытым.

В любом случае AzCopy жалуется, что «Сервер не смог аутентифицировать запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись». Это, по моему опыту, указывает на то, что исходный URI, на который была сгенерирована подпись SAS, не восстанавливается должным образом.

Я могу использовать оригинальный SAS URI напрямую через curl, так что речь не идет о непоследовательности подписи.

Я также попытался создать UAS UAS программно с помощью SDK, поэтому я могу указать политику общего доступа, но это тоже не работает. Я все еще думаю, что AzCopy нуждается в недостающей части URI SAS.

ответ

0

целевой передачи AzCopy всегда является каталог, а не один блобы/файла, так AzCopy нужен уровень контейнера SAS вместо блоб SAS. Шаблон используется только для фильтрации объектов для передачи.

Мы откроем задачу, чтобы отслеживать загрузку одного блоба с blob SAS. В любом случае, это не соответствует текущей логике AzCopy, мы рассмотрим ее как новый запрос функции.

0

Читать docs:

Download single blob:

AzCopy /Source:https://myaccount.blob.core.windows.net/mycontainer /Dest:C:\myfolder /SourceKey:key /Pattern:"abc.txt" 

/Source будет ваш URI до контейнера

/SourceKey будет ключ, но без знака вопроса в начале

/Pattern будет имя вашего блоба

/Destination будет именем локальной папки, в которой вы хотите блобо для загрузки

+0

Вы предлагаете «ключ» для параметра/SourceKey - это токен SAS без предшествующего вопроса? Поскольку это вызывает ту же ошибку, которую я описал: «Приведенный ключ хранения (SourceKey) не является допустимой строкой Base64« Справка из командной строки: azcopy/?: SourceKey описывает параметр таким образом: '/ SourceKey: Задает хранилище ключ учетной записи для исходного ресурса », который согласуется с сообщением об ошибке, но не согласуется с общей операцией загрузки. – ayang

+0

То, что написал астайков выше, верно, но позвольте мне пояснить больше для вашего примера, вы можете назвать AzCopy следующим: azcopy /Source:https://myaccount.blob.core.windows.net/mycontainer/SourceSAS: "? St = 2016-11-23T18% 3A26% 3A00Z & se = 2016-11-24T18% 3A26% 3A00Z & sp = rl & sv = 2015-12-11 & sr = b & sig = [signature] "/ Dest:" c: \ data "/ Pattern:" [blob- uuid] « –

+0

В« sr = b »вы используете блок управления SAS вместо контейнера SAS, поэтому, пожалуйста, убедитесь, что ваш AzCopy обновлен до последней версии, поскольку старый AzCopy не поддерживает blob SAS в качестве источника SAS. –

0

Мы можем скачать блобы из источника контейнера с помощью счета ключа или контейнера SAS Токена. И URI blob не поддерживается как источник для загрузки blob. Следующий снимок - это результат моего теста.

1.Используйте контейнер как токен источника и контейнера SAS. С помощью паттерна выберите загружаемый кадр.

AzCopy /Source:https://mystorageAccount.blob.core.windows.net/mycontainer /Dest:C:\myfolder /SourceSAS:"?st=2016-11-24T02%3A34%3A00Z&se=2016-11-25T02%3A34%3A00Z&sp=rl&sv=2015-12-11&sr=c&sig=[s‌​ignature]" /Pattern:blobName 

enter image description here

2.Use контейнер в качестве источника и счета ключ token.It также может работать.Если я использую неправильный ключ маркер (ConnectionString), то я получаю "The supplied storage key (SourceKey) is not a valid Base64 string" ошибка

enter image description here

3.Use контейнер в качестве источника и двоичных объектов маркера SAS, он не работает

enter image description here

4.Use блобо в качестве источника и контейнер маркеров SAS, он не поддерживает, без рисунка

enter image description here

[Update]

Мы можем использовать azure storage .Net SDK для загрузки блоб из двоичных объектов с URI сгустка SAS лексемы.

StorageCredentials storageCredentials = new StorageCredentials("blob sas token");//without "?" 
      var blobName = "blobName"; 
      var downloadFolder = @"c:\filefolder"; 
      var filePath = Path.Combine(downloadFolder, blobName); 
      CloudBlockBlob sourceBlockBlob = new CloudBlockBlob(new Uri("blob url"), storageCredentials); 
      sourceBlockBlob.DownloadToFile(filePath, FileMode.Create); 
+0

Привет, Том, спасибо за выполнение этих сценариев - это разъясняет вещи. Однако для моего случая применяется только пример 3. Я действительно пытаюсь загрузить с использованием URI Blob SAS. – ayang

+0

Согласно AzCopy [document] (https://docs.microsoft.com/en-us/azure/storage/storage-use-azcopy#blob-download), нет никакой команды для поддержки загрузки одного blob с помощью Blob URI через Blob SAS Token от AzCopy tools –

+0

Возможно, существует обходное решение, которое мы можем использовать для обеспечения безопасности в виде azure storage .NET SDK. Демо-код, пожалуйста, обратитесь к обновлению. –

 Смежные вопросы

  • Нет связанных вопросов^_^