Учетная запись хранения Azure - ошибка 403 запрещена

У меня есть функция Azure, которая должна обрабатывать файлы в контейнере учетной записи хранения. Функцию Azure следует запускать каждый день. Но один-два раза в неделю я вижу, что некоторые файлы в контейнере не обрабатываются: (Вначале 401 файл из 600 не обрабатывается из-за ошибки 403)

введите здесь описание изображения

Как я читал здесь, в Stackoverflow. Это из-за разницы во времени токена SAS. Можно ли без серьезных изменений в моем коде решить эту проблему?

мой код:

 CloudStorageAccount sa;
 CloudStorageAccount.TryParse("MyConnString", out sa);
 _blobClient = sa.CreateCloudBlobClient();
 ICloudBlob sourceBlob = _blobClient.GetBlobReferenceFromServer(new Uri(BlobUrl));

Обновить

Сообщение Исключение при выполнении функции: process_files_by_http_trigger_activity Удаленный сервер возвратил ошибку: (403) Запрещено. Удаленный сервер возвратил ошибку: (403) Запрещено.

Стек вызовов:

Начнем с основ. Строка подключения к службе хранилища Azure использует следующий формат. Убедитесь, что вы указали правильное имя учетной записи и пару ключей для строки подключения. Если вы установите учетную запись n1 и ключ учетной записи для учетной записи n2, это вызовет исключение.


