Копирование большого двоичного объекта Azure с использованием токена SAS (с ограничением IP) 403 запрещено

#azure #azure-blob-storage

#azure #azure-blob-хранилище

Вопрос:

Я пытаюсь скопировать большой двоичный объект из одного uri в другой (оба в пределах одной учетной записи хранения), оба имеют токен SAS для учетных данных. Это отлично работает с токеном SAS, который не имеет ограничения IP, но завершается сбоем, когда исходный токен SAS большого двоичного объекта ограничен IP.

Примечание: это не сбой, потому что я неправильно указал IP, работают другие функции blob, например, список, удаление, загрузка и т.д.

Пример кода:

 Uri sourceBlobUri = new Uri("https://mystorage.blob.core.windows.net/a-container/a.json");
Uri targetBlobUri = new Uri("https://mystorage.blob.core.windows.net/a-container-archive/a.json");

var prodTokenSource = @"A_SAS_TOKEN_WITH_A_IP_RESTRICTION";
var prodTokenArchive = @"A_SAS_TOKEN_WITH_A_IP_RESTRICTION";

StorageCredentials sourceCredentials = new StorageCredentials(prodTokenSource);
StorageCredentials targetCredentials = new StorageCredentials(prodTokenArchive);

CloudBlockBlob sourceBlob = new CloudBlockBlob(sourceBlobUri, sourceCredentials);
CloudBlockBlob targetBlob = new CloudBlockBlob(targetBlobUri, targetCredentials);

await targetBlob.StartCopyAsync(sourceBlob); //Fails 403 error
  

Можно предположить, что запрос на копирование исходит из Azure, поэтому IP-адрес заблокирован? Должен ли я настроить исходный токен SAS для приема диапазона IP-адресов из Azure?
Есть ли другой способ копирования больших двоичных объектов, позволяющий использовать токены SAS?

Ответ №1:

Можно предположить, что запрос на копирование исходит из Azure, поэтому IP-адрес заблокирован? Должен ли я настроить исходный токен SAS для приема диапазона IP-адресов из Azure?

Вы абсолютно правы. Операция копирования — это операция на стороне сервера, а IP-адрес, указанный в токене SAS, является IP-адресом клиента. Поскольку IP-адрес, включенный в SAS, не является IP-адресом Azure, операция копирования завершается с ошибкой. Вы можете настроить токен SAS для приема диапазона IP-адресов из Azure, но я предполагаю, что для копирования используется какой-то внутренний IP-адрес, поэтому я не уверен, что это сработает.

Есть ли другой способ копирования больших двоичных объектов, позволяющий использовать токены SAS?

Я бы рекомендовал не использовать ACLing IP в SAS для операции копирования, т.Е. Не указывать ограничение IP-адреса в SAS для операции копирования.

Комментарии:

1. Хорошо, интересно, спасибо. Интересно, следует ли считать это ошибкой в API? Функция есть, но работает не так, как указано в документации. Возможно, мне следует запросить, чтобы метод копирования сохранял исходные учетные данные.

2. Я бы не назвал это ошибкой, поскольку функция работает так, как задумано. Вы хотите, чтобы URL-адрес SAS использовался с определенных IP-адресов, и это то, что он делает.