Azure Blob 存储 中的 SFTP 支持 与自托管 SFTP 服务器的区别

Azure Blob 存储 对 SSH 文件传输协议(SFTP)的支持可使存储帐户直接通过 22 端口响应请求,因此你无需在其后端运行服务器,也能使用你的用户已在使用的同一种协议。 如果你今天在虚拟机(VM)上托管SFTP服务器,这意味着没有操作系统需要打补丁,没有容量和体积,也没有复制任务把文件从着陆盘上移开,因为你上传的数据会自动变成blob。

本文比较了自托管SFTP服务器与Azure Blob 存储 SFTP,从成本、性能、运营和安全方面。 它还包括如何在迁移前检查兼容性,以及如何用单一工作负载验证变更。

文件如何到达存储账户

自托管服务器时,传输会经过你拥有和管理的多个组件。 下图展示了典型传输的模式。

示意图显示,SFTP 传输从发起连接的用户开始,经由 22 端口和虚拟机上的 SSH 守护程序,再通过暂存磁盘和复制作业到达 Blob 存储。

文件会到达磁盘,然后你构建的进程会把它移动到需要的地方。 每一环都由你负责:虚拟机、操作系统、SSH 守护进程、磁盘及其保留策略、复制任务,以及围绕这一切的监控。 在复制完成之前,数据存在于两个地方,且都不是记录系统。

而 Azure Blob 存储 SFTP 则是存储账户自行终止协议。 下图展示了这种转移模式。

图示显示用户通过SFTP将文件传输到Azure存储账户的端口22,上传文件直接变成一个blob。

上传的内容就是该二进制大型对象。 没有着陆盘,也没有复制任务,因为没有什么可复制的。 一旦传输完成,文件即可被 Blob REST API、Azure Data Lake Storage、Network File System (NFS) 3.0、Azure 事件网格 以及任何已经指向该账户的处理程序访问。

只有主机名会变。 对于连接和传输数据的用户来说,其他一切都保持不变。 如果你想要,它们使用相同的协议、相同的客户端工具和相同的凭证模型。

如果你的目标是在考虑成本和安全的前提下将文件传输迁移到云端,这种方法是一个实用的起点。 你并不是在采用一种新的传输模式;你是在移除当前已在运行的那套系统所依托的底层基础设施。

Cost

启用 SFTP 会产生按小时计费的费用;只要 SFTP 处于启用状态,无论是否有人连接,都会收费。 其他所有费用按标准账户费率计费,包括静止容量、交易和出口。 所有SFTP命令都会转换为账户上的读、写或其他交易。 通过SFTP传输的数据没有按每GB单独收费。

如果你的转账是在固定窗口内运行,你可以只在需要时启用SFTP,避免中间的费用。

注释

要查找当前的小时费率,请参见 Azure Blob 存储 定价页面。 只有在文件结构下拉列表中选择层级命名空间(NFS v3.0,SFTP 协议)时,该费用才会在该页面显示。

下表说明了根据你今天运行的内容,你可以预期会得到的结果:

您今天运行的内容 Blob 存储 SFTP 很可能会 为什么
单个具有 1 个或 2 个 vCPU 的虚拟机 成本更高 按小时端点收费超过小型虚拟机的计算成本。 如果你的整体规模也就这么大,成本就不是迁移的理由。 不过,运营效率可能是搬迁的理由之一。 您可以在本文的 运营 部分了解更多关于这些效率的信息。
一个为持续吞吐量设计的虚拟机,配备管理磁盘和备份 差不多 端点电荷抵消计算、磁盘和备份。
多个实例以实现高可用性,或使用另一个区域进行灾难恢复 显著减少 你不再为冗余计算和第二个区域付费。
上述任一行,在计入工程时间后 Less 打补丁、密钥轮换和待命值班时间都不会出现在任一账单上。

为了公平比较每个选项,在估算中包含计算成本、操作系统和登陆盘成本以及备份费用。 只有在部署了这些区域时,才添加负载均衡器、公共IP地址或第二个区域,因为许多SFTP服务器作为单一虚拟机运行,没有这些功能。

有两个成本很容易被忽视。 首先,数据通常会在保留窗口期间停留在着陆盘 和 目的地,所以你要为两者付费。 其次,修补、按键轮换和维护复印工作的工程时间根本不会出现在发票上。

