无法从本地环境将 Blob 存储上传/下载到容器

2024-03-20

我有一个现有的函数应用程序,它具有从 sftp 下载文件、处理文件并将文件上传到 blob 存储的功能。该功能应用程序已部署在azure中并且运行正常。但是,当我从 Visual Studio(本地)运行相同的操作时,我在将文件上传到 Blob 存储时遇到错误。

Microsoft.Azure.Storage.StorageException:此请求无权使用此权限执行此操作。

我确保此应用程序在存储帐户中分配了必要的贡献者角色(这就是它在azure中工作的原因)。我是否需要在本地设置或项目设置中配置任何其他设置,才能使这些功能像部署到 azure 时一样工作?或者存储帐户中是否有任何设置会覆盖从开发运行时执行上传操作但仅从天蓝色运行?

我确保使用本地设置,所有设置都是从​​应用程序配置复制的,其中包含存储帐户名称、blob 存储的连接字符串、sftp url 和包含 sft 站点凭据等的密钥库名称,

Update:忘记提及来自我的计算机的命令行的 az storage container upload 命令已成功上传文件。

update2:根据我的建议,我已遵循tutorial https://learn.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet我成功地创建了容器、上传 blob 并进行清理,没有出现错误。 然后我合并了代码来模拟简单的下载 blob 到内存流中,这也会引发错误

该请求无权使用此执行此操作 允许 (请参阅底部的完整日志)

下载 blob 的代码:

static async Task TokenCredentialsSample()
{
    var tenantId = "xxxxx-xxxx-xxxx-xxxx-xxxxxxxx";
    var tokenProvider = new AzureServiceTokenProvider().GetAccessTokenAsync("https://storage.azure.com/",tenantId);
    var tokenCredential = new TokenCredential(tokenProvider.Result);
    var storageCredentials = new StorageCredentials(tokenCredential);
    var uri = new Uri("https://mystorageaccount.blob.core.windows.net/mycontainer/inbound/myfile.csv");

    var cloudBlockBlob = new CloudBlockBlob(uri, storageCredentials);

    var memoryStream = new MemoryStream();

    cloudBlockBlob.DownloadToStream(memoryStream); // Error here
    memoryStream.Position = 0;
    memoryStream.Close();

}

我还确保从命令行输入 az login 来切换以选择正确的订阅,并且在 Visual Studio 选项中选择了该帐户。

错误日志:

