执行az命令为Azure Key Vault分配Secret Reader角色的报错排查
报错根本原因
该报错并非Azure Key Vault权限配置、角色定义缺失或者来宾账号权限不足导致,可以直接从报错日志里的请求路径前缀C:/Program Files/Git定位问题根源:这是Windows平台Git Bash的POSIX路径自动兼容机制篡改了Azure CLI的入参,和Azure服务端逻辑无关。
完整触发链路:
- 你在Git Bash中传入的scope参数是单斜杠开头的Azure资源ID(
/subscriptions/.../testhalvault),本身是用于调用Azure API的逻辑路径 - Git Bash为了兼容Windows系统的路径规则,会自动识别所有以单斜杠开头的字符串为本地Unix路径,自动拼接上Git程序的安装目录绝对路径,最终把入参篡改成了
C:/Program Files/Git/subscriptions/.../testhalvault的本地文件路径 - Azure CLI拿到被篡改的参数后,直接把这个本地路径拼接到API请求URL中,由于该地址不符合
https://开头的合法HTTP schema,Python requests库找不到对应协议的请求适配器,就抛出了InvalidSchema: No connection adapters were found的报错。
可直接落地的解决方法
根据操作习惯选择对应方案即可,所有方案均不需要修改Azure端的配置:
- 单次会话关闭路径转换:在当前Git Bash窗口先执行命令关闭本次会话的路径自动转换规则,再执行原有角色绑定命令:
export MSYS_NO_PATHCONV=1 - 参数格式绕开路径识别:将scope参数的开头改为双斜杠,修改后的命令片段示例:
--scope "//subscriptions/Not-putting this-here/resourceGroups/pallabdev/providers/Microsoft.KeyVault/vaults/testhalvault"
双斜杠开头的字符串会被Git Bash识别为非本地路径,不会触发自动拼接。 - 切换终端执行:直接打开Windows原生的PowerShell或者CMD窗口,在其中执行原有的Azure CLI命令,原生Windows终端没有POSIX路径自动转换逻辑,不会篡改传入的参数内容。
验证小技巧
如果需要先确认是否触发了路径转换,可以在Git Bash中执行echo命令打印待传递的参数,比如:echo "/subscriptions/xxx/your-vault-path"
如果输出的结果前面自动拼接了C:/Program Files/Git前缀,就说明确实触发了路径篡改,套用上述方法即可解决。
内容的提问来源于stack exchange,提问作者Pallab
相关产品推荐
相关产品推荐

