Azure 存储帐户 - 错误 403 被禁止
Posted
技术标签:
【中文标题】Azure 存储帐户 - 错误 403 被禁止【英文标题】:Azure Storage Account - error 403 forbidden 【发布时间】:2020-04-05 23:38:44 【问题描述】:我有一个 Azure 函数,它应该处理存储帐户容器中的文件。 Azure 函数应该每天触发。但是每周一两次我看到容器中的一些文件没有被处理:(开始600的401个文件没有被处理,因为错误403)
正如我在 *** 中所读到的。这是因为 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) 禁止。
调用栈:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__16.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__13.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 内部异常 Microsoft.WindowsAzure.Storage.StorageException 处理于 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw:在 Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync (Microsoft.WindowsAzure.Storage,版本=7.2.1.0,文化=中性, PublicKeyToken=31bfxxxx64e35Microsoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: c:\程序文件 (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.csMicrosoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: 第604章) Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient.GetBlobReferenceFromServer (Microsoft.WindowsAzure.Storage,版本=7.2.1.0,文化=中性, PublicKeyToken=31bfxxxx64e35Microsoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: c:\程序文件 (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlobClient.csMicrosoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: 第563章) Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient.GetBlobReferenceFromServer (Microsoft.WindowsAzure.Storage,版本=7.2.1.0,文化=中性, PublicKeyToken=31bfxxxx64e35Microsoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: c:\程序文件 (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlobClient.csMicrosoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: 第546章) bip.dev.afu.inbound.we.process_xz_files_by_http_trigger.XzFileMove (bip.dev.afu.inbound.we,版本=1.0.0.0,文化=中性, PublicKeyToken=null) 在 bip.dev.afu.inbound.we.process_xz_files_by_http_trigger+d__10.MoveNext (bip.dev.afu.inbound.we,版本=1.0.0.0,文化=中性, PublicKeyToken=null) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.VoidTaskMethodInvoker
2+<InvokeAsync>d__2.MoveNext (Microsoft.Azure.WebJobs.Host, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bfxxxx64e35) at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b7xxxx934e089) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b7xxxx934e089) at Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker
2+d__9.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__24.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__23.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__22.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (mscorlib, 版本=4.0.0.0,文化=中性,PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__16.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 内部异常 System.Net.WebException 处理于 Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync: 在 System.Net.HttpWebRequest.GetResponse(系统,版本 = 4.0.0.0, 文化=中性,PublicKeyToken=b7xxxx934e089) 在 Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync (Microsoft.WindowsAzure.Storage,版本=7.2.1.0,文化=中性, PublicKeyToken=31bfxxxx64e35Microsoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: c:\程序文件 (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.csMicrosoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=3xxxxx6ad364e35: 第677章)
【问题讨论】:
您的 SAS 令牌是否可能已过期? 我不这么认为,因为只有在过程开始时我才有这个问题,而不是在结束时 您能分享一下您是如何创建 SAS 令牌的吗?请编辑问题并在其中包含代码。 其实我只使用ConnectionString。我不生成 SAS 密钥。可能是 SAS 不是我收到此错误的原因 如果您使用连接字符串并且如果您的代码在 Azure 中运行,由于时钟偏差,您应该不会看到 403 错误。您是否看到完整的异常详细信息? 【参考方案1】:从基础开始,Azure 存储连接字符串使用以下格式。请确保您为连接字符串提供了正确的帐户名和密钥对。如果你设置了账号n1和账号n2的账号key,会导致异常。
DefaultEndpointsProtocol=https;AccountName=[accountName];AccountKey=[accountKey];EndpointSuffix=core.windows.net
我建议你打印你的连接字符串,看看它是否一直和你在 App.setting 中提到的一样。
Trace.Write(ConnectionString);
请确保您的系统/应用实例的当前日期时间正确。
存储服务确保请求到达服务的时间不超过 15 分钟。这可以防止某些安全攻击,包括重放攻击。当此检查失败时,服务器返回响应码 403 (Forbidden)。
希望对您有所帮助。如有任何其他帮助,请随时在您的对话中标记我。
【讨论】:
以上是关于Azure 存储帐户 - 错误 403 被禁止的主要内容,如果未能解决你的问题,请参考以下文章
尝试将数据库导出到 Azure 中的存储帐户时出现 403 错误
ClientError:调用 HeadObject 操作时发生错误(403):尝试跨帐户复制时禁止
Azure 使用 REST api 和托管标识创建 blob 容器 - 403 错误