如何实现LogicApp->APIM->SFTP链路APIM至SFTP方向的配置
APIM 向 SFTP 发起请求的落地方案(适配固定出口IP白名单需求)
首先明确基础前提:选用的APIM实例必须是开发者/标准/高级层,消费层出口IP不固定,完全不满足白名单需求。实例部署完成后,公网固定出口IP可以直接在实例「属性」面板查到,把这组IP加到SFTP服务器白名单即可。
APIM原生默认处理HTTP/HTTPS流量,SFTP是基于SSH的非HTTP协议,根据链路规模和传输需求,二选一实现即可:
方案1:TCP透传转发(适配全量SFTP场景,和现有架构兼容性最高)
这个方案不需要改原有Logic App里的SFTP操作逻辑,只需要做一层流量转发,所有流量从APIM固定IP出口,之前配置的访问限制、监控规则可以直接复用:
- 在APIM同VNET下部署自托管网关,绑定已经配置好访问规则、监控规则的APIM实例
- 给自托管网关配置TCP透传策略,不做HTTP协议解析,直接把22端口(SFTP默认端口,自定义端口可替换为对应值)的流量转发到目标SFTP服务器,策略代码可直接参考:
<policies> <inbound> <base /> <set-backend-service base-url="tcp://你的SFTP服务公网地址:22" /> </inbound> <backend> <tcp-forward buffer-request-data="false" buffer-response-data="false" /> </backend> <outbound> <base /> </outbound> </policies>
- 把原来Logic App SFTP连接器里的目标地址,改成APIM自托管网关的TCP监听地址,所有SFTP流量就会全部经过APIM转发,出口IP就是提前加白的固定IP。
- 大文件传输、断点续传、目录挂载这类原生SFTP特性全部支持,没有功能损耗。
方案2:SFTP操作API封装(适合轻量传输场景,不需要额外部署组件)
如果文件传输场景很简单,只有零散的上传、下载、列目录、删除操作,不需要长连接,可以直接用APIM托管能力封装SFTP操作,不用部署自托管网关:
- 进入APIM「后端」管理页,新增SFTP类型后端,填入SFTP地址、端口、认证信息(支持密码、SSH私钥两种认证方式)
- 新建对应API操作,分别绑定SFTP后端的上传、下载、列目录等方法,给每个操作配置好已有的请求校验、限流规则
- 把Logic App里原来直接连SFTP的逻辑,改成调用APIM暴露的对应HTTP接口即可,APIM收到请求后会主动从固定出口IP向SFTP发起对应操作,把结果返回给Logic App。
- 注意这个方案不支持超过100MB的大文件传输,也不支持长连接、断点续传,只适合小文件零散传输的场景。
踩坑提示:如果开了APIM VNET集成,一定要检查APIM所在子网的NSG规则,放通到SFTP服务器22端口的出站流量,不然会连不上。如果SFTP是内网部署的,要确保APIM子网和SFTP所在网络有对等连接或者路由可达。
内容的提问来源于stack exchange,提问作者piku
相关产品推荐
相关产品推荐

