运行Azure PowerShell创建App Service Plan返回Unauthorized错误
在VS Code中运行如下PowerShell脚本创建Azure App Service相关资源时,New-AzAppServicePlan和New-AzWebApp命令返回Unauthorized错误:
$ResourceGroupName="powershell-grp" $Location="North Europe" $AppServicePlanName="PowershellAppService1975" $WebAppName="PowershellWebApp1975" Connect-AzAccount Get-AzSubscription -SubscriptionName "Visual Studio Enterprise" | Select-AzSubscription New-AzResourceGroup -Name $ResourceGroupName -Location $Location New-AzAppServicePlan -Name $AppServicePlanName -Location $Location -Tier "B1" -NumberofWorkers 1 -ResourceGroupName $ResourceGroupName New-AzWebApp -ResourceGroupName $ResourceGroupName -Name $WebAppName -Location $Location -AppServicePlan $AppServicePlanName
返回错误信息:
New-AzAppServicePlan: C:\Temp\AzureCmds\Azure Powershell-WebApp\Script1.ps1:9:1
Line |
9 | New-AzAppServicePlan -Name $AppServicePlanName -Location $Location -T …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Operation returned an invalid status code 'Unauthorized'New-AzWebApp: C:\Temp\AzureCmds\Azure Powershell-WebApp\Script1.ps1:10:1
Line |
10 | New-AzWebApp -ResourceGroupName $ResourceGroupName -Name $WebAppName …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Operation returned an invalid status code 'Unauthorized'
该报错属于鉴权失败,核心是当前执行命令的身份没有对应操作的合法权限,常见触发原因包括:
- 登录账号对目标订阅没有资源写入权限
- 订阅切换操作未生效,命令实际在无权限的其他订阅上下文执行
- Az模块版本过旧存在鉴权逻辑bug
- 本地缓存的Azure登录令牌过期
- 目标订阅状态异常(欠费、冻结、被禁用)
- 订阅下Microsoft.Web资源提供程序未注册
- 校验当前执行上下文
登录并切换订阅后,单独执行Get-AzContext,确认返回结果中的订阅为目标Visual Studio Enterprise、登录账号为预期的有权限账号。通过订阅名切换订阅容易因为重名失效,优先用订阅ID指定上下文:# 替换为Azure门户订阅页查到的目标订阅ID Set-AzContext -SubscriptionId "你的目标订阅ID" - 校验账号RBAC权限
进入Azure门户打开目标订阅的「访问控制(IAM)」页面,确认当前登录账号被分配了所有者、参与者角色,或持有包含Microsoft.Web资源创建权限的自定义角色。如果使用来宾账号访问,需要额外确认租户管理员已开放来宾账号的资源操作权限。 - 清理过期缓存重新登录
执行以下命令清空本地所有Az模块的登录缓存,重新走身份认证流程,避免复用过期的失效令牌:Clear-AzContext -Force Connect-AzAccount - 更新Az模块修复已知bug
旧版本Az.Websites模块存在App Service相关操作的鉴权兼容bug,以管理员身份启动PowerShell执行以下命令更新全量Az模块,更新完成后重启PowerShell会话再执行脚本:Update-Module -Name Az -Force - 检查订阅状态
在Azure门户确认目标订阅处于正常启用状态,无欠费、被管理员禁用、被Azure策略拦截写入的情况。 - 检查资源提供程序注册状态
分步执行脚本验证:如果New-AzResourceGroup执行成功,仅后续Web相关命令报错,执行以下命令注册Microsoft.Web资源提供程序,等待注册完成后再执行后续创建操作:Register-AzResourceProvider -ProviderNamespace Microsoft.Web
内容的提问来源于stack exchange,提问作者sandy

