在自动化账户中用用户分配托管标识通过Azure RM模块连接Azure存储账户报错
问题解决步骤
模块兼容性适配
你当前使用的Get-AzureStorageBlob属于独立的Azure.Storage模块,和AzureRM系列模块返回的存储上下文对象存在兼容问题,是触发报错的最常见原因:
- 优先把自动化账户中的
AzureRM模块替换为官方目前主推的Az模块(AzureRM已停止维护,不再接收问题修复),替换后的命令逻辑如下:
Connect-AzAccount -Identity $storage = Get-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageAccountName $srcContext = $storage.Context $blobs = Get-AzStorageBlob -Context $srcContext -Container $containerName -MaxCount $MaxReturn -ContinuationToken $Token
- 如果你必须保留
AzureRM模块使用,需要确认自动化账户中安装的AzureRM.Storage和Azure.Storage模块大版本完全一致,避免跨版本上下文解析失败。
托管标识权限补全
仅给托管标识分配资源组层面的管理权限不足以访问Blob数据,需要额外配置存储数据权限:
- 给托管标识分配存储账户层面的对应角色,例如
存储Blob数据读取者/存储Blob数据贡献者,角色权限需要和你的操作场景匹配。 - 权限配置完成后需要等待10~15分钟生效,再重新运行自动化作业测试。
兜底上下文生成方案
如果调整后依然报错,可以直接通过托管标识获取OAuth令牌主动生成存储上下文,跳过从存储账户对象拉取上下文的步骤:
# AzureRM模块适用的兜底逻辑 $tokenAuthUri = $env:IDENTITY_ENDPOINT + "?resource=https://storage.azure.com&api-version=2019-08-01" $headers = @{"X-IDENTITY-HEADER" = $env:IDENTITY_HEADER } $response = Invoke-RestMethod -Uri $tokenAuthUri -Method Get -Headers $headers $accessToken = $response.access_token $srcContext = New-AzureStorageContext -StorageAccountName $StorageAccountName -OAuthToken $accessToken $blobs = Get-AzureStorageBlob -Context $srcContext -Container $containerName -MaxCount $MaxReturn -ContinuationToken $Token
内容的提问来源于stack exchange,提问作者Chaheti Jain
相关产品推荐
相关产品推荐