Microsoft.Azure.Storage.StorageException H结果=0x80131500 Message=此请求无权使用此权限执行此操作。 来源=Microsoft.Azure.Storage.Common 堆栈跟踪: 在 Microsoft.Azure.Storage.Core.Executor.Executor.d__11.MoveNext() at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter1.获取结果() 在 Microsoft.Azure.Storage.Core.Executor.Executor.c__DisplayClass0_01.<ExecuteSync>b__0() at Microsoft.Azure.Storage.Core.Util.CommonUtility.RunWithoutSynchronizationContext[T](Func1 个动作运行) 在 Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand1 cmd, IRetryPolicy policy, OperationContext operationContext) at Microsoft.Azure.Storage.Blob.CloudBlob.DownloadRangeToStream(Stream target, Nullable1 个偏移量、Nullable`1 长度、AccessCondition accessCondition、BlobRequestOptions 选项、OperationContext (OperationContext) 在 Microsoft.Azure.Storage.Blob.CloudBlob.DownloadToStream(流目标、AccessCondition accessCondition、BlobRequestOptions 选项、OperationContext operationContext) 在 C:...\source\repos\BlobStorage\Program.cs 中的 BlobStorage.Program.d__2.MoveNext() 处:第 111 行 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.GetResult() 在 C:...\source\repos\BlobStorage\Program.cs 中的 BlobStorage.Program.d__0.MoveNext() 处:第 19 行

该异常最初是在此调用堆栈中引发的: Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteAsync(Microsoft.Azure.Storage.Core.Executor.RESTCommand、Microsoft.Azure.Storage.RetryPolicies.IRetryPolicy、Microsoft.Azure.Storage.OperationContext、System.Threading.CancellationToken) System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) System.Runtime.CompilerServices.TaskAwaiter.GetResult() Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteSync.AnonymousMethod__0() Microsoft.Azure.Storage.Core.Util.CommonUtility.RunWithoutSynchronizationContext(System.Func) Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteSync(Microsoft.Azure.Storage.Core.Executor.RESTCommand、Microsoft.Azure.Storage.RetryPolicies.IRetryPolicy、Microsoft.Azure.Storage.OperationContext) Microsoft.Azure.Storage.Blob.CloudBlob.DownloadRangeToStream(System.IO.Stream,长?,长?,Microsoft.Azure.Storage.AccessCondition,Microsoft.Azure.Storage.Blob.BlobRequestOptions,Microsoft.Azure.Storage.OperationContext) Microsoft.Azure.Storage.Blob.CloudBlob.DownloadToStream(System.IO.Stream、Microsoft.Azure.Storage.AccessCondition、Microsoft.Azure.Storage.Blob.BlobRequestOptions、Microsoft.Azure.Storage.OperationContext) ... [调用堆栈被截断]


好的。我找到了解决方案。

I found 本文 https://joonasw.net/view/azure-ad-authentication-with-azure-storage-and-managed-service-identity注释中明确指出,数据读取者或数据贡献者角色是必须的!没有任何 MS 文件,例如this https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-linux-vm-access-storage没有像文章那样强调附加角色(数据读取者/数据贡献者)的重要性。

请注意,它是不够您的用户是所有者/贡献者 订阅/资源组/存储帐户。用户必须是 分配给数据读取者或数据贡献者角色以获取访问权限 使用 Azure AD 身份验证的数据。

我们认为贡献者就足够了,但事实并非如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法从本地环境将 Blob 存储上传/下载到容器 的相关文章

随机推荐

  • 使用java下载zip文件?

    我正在使用 Java 从 Web 服务器下载 zip 文件 但不知何故我在每个文件中丢失了大约 2kb 我不知道为什么 因为相同的代码可以很好地处理其他格式 例如文本 mp3 等 任何帮助表示赞赏 这是我的代码 public void do
  • 如何折叠区域中的空白?

    假设我有这个列表文本文件 field1 variable length field variable length field aaaaaa aaaa aaaaaaaaa bbbbbb bbbbbbbbbbbbbbbbbbbb bbbb 我
  • 如何按顺序执行多个方法?

    强制方法按顺序执行的最佳方法是什么 我有三个方法 但我希望方法1在方法2之前完成 然后当方法2完成时 执行方法3 Example void Method1 void Method2 void Method3 self Method1 sel
  • 通话中状态栏如何影响 ViewController 视图大小?

    我试图理解如何view关联到一个UITabBarController UINavigationController or UIViewController当通话状态栏切换时做出反应 我的问题是它们的行为似乎不同 这会给我带来副作用 我制作了
  • 错误:无法启动新线程

    我有一个使用以下配置运行的网站 Django mod wsgi 阿帕奇 在一个用户的请求中 我向另一个服务发送另一个HTTP请求 并通过python的httplib库解决了这个问题 但有时此服务得不到答复的时间太长 并且 httplib 的
  • 通过 URL 自动登录用户

    我每周向网站的注册会员发送一封邮件 其中包含该网站上私人页面的 URL 出于可用性目的 我不希望用户在单击 URL 后必须提供凭据 我正在使用 ASP NET 会员提供程序模型 Question 我如何实现这一点 以便用户可以通过单击专门的
  • 使用传递的参数附加方法后分离事件处理程序

    我需要将参数 在 C 中 传递给事件处理程序 然后能够分离事件处理程序 我附加事件处理程序并传递参数 map MouseLeftButtonUp sender e gt map MouseLeftButtonUp2 sender e sho
  • Python 导入机制

    我有两个相关的 Python 导入 问题 它们很容易测试 但我想要语言定义的答案而不是特定于实现的答案 而且我也对样式 约定感兴趣 所以我在这里问 1 如果模块 A 导入模块 B 模块 B 导入模块 C 模块 A 中的代码是否可以在不显式导
  • 如何获取 Binder 事务缓冲区的内容以进行故障排除

    有没有办法以编程方式或通过调试工具来了解 Binder 事务缓冲区中保存的当前事务 有时 通常在运行数小时 数天后 我的应用程序会崩溃并出现如下错误跟踪 08 30 09 49 57 459 1879 1904 E JavaBinder F
  • 具有行为奇怪的多值参数的存储过程

    我在 SQL Server 中创建了一个存储过程来为 SSRS 提供数据 以使其能够接受多个值 我已经创建了它 当我在报告中使用它或在 SQL Server 中执行它时 我收到以下错误消息 消息 207 第 16 层 状态 1 第 35 行
  • 如何避免电子邮件自动化的 Outlook 安全警告?

    我正在尝试使用 VBA 从 Excel 2010 发送 Outlook 电子邮件 Stack Overflow 上的大多数答案似乎都没有使用 VBA 来避免 Outlook 安全警告的方法 对于 Outlook Excel 2010 也没有
  • Swift - 从地图注释执行 Segue

    我的地图上有 1 个图钉 我需要将注释标题传递给另一个 UIView 在这种情况下是 ikinci Ekran swift 但我无法这样做 这是我的代码的segue部分 我不知道如何segue所选注释的标题 我只粘贴了相关部分的代码 cla
  • 从数据库中检索mp3文件

    我有一个关于如何从数据库中检索存储为 byte 数组的 mp3 文件并将其显示在表单中并让用户下载 播放的问题 唔 这确实可以做到 但如果它是 RDBMS 您确实应该重新考虑解决方案 通常 数据库不是为使用大型二进制对象而设计或优化的 并且
  • 首次打开时 Colorbox 无法以正确的高度打开

    所以我正在使用colorbox http colorpowered com colorbox 联系表单插件 我只是默认的 colorbox 属性 所以它应该自动调整到它包含的 div 对吗 首次加载时 此颜色框内容上有一个小的垂直滚动条 我
  • Android 虚拟键盘监听器

    虽然我之前问过这个问题 但没有得到任何正确的答案 当编辑文本聚焦时 我有一个 EditText android 虚拟键盘弹出 我已使用属性窗口中的 ime 选项将 完成 按钮添加到键盘 现在我想通过按 完成 按钮来执行一些操作 这个怎么做
  • 使用 Html 链接将 PHP GET 数据发送到服务器

    我有一段时间没有写 PHP GET 请求了 所以我有点生锈了 但是如何使用 Html 链接发送 GET 数据 如果我使用 jQuery 的 get 方法 我知道该怎么做 但我只是想知道是否有更简单的方法使用 Html 中的 href 或类似
  • Java中如何使图像从左向右移动

    到目前为止 我已经创建了下面的类 但是 现在我想插入一个代码以使图像从左到右和从右到左滑动 我通常会使用滑动平台 但是当我尝试实现它时它不起作用 我还是一个java初学者 所以我很感谢你的帮助 这是我的 Java 类的代码 package
  • 升级Java后找不到Sun.security

    我有一个使用 Play 2 0 创建的应用程序 我实现了 scribe java 库来使用一些 OAuth 服务 直到今天一切都很好 但是当我升级 jdk 并重新启动服务器时 我无法使用 scribe java 库 似乎它使用了一些类 例如
  • 在 ES6 中创建多个构造函数

    在 ES5 中 可以为一个类创建多个构造函数 同时使用原型保留两个类的公共部分 如下所示 function Book just creates an empty book function Book title length author
  • 无法从本地环境将 Blob 存储上传/下载到容器

    我有一个现有的函数应用程序 它具有从 sftp 下载文件 处理文件并将文件上传到 blob 存储的功能 该功能应用程序已部署在azure中并且运行正常 但是 当我从 Visual Studio 本地 运行相同的操作时 我在将文件上传到 Bl