如何从Azure Linux App Service访问Windows VM中的共享目录
Linux Azure App Service 访问同租户Windows VM文件的可行解决方案
Linux App Service沙箱默认封禁了SMB协议445端口的出站连接,因此直接挂载Azure File Share、通过SMB协议访问Windows VM共享文件夹的方案都会被限制,可采用以下3种可行方案落地:
方案1:通过SSHFS挂载VM共享目录
- 前置配置:Windows Server 2019及以上版本可直接安装系统内置的OpenSSH Server,更低版本可手动部署Win32-OpenSSH服务。配置VM所属网络安全组(NSG)的入站规则,仅放行App Service出站IP段的22端口访问权限,避免SSH端口公网暴露。
- App Service侧操作:
- 进入App Service控制台的「配置」-「常规设置」页面,开启「持久存储」开关,避免容器重启后自定义配置丢失。
- 通过SSH登录App Service运行容器,执行命令
apt update && apt install sshfs -y安装SSHFS工具。 - 容器内生成SSH密钥对,将公钥添加到Windows VM的
authorized_keys配置文件中,配置免密登录。 - 执行挂载命令:
sshfs <VM管理员账号>@<VM内网IP>:/C/共享文件夹本地路径 /home/site/wwwroot/oldfiles -o allow_other,IdentityFile=/home/.ssh/id_rsa - 将挂载命令写入App Service自定义启动脚本,避免容器重启后挂载失效。
- 适配提示:如果App Service和Windows VM加入同一个VNet,可直接通过内网IP访问,不需要走公网传输,安全性和延迟表现更佳。
方案2:部署内部文件代理服务
- 在Windows VM上部署轻量HTTP文件服务:可以用最小ASP.NET Core API封装文件读写、目录列表能力,也可以直接用IIS搭建受权限控制的静态文件站点,服务仅绑定内网地址,仅允许VNet内IP访问。
- App Service侧接入同一个VNet,业务代码中将原本地文件操作逻辑替换为调用VM上的文件代理接口即可,不需要改动上层业务逻辑。
- 优势:不需要修改App Service容器的底层配置,兼容性最高,后续文件存储位置迁移时仅需要调整代理服务配置即可,对业务无感知。
方案3:使用SMB over QUIC(仅限Windows Server 2022 Azure Edition)
- 若Windows VM使用的镜像为Windows Server 2022 Azure Edition,可开启SMB over QUIC功能,该功能使用443端口传输SMB流量,不会被App Service沙箱封禁。
- 功能配置完成后可直接在Linux App Service中挂载VM的SMB共享目录,不需要修改业务代码。
所有方案都建议优先将App Service和Windows VM接入同一个Azure VNet,关闭公网访问路径,避免文件泄露风险。涉及文件写入操作时需要做好权限控制,避免多实例读写冲突。
内容的提问来源于stack exchange,提问作者Thomas Newman
相关产品推荐
相关产品推荐