用现有资源组的成本 分析 ,而不是用价格计算器,这样你就能从实际收费的基础上分析。 有关当前费率,请参见 Azure Blob 存储 定价和 Azure Blob 存储 的计划与管理成本。

Performance

虚拟机的上限由其自身的SKU决定:网络带宽、磁盘吞吐量以及用于SSH加密的CPU容量。 存储账户的上限是账户的进出和请求速率上限,这些上限明显更高,且你无需额外努力即可达到。

吞吐量会随着并发连接数的增加而提升,并且在单个客户端下,高级块 Blob 帐户的带宽约为标准常规用途 v2 帐户的 2.3 倍。 关于调校指导,请参见 SFTP性能考虑。

Operations

Azure Blob 存储 SFTP 提供了更高的运营效率。

因为存储账户会终止SFTP,虚拟机、着陆盘和复制工作都会消失,维持它们运行的工作也随之消失。 你不再需要打补丁、加固SSH守护进程、规划容量、构建和测试自己的高可用性和灾难恢复,或支持将文件迁移到存储的流水线。

主机密钥管理就是一个例子。 重建虚拟机会改变其 SSH 主机密钥,除非你有意保留该密钥;而客户端工具会将主机密钥的意外变更视为可能的中间人攻击。 因此,日常维护变成了与所有连接者的协调练习。 相比之下,Azure 发布其 SFTP 主机密钥,客户端工具可以根据文档来源验证。 请参见 SFTP的主机密钥。

安全性

自托管的OpenSSH服务器支持密码和公钥认证。 你拥有账户、 sshd 配置、密钥分发和轮换。

Azure Blob 存储 SFTP 支持这两种方法,并增加了 Microsoft Entra ID。 你可以为每个用户选择合适的方法:

方法 工作原理 最适用于
Password Azure 生成密码并显示一次。 你不能设置自定义密码,所以无法使用弱密码或重复使用。 快速入门
SSH 密钥对 你提供或生成一个公钥,每个本地用户最多可获得10个。 自动化、无人值守的传输
Microsoft Entra ID 用户通过 Entra ID 认证,并获得一份有效期为 65 分钟的证书,该证书由 Azure 基于角色的访问控制(RBAC)、Azure 属性访问控制(ABAC)和 POSIX 访问控制列表(ACL)授权。 凡是重视身份治理的场景,均推荐使用

Microsoft Entra ID 是这两种方法之间最显著的区别。 无论是在虚拟机还是存储账户中,任何本地凭证的秘密都具有长效性,并且不受你对遗产其他部分应用的身份控制。

Entra ID 证书在 65 分钟后过期,因此错误的凭证会自行失效。 多因素认证和条件访问对文件传输的适用方式与其他所有内容相同。 当账户被禁用时,SFTP访问会在同一时刻终止。 通过使用 外部身份,你交换文件的组织可以从自己的租户进行认证,因此你不再代表他们发放或存储凭证。

本地用户依然完全支持,所以你可以按自己的节奏采用 Entra ID。

除了身份之外,存储帐户还提供了一些控制功能,否则这些功能就需要你自行构建和维护:

  • 仅接受Microsoft 安全开发生命周期批准的算法,因此不允许基于SHA-1的密钥交换等弱选项ssh-dss。

  • 私有端点将 流量保留在你的虚拟网络上。

  • 静态加密、客户管理密钥、不可篡改策略和诊断日志,对通过SFTP上传的文件适用,与其他blob同样适用。

欲了解更多信息,请参见 SFTP 权限模型和通过 Microsoft Entra ID 授权访问 Blob 存储 over SFTP。

迁移前先检查兼容性

大多数工作负载无需更改即可迁移,Azure Blob 存储 支持多种 SFTP 客户端工具。 要确认你自己的情况,请查看 已知支持的客户端 以及 SFTP的限制和已知问题。

请尽早检查这些项,因为它们是工作负载无法按原样迁移的最常见原因:

  • 访问路径中的现有ACL配置。

  • 一个被其他组织列入允许名单的静态出站 IP 地址。

  • 这是管理文件传输工作流程或AS2的需求。

用一个工作负载试试吧

在非生产存储帐户上启用 SFTP,并让一个低风险馈送与现有服务器并行运行两周。 你从自己的工作负载中获得吞吐量、兼容性和成本数据,这些数据比估算更有用。