person Kaja    schedule 12.12.2019    source источник
comment
Я так не думаю, потому что эта Проблема возникает только в начале процесса, а не в конце.   -  person Gaurav Mantri    schedule 12.12.2019
comment
Не могли бы вы рассказать, как вы создаете токен SAS? Отредактируйте вопрос и включите туда код.   -  person Kaja    schedule 12.12.2019
comment
Собственно использую только ConnectionString. Я не генерирую ключ SAS. может быть, SAS не причина, по которой я получаю эту ошибку   -  person Gaurav Mantri    schedule 12.12.2019
comment
Если вы используете строку подключения и ваш код работает в Azure, вы не должны видеть ошибку 403 из-за асимметрии часов. Вы видите полную информацию об исключении?   -  person Kaja    schedule 12.12.2019
comment
Я обновил свой пост. Было бы очень хорошо, если бы вы могли взглянуть на это   -  person Gaurav Mantri    schedule 12.12.2019
comment
Используете ли вы строку подключения к хранилищу Azure для подключения Azure Blob? Если да, думаю, вы не получите ошибку 403   -  person Kaja    schedule 12.12.2019
comment
Microsoft.Azure.WebJobs.Host.FunctionInvocationException: в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b7xxxx934e089) в Microsoft.Azure.WebJobs.Executors.WebJobs.Host d__16.MoveNext (Microsoft.Azure.WebJobs.Host, Version = 2.4.0.0, Culture = нейтральный, PublicKeyToken = 31bfxxxx64e35) в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version = 4.0.0KeyToken, Culture = нейтральный, культура = нейтральный = b7xxxx934e089) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version = 4.0.0.0, Культура = нейтральный, PublicKeyToken = b7xxxx934e089) в Microsoft.Azure.Exext.Microsoft.Azure.WebJobs. .WebJobs.Host, Version = 2.4.0.0, Culture = нейтральный, PublicKeyToken = 31bfxxxx64e35) Внутреннее исключение Microsoft.WindowsAzure.Storage.StorageException обрабатывается в System.Runtime.ExceptionServices.Excep tionDispatchInfo.Throw: в Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync (Microsoft.WindowsAzure.Storage, Version = 7.2.1.0, Culture = нейтральный, PublicKeyToken = 31bfxxxx64e35Microsoft.WindowsAzure.Storage, Version = 7.2 = нейтральный, PublicKeyToken = 31bfxxxx64e35: c: \ Program Files (x86) \ Jenkins \ workspace \ release_dotnet_master \ Lib \ ClassLibraryCommon \ Core \ Executor \ Executor.csMicrosoft.WindowsAzure.Storage, Version = 7.2.1.0, Culture = нейтральный, PublicKeyToken = 31bfxxxx64e35: 604) в Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient.GetBlobReferenceFromServer (Microsoft.WindowsAzure.Storage, Версия = 7.2.1.0, Культура = нейтральный, PublicKeyToken = 31bfxxxx64e35Microsoft.WindowsAzure.Storage.0, Культура = 7.2.1. , PublicKeyToken = 31bfxxxx64e35: c: \ Program Files (x86) \ Jenkins \ workspace \ release_dotnet_master \ Lib \ ClassLibraryCommon \ Blob \ CloudBlobClient.csMicrosoft.WindowsAzure.Storage, Version = 7.2.1.0, Культура = нейтральный, PublicKeyToken = 31bfx xxx64e35: 563) в Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient.GetBlobReferenceFromServer (Microsoft.WindowsAzure.Storage, версия = 7.2.1.0, культура = нейтральная, PublicKeyToken = 31bfxxxx64e35Microsoft.WindowsAzure.Storage, версия = нейтральная. , PublicKeyToken = 31bfxxxx64e35: c: \ Program Files (x86) \ Jenkins \ workspace \ release_dotnet_master \ Lib \ ClassLibraryCommon \ Blob \ CloudBlobClient.csMicrosoft.WindowsAzure.Storage, Version = 7.2.1.0, культура = нейтральная, PublicKeyToken = 31bfxx6xx64) в bip.dev.afu.inbound.we.process_xz_files_by_http_trigger. XzFileMove (bip.dev.afu.inbound.we, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null) в bip.dev.afu.inbound.we.process_xz_files_by_http_trigger + d__10.MoveNext (bip.dev.afu.inbound .we, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null) в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b7xxxx934e089) в System.Runtime.CompilerServices .TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b7xxxx934e089) в Microsoft.Azure.WebJobs.Host.Executors.VoidTaskMethodInvoker.Online.VoidTaskMethodInvoker_2. 0.0, Культура = нейтральный, PublicKeyToken = 31bfxxxx64e35) в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version = 4.0.0.0, Культура = нейтральный, PublicKeyToken = b7xxxx934e089) в System.RuntimeToken. cation (mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b7xxxx934e089) в Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor + d__24.MoveNext (Microsoft.Azure.WebJobs.Host, Version = 2.4.0.0, Culture = нейтральный, PublicKeyToken = 31bfxxxx64e35) в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version = 4.0.0.0, Культура = нейтральный, PublicKeyToken = b7xxxx934e089) в System.Runtimeccess.CompilerServices.ToolServices. .0.0, Культура = нейтральный, PublicKeyToken = b7xxxx934e089) в Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor + d__23.MoveNext (Microsoft.Azure.WebJobs.Host, Version = 2.4.0.0, Culture = нейтральный, PublicKeyfToken = 31BeyfToken = 31 в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b7xxxx934e089) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndoDebugger tion (mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b7xxxx934e089) в Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor + d__22.MoveNext (Microsoft.Azure.WebJobs.Host, Version = 2.4.0.0, Culture = нейтральный, PublicKeyToken = 31bfxxxx64e35) в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version = 4.0.0.0, Культура = нейтральный, PublicKeyToken = b7xxxx934e089) в System.Runtimeccess.CompilerServices.scandleNoServices. . 0.0.0, культура = нейтральный, PublicKeyToken = b7xxxx934e089) в System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b7xxxx934e089)
на Microsoft.Azure.WebJobs. .Executors.FunctionExecutor + d__16.MoveNext (Microsoft.Azure.WebJobs.Host, Version = 2.4.0.0, Culture = нейтральный, PublicKeyToken = 31bfxxxx64e35) Внутреннее исключение System.Net.WebException обрабатывается в Microsoft.WindowsAzure.Storage.Core.Executor. Executor.ExecuteSync:
в System.Net.HttpWebRequest.GetResponse (System, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b7xxxx934e089) в Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync (Microsoft .Storage, Версия = 7.2.1.0, Культура = нейтральный, PublicKeyToken = 31bfxxxx64e35Microsoft.WindowsAzure.Storage, Версия = 7.2.1.0, Культура = нейтральный, PublicKeyToken = 31bfxxxx64e35: c: \ Program Files (x86) \ Jenkins \ workspace \ release_dotnet_master \ Lib \ ClassLibraryCommon \ Core \ Executor \ Exe cutor.csMicrosoft.WindowsAzure.Storage, Version = 7.2.1.0, Culture = нейтральный, PublicKeyToken = 3xxxxx6ad364e35: 677)   -  person Jim Xu    schedule 13.12.2019


Ответы (1)


Я бы посоветовал вам распечатать строку подключения и посмотреть, все ли она такая же, как вы упомянули в настройках приложения.

DefaultEndpointsProtocol=https;AccountName=[accountName];AccountKey=[accountKey];EndpointSuffix=core.windows.net

Убедитесь, что текущая дата и время вашей системы / экземпляра приложения правильные.

Trace.Write(ConnectionString);

Службы хранения гарантируют, что запрос не старше 15 минут к моменту поступления в службу. Это защищает от определенных атак на систему безопасности, включая атаки с повторением. В случае сбоя этой проверки сервер возвращает код ответа 403 (Запрещено).

Надеюсь, это поможет. Не стесняйтесь отмечать меня в разговоре для получения дополнительной помощи.

Возможно ли, что срок действия вашего токена SAS истек?

person Mohit Verma    schedule 13.12.2019