New-AzStorageShare PowerShell cmdlet 报错:服务器无法验证请求身份
问题根因
- 首次403报错的核心原因:高版本Az.Storage模块中,调用
New-AzStorageContext仅传入存储账户名时,默认使用当前登录的Azure AD身份生成Bearer令牌完成认证,但Azure文件服务的数据平面操作暂不支持Bearer令牌认证,因此触发认证失败。你一个月前可正常运行是因为当时使用的低版本模块默认采用其他认证逻辑,模块升级后触发了该问题。 - 后续使用
Set-AzCurrentStorageAccount仍然报错,本质是该命令默认还是调用Azure AD身份做认证,和首次报错的底层逻辑一致。
修复方案
方案1:通过存储账户密钥生成认证上下文
创建存储账户后直接拉取对应密钥生成上下文,避免调用AAD认证逻辑:
# 创建存储账户的原有逻辑保持不变 $storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName -SkuName Premium_LRS -location $location -Kind "FileStorage" ` -enableLargeFileShare -AllowBlobPublicAccess $false -EnableAzureActiveDirectoryDomainServicesForFile $true # 拉取存储账户密钥生成有效上下文 $storageKey = (Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName)[0].Value $storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageKey # 执行文件共享创建 New-AzStorageShare -Name "pubs" -Context $storageContext
方案2:通过存储账户连接字符串生成认证上下文
直接从创建完成的存储账户对象中提取连接字符串生成上下文,写法更简洁:
# 创建存储账户的原有逻辑保持不变 $storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName -SkuName Premium_LRS -location $location -Kind "FileStorage" ` -enableLargeFileShare -AllowBlobPublicAccess $false -EnableAzureActiveDirectoryDomainServicesForFile $true # 提取连接字符串生成有效上下文 $storageContext = New-AzStorageContext -ConnectionString $storageAccount.Context.ConnectionString # 执行文件共享创建 New-AzStorageShare -Name "pubs" -Context $storageContext
其他排查建议
如果修改后仍出现请求发送失败的问题,可做以下检查:
- 运行
Get-Module Az.Storage -ListAvailable查看当前模块版本,低于3.2.0版本可执行Update-Module Az.Storage升级到最新稳定版后重试。 - 确认当前执行PowerShell命令的账号,对目标资源组和存储账户有至少「存储账户密钥操作员」的权限,可正常拉取存储账户的密钥或连接字符串。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

