Azure API在新订阅下无法创建Blob存储账户如何解决
Azure API调用新订阅创建存储账户权限报错解决方案
报错信息:
The client 'xxx' with object id 'xxx' does not have authorization to perform action 'Microsoft.Storage/storageAccounts/write' over scope '/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.Storage/storageAccounts/xxxx' or the scope is invalid. If access was recently granted, please refresh your credentials.
排查与解决步骤
- 确认API调用使用的身份
你UI操作用的是个人账号,但API调用大概率使用的是服务主体、托管身份或缓存的旧凭证,和UI登录身份不是同一个。你可以解析API请求携带的Access Token的oid字段,和报错信息里的object id做对比,确认API实际使用的身份。 - 给对应身份分配新订阅权限
如果API使用的身份和UI登录身份不一致,进入新订阅的访问控制(IAM) 页面,给报错信息里的object id对应的身份分配至少存储账户参与者角色,或包含Microsoft.Storage/storageAccounts/write操作权限的自定义角色,权限范围覆盖你要操作的资源组或整个订阅。 - 校验API请求参数
确认请求中填写的订阅ID、资源组名称拼写完全正确,没有误用旧订阅的参数,操作的资源组需提前在新订阅下创建完成。 - 刷新身份凭证
如果是刚完成权限分配,旧的未过期Access Token还会保留旧的权限信息,需清除本地缓存的旧凭证,重新申请新的Access Token后再调用接口。 - 验证权限有效性
可以使用Azure CLI测试同一身份是否能正常创建存储账户,执行命令:az storage account create --name <存储账户名> --resource-group <资源组名> --location <区域> --sku Standard_LRS
如果CLI执行成功,说明权限配置无问题,检查API代码中的凭证逻辑、参数配置即可。
常见踩坑点:如果你使用Azure SDK调用接口,SDK默认会按优先级读取凭证(环境变量服务主体>托管身份>本地CLI/VS登录凭证),如果本地环境变量配置了旧的无权限服务主体,SDK会优先调用该身份,导致权限报错,可检查SDK的凭证链配置,指定使用有权限的身份。
内容的提问来源于stack exchange,提问作者Gilo
相关产品推荐
相关产品推荐

