企业出海受监管文件交换(MFT)架构实战:托管 SFTP/AS2/EDI 选型、零信任加固与合规举证(2026版)

📅 · 企业出海多云架构实战 - ChengziCloud

一句话结论

Meta Description: 出海企业的对账文件、EDI 报文、银行回单怎么安全交换?

本文要点
  • 一句话结论:MFT 不是"传文件",是一条需要被审计的第三方通道
  • 本文边界:与站内相邻五篇怎么分工
  • 为什么 2023 年之后 MFT 从"运维小事"变成"董事会事项"
  • 协议族选型:SFTP 是默认,AS2 是 EDI 的硬门槛
  • 三条技术路线:商业 MFT、云厂商托管、自建开源
  • 参考架构:三条边界、单向下沉、可用性靠云
  • 多云能力对照:托管能力其实很不均匀
  • 实操一:托管 SFTP 端点从零到可用的 8 条命令

Meta Description: 出海企业的对账文件、EDI 报文、银行回单怎么安全交换?本文给出托管 SFTP/AS2 与自建 MFT 的三路线选型表、参考架构图、AWS Transfer Family 实操命令、12 项加固清单、按协议计费的成本模型与合规举证方法。

关键词: 托管 SFTP、MFT 文件传输、AS2 EDI、多云文件交换、文件传输合规

一句话结论:MFT 不是"传文件",是一条需要被审计的第三方通道

如果伙伴数量在 50 家以内、文件量低于 2 TB/月、协议只需要 SFTP,用云厂商托管端点(AWS Transfer Family 一类)最划算:一台端点月费约 216 美元,省掉的是补丁责任、主机密钥轮换和 HA 建设。一旦出现 AS2/EDI 高频报文(每月十万条以上)或需要伙伴自助门户与审批流,商业 MFT 或自建网关更合适。所有路线的共同底线只有三条:端点必须落在私网、协议必须收敛到最小集合、每一次读写都必须留下可查询的审计证据。

很多团队把 MFT(Managed File Transfer,受管文件传输)当成"装个 SFTP 服务器"的运维小事,直到某天审计问一句"上个月给德国客户的退货明细是谁传的、传了哪些字段、有没有被改过",才发现整条链路只有 auth.log 里一行 Accepted publickey。文件通道的特殊性在于:它是企业与外部伙伴之间唯一长期开放的双向数据入口,既承载最敏感的数据(对账、薪资、医疗、卡数据),又由外部方发起连接,天然处在信任边界上。

本文按"选协议 → 选路线 → 搭架构 → 加固 → 算钱 → 举证"的顺序展开,所有命令均在 AWS 侧实测可用,价格取自官方计价口径(2026 年 10 月核对,36 个区域同价)。

本文边界:与站内相邻五篇怎么分工

站内文章它讲的那一层本文只讲的那一层
《多云网络互通与 Transit 架构》专线/VPN/TGW,链路怎么通通了之后,伙伴的文件怎么进来、怎么被验收
《混合云存储网关》NAS/SMB 与对象存储的协议翻译内部系统之间的搬运,不是外部伙伴的接入
《跨云对象存储与数据湖》桶、生命周期、数据湖分层只把 S3/OSS/COS 当作"落地区",不重复存储选型
《GDPR 跨境传输技术落地》法律机制(SCC)与跨境同步文件通道本身的技术控制与证据链
《多云统一出网与私网访问》出向流量收敛本文讲入向:伙伴连进来

一句话区分:别人讲"数据在路上怎么走",本文讲"谁把文件放进来、放进来之后凭什么相信它、出了事怎么自证"。

为什么 2023 年之后 MFT 从"运维小事"变成"董事会事项"

2023 年是文件传输产品被集中攻击的一年。MOVEit Transfer 的漏洞(CVE-2023-34362)被 Cl0p 团伙做成批量利用工具,数千家使用该产品的机构在几周内被拖走数据,受害者里包括大量政府机构、银行和大学——他们并不是安全投入不足,而是共用同一款边缘软件,且这款软件直接暴露在公网、直接持有敏感文件。同年 GoAnywhere MFT 也出现被利用的漏洞(CVE-2023-0669)。这两起事件给出了同一个结构性结论:MFT 是"高价值数据 + 公网暴露 + 老旧代码"的三重叠加,它的风险不是来自某一次配置失误,而是产品形态本身。

把失败模式拆开看,企业踩的坑集中在这三类:

失败模式典型症状根因代价控制点
边缘产品漏洞被批量利用一夜间大量文件被压缩打包外传公网直挂 + 单点软件缺陷 + 补丁窗口以月计数据外泄通报、监管罚款、客户流失端点入私网、WAF/IPS 前置、补丁 SLA 写进合同
长期密钥与明文协议遗留伙伴方脚本里还是 2013 年的 FTP 账号兼容性优先,没人敢动老伙伴凭据泄露后无法定位影响面每伙伴独立账号、强制密钥、协议黑白名单
影子通道业务用网盘、邮件、微信传对账文件正式通道太慢、申请流程太长数据出境无记录,审计直接判不合格伙伴自助门户 + 审批流 + 通道唯一化

托管化的真正价值不是省运维,而是把"补丁责任、可用性责任、日志责任"写进 SLA 合同。 当你把端点换成云厂商的托管服务,MOVEit 式的"我来打补丁"就变成了"厂商打补丁、我核对版本",这在合规问答里是两种完全不同的答案。但代价是:你必须接受它的计费形状(按协议、按小时)和它的能力边界(例如中国区没有该服务)。这两点后文都会算清楚。

协议族选型:SFTP 是默认,AS2 是 EDI 的硬门槛

选协议不是技术偏好问题,而是伙伴的接入要求决定的。北美大型零售商(如 Walmart)的 EDI 接入普遍要求 AS2,欧洲汽车行业常见 OFTP2,银行与物流多数接受 SFTP,只有少数遗留伙伴还抱着 FTPS。

协议默认端口典型伙伴传输加密认证方式主要坑建议
SFTP(SSH2)22银行、物流、多数 SaaSSSH 通道加密,可叠加 PGPSSH 公钥对象存储后端不支持 chmod/rename 覆盖默认首选
FTPS(显式)21 / 990部分欧洲老伙伴TLS用户名密码 + 证书数据通道端口随机,防火墙极难放行仅作兼容
FTP(明文)212010 年代的遗留脚本无明文任何合规框架都直接否决一律禁用
AS2443北美零售 EDIS/MIME 签名 + 加密双方证书交换证书过期即全量失败;MDN 同步/异步差异EDI 必选
HTTPS / REST443现代 SaaS、开放平台TLS + OAuthToken大文件需断点续传新伙伴优先
OFTP2443欧洲汽车供应链TLS + 签名证书国内运维几乎无人熟悉欧洲车企专用

EDI 场景再补一层常识,方便与业务方对齐:850 是采购订单,855 是订单确认,856 是发货通知(ASN),810 是发票,997 是功能性确认。它们的共同特点是报文小而频率高,而这个特征会直接击穿按条计费的托管方案——后文成本章节会算这笔账。

三条选型纪律:

  1. 协议数量最小化。 每多开一个协议端点就多一份攻击面和一份月费,能用 SFTP 解决的绝不开 FTPS。
  2. 新旧伙伴分治。 新伙伴一律 SFTP(密钥 + 源 IP 白名单),老伙伴在"最后期限 + 迁移支持"的双重约束下改造,不要为了兼容把 FTP 重新打开。
  3. AS2 单独规划证书生命周期。 AS2 的失败几乎全部来自证书过期或信任链变更,而不是网络问题。

三条技术路线:商业 MFT、云厂商托管、自建开源

MFT 市场上有三类完全不同的东西,很多选型会死在"拿 A 的价格比 B 的能力"上。

维度商业 MFT(MOVEit / GoAnywhere / Cleo 一类)云厂商托管(AWS Transfer Family 一类)自建开源(OpenSSH + SFTPGo + OpenAS2)
初始投入许可费 + 实施费,通常五位数美元起近乎为零,开通即用服务器费 + 集成工时
边际成本按用户/按伙伴,扩容要再谈许可按协议 × 小时 + 按 GB + 按消息只增机器与带宽
协议覆盖全协议(SFTP/FTPS/AS2/OFTP2/HTTPS)SFTP/FTPS/FTP/AS2(分产品,按协议计费)取决于你拼装多少组件
伙伴自助门户内建,可做审批、过期、下载回执需自研(或用其 Web App 单元)需自研
加密与密钥内建 PGP、证书库、密钥托管PGP 工作流步骤 + KMS/Secrets Manager自己接 GPG/KMS
高可用集群部署,成本高多 AZ 免费,SLA 由云承担需自己做双机/负载均衡
补丁责任自己(这是 2023 年事故的根因)云厂商自己,且组件越多越重
审计举证内建报表,审计员熟悉CloudTrail 数据事件 + 结构化日志自己拼日志,最容易断链
团队要求需要专职 MFT 管理员一个懂 IAM 的云工程师需要运维 + 开发
迁移成本高(数据与配置都在产品里)中(退出时凭 S3 里的原始文件)低(都是标准协议)

三条结论,按企业规模对号入座:

  • 伙伴 ≤ 50 家、协议 ≤ 2 种、无 EDI:选云厂商托管。你的真实成本是"每月 216 美元起 + 一个工程师每周两小时"。
  • 有 EDI(AS2)、伙伴 ≥ 100 家、需要伙伴自助门户与审批:选商业 MFT。此时你买的是工作流、门户和审计报表,不是传输能力。
  • 文件量极大(TB/月级)、协议老旧但无法拒绝、预算极紧:自建 + 统一网关。但要接受一个前提——你必须有人能对 sshd_config、证书和日志负责。

参考架构:三条边界、单向下沉、可用性靠云

先给全景。整个链路的要害不是"文件能不能传进来",而是传进来之后它在哪个区、以什么身份被谁读走。所以架构上强制切三段:


graph TD
    A[外部伙伴 SFTP/AS2 客户端] -->|公网 443/22| B[托管端点 私网 ENI + 安全组]
    B --> C[落地区 对象存储 开启版本与对象锁]
    C --> D[工作流 PGP 解密 恶意文件扫描]
    D --> E[分发区 内部系统 只读挂载]
    D --> F[审计 CloudTrail 数据事件 结构化日志]
    F --> G[SIEM 告警 与 Athena 取证]
    H[Secrets Manager 主机密钥/伙伴密钥] --> B
    I[KMS CMK 静态加密] --> C

对应的物理视图(ASCII 全景图):


┌──────────────┐        ┌──────────────────────────────────────────────┐
│  外部伙伴     │        │           云上 VPC 10.20.0.0/16                │
│  bank-sftp   │  TLS   │  ┌────────────┐   ┌─────────────────────┐    │
│  retail-as2  │───────▶│  │ 托管端点    │──▶│ 落地区 S3 桶         │    │
│  logistics   │  443   │  │ 私网 ENI    │   │ /inbound/<partner>/ │    │
└──────────────┘        │  │ SG 白名单   │   │ 版本 + 对象锁 + KMS  │    │
                        │  └─────┬──────┘   └──────────┬──────────┘    │
                        │        │                     │               │
                        │   ┌────▼─────────────────────▼──────────┐    │
                        │   │ 工作流  解密 → 扫描 → 校验 → 重命名  │    │
                        │   └────┬─────────────────────┬──────────┘    │
                        │        │                     │               │
                        │  ┌─────▼──────┐        ┌─────▼──────────┐    │
                        │  │ 分发区      │        │ 审计桶          │    │
                        │  │ EFS/内网API │        │ CloudTrail 事件 │    │
                        │  └────────────┘        └────────────────┘    │
                        └──────────────────────────────────────────────┘

四条设计原则,每一条都对应一次真实事故:

  1. 端点只认私网。 托管服务的"公网端点"类型往往不允许挂安全组,意味着你无法做源 IP 白名单;要白名单就必须选 VPC 端点类型(挂 ENI + 安全组),前面再放 WAF/NLB。
  2. 落地区只写不读。 伙伴账号的角色只允许 PutObject 到自己前缀,禁止 GetObject、禁止 ListBucket。伙伴永远看不到别人的文件,也看不到自己的历史文件(防止被当作数据中继)。
  3. 解密后另写一份对象。 不要原地覆盖密文,也不要让下游直接读密文前缀。工作流把解密结果写到 /decrypted/,附上原始对象的 key 与校验和——这是事后证明"这份明文确实来自那份密文"的唯一办法。
  4. 落地区与业务区之间的搬运只走单向。 内部系统从分发区读,绝不回写落地区;需要回传给伙伴的文件走独立的 /outbound/ 前缀和独立角色。方向分离是防止勒索软件从伙伴侧横向进入业务网的最低成本手段。

多云能力对照:托管能力其实很不均匀

做多云的企业最容易被"某云有、另一云没有"打乱架构。下表只列机制与能力有无,不列各家的实时报价(不同账号折扣差异过大,任何具体数字都可能是编的)。

能力AWS阿里云腾讯云商业 MFT
托管 SFTP 端点Transfer Family,36 个区域无对位的托管 SFTP 产品,通行做法是 ECS 自建(OSS/NAS 落地)无对位的托管 SFTP 产品,通行做法是 CVM 自建(COS/CFS 落地)有
托管 AS2(EDI)有,按消息计费需自建(OpenAS2 等)需自建有
伙伴自助 Web 门户有 Web App 形态(按会话单元计费)需自研需自研有,且含审批
对象存储落地S3OSSCOS各自接
对象锁 / WORMS3 Object LockOSS 保留策略COS 版本控制 + 保留策略部分支持
审计数据事件CloudTrail S3 数据事件ActionTrail + OSS 访问日志CloudAudit + COS 日志内建报表
私网端点VPC Endpoint 类型(可挂 SG)需自建 + SLB需自建 + CLB自建
中国内地可用不可用(无 cn-* 区域)可用可用可用

两个必须提前知道的限制:

  • Transfer Family 在 cn-* 区域不存在。 面向中国内地伙伴的接入必须落在新加坡、香港或东京,再从那里用专线/CEN 回内地——这就不再是"传文件",而是一次跨境传输,合规链条要同步拉长。
  • "公有云没有托管 SFTP"不等于不能用。 阿里云/腾讯云的做法是 ECS/CVM 上跑 SFTPGo 或 OpenSSH,落地到 OSS/COS。能力上完全够用,代价是补丁、双机、审计这三件事回到你自己身上。

实操一:托管 SFTP 端点从零到可用的 8 条命令

以下命令按执行顺序排列,全部为 AWS CLI v2。先确认当前支持的安全策略清单,不要凭记忆写死策略名(厂商会新增,旧名可能被标记为不推荐):


// 第 0 步:先看当前可用的传输安全策略,取最新一条填到后续命令
aws transfer list-security-policies --query "SecurityPolicyNames" --output text

第 1 步,创建 VPC 端点(不是公网端点)。 只有 VPC 端点才能挂安全组做源 IP 白名单:


aws transfer create-server \
  --protocols SFTP \
  --endpoint-type VPC \
  --endpoint-details SubnetIds=subnet-0123456789abcdef0,VpcId=vpc-0123456789abcdef0,AddressAllocationIds=eipalloc-0123456789abcdef0 \
  --identity-provider-type SERVICE_MANAGED \
  --logging-role arn:aws:iam::111122223333:role/transfer-logging \
  --security-policy-protocols SFTP=TransferSecurityPolicy-2024-01 \
  --tags Key=env,Value=prod Key=owner,Value=integration-team

--endpoint-details 里必须显式给 SubnetIds 和 VpcId,想固定出口 IP 再给 AddressAllocationIds(伙伴侧要加白名单时就需要)。多 AZ 最多三个子网,不额外收费。

第 2 步,创建伙伴用户并绑定公钥。 注意:create-user 只在 SERVICE_MANAGED 身份源下可用;如果用 Lambda/API Gateway/AD 做身份源,用户由那边托管:


aws transfer create-user \
  --server-id s-0123456789abcdef0 \
  --user-name partner-acme-sftp \
  --role arn:aws:iam::111122223333:role/transfer-partner-acme \
  --home-directory /acme-bucket/inbound/acme \
  --home-directory-type PATH \
  --ssh-public-key-body file://acme_id_ed25519.pub

每个伙伴一个用户、一把密钥,绝不共用。密钥丢失时只删这一个用户,影响面可控。

第 3 步,给端点绑自定义域名。 伙伴的防火墙白名单通常只放行域名,不放行 *.transfer.amazonaws.com。这一步是纯打标签 + 建 CNAME:


aws transfer tag-resource \
  --arn arn:aws:transfer:ap-southeast-1:111122223333:server/s-0123456789abcdef0 \
  --tags Key=transfer:customHostname,Value=sftp.acme-gateway.example.com \
         Key=transfer:route53HostedZoneId,Value=Z0123456789ABCDEFGHIJ

打标签后,端点会给出一个规范域名(形如 s-xxxx.server.transfer.<region>.amazonaws.com),在 Route53 里建 CNAME 指过去即可。用 CLI/CDK 创建的端点是公共端点时,没有这个标签就永远看不到自定义域名——这是最常见的"控制台能设、代码设不了"的困惑来源。

第 4 步,修掉 S3 后端最常见的客户端报错。 S3 不支持 chmod/chown/chgrp,也不支持 rename 覆盖已有对象;很多图形客户端(WinSCP、FileZilla)上传后会尝试 SETSTAT,于是出现"文件传上去了但客户端报错":


aws transfer update-server \
  --server-id s-0123456789abcdef0 \
  --protocol-details SetStatOption=ENABLE_NO_OP

设成 ENABLE_NO_OP 后,SETSTAT 请求被静默接受而不执行,客户端不再报错。如果需要真正的 POSIX 语义(权限、重命名覆盖),后端要换成 EFS 而不是 S3。

第 5 步,打开结构化日志。 结构化日志是 JSON 行,含 session_id、username、bytes_transferred、command,比传统日志好用得多——审计要查"谁在几点传了多大文件",直接查这个字段,不用正则解析:


aws transfer update-server \
  --server-id s-0123456789abcdef0 \
  --structured-log-destinations arn:aws:logs:ap-southeast-1:111122223333:log-group:/aws/transfer/s-0123456789abcdef0

第 6 步,打开对象级审计(这一步最容易被漏掉)。 CloudTrail 默认只记管理事件,不记 S3 的对象读写。没有数据事件,"谁下载了哪份对账文件"这个问题永远答不出来:


aws cloudtrail put-event-selectors \
  --trail-name org-trail \
  --advanced-event-selectors '[{"Name":"S3Objects","FieldSelectors":[{"Field":"eventCategory","Equals":["Data"]},{"Field":"resources.type","Equals":["AWS::S3::Object"]},{"Field":"resources.ARN","StartsWith":["arn:aws:s3:::acme-bucket/inbound/"]}]}]'

按前缀过滤是控制成本的关键:整桶数据事件的费用会随文件数线性上升,只勾 inbound/ 和 outbound/ 两个前缀通常能省掉一个数量级。

第 7 步,用最小权限角色收口。 伙伴角色只给三件事:写自己前缀、读自己前缀(如果允许回读)、列自己前缀:


aws iam put-role-policy --role-name transfer-partner-acme --policy-name acme-inbound-only --policy-document '{
  "Version":"2012-10-17",
  "Statement":[
    {"Effect":"Allow","Action":["s3:PutObject"],"Resource":"arn:aws:s3:::acme-bucket/inbound/acme/*"},
    {"Effect":"Allow","Action":["s3:ListBucket"],"Resource":"arn:aws:s3:::acme-bucket","Condition":{"StringLike":{"s3:prefix":["inbound/acme/*"]}}}
  ]}'

注意不要给 s3:GetObject,也要不要给 s3:DeleteObject——伙伴误删或恶意删除会直接破坏对账证据链,清理交给生命周期规则。

第 8 步,用伙伴的视角做一次验收。 不要用自己的管理机测,用一台干净主机模拟伙伴侧:


// -P 指定端口;批处理模式下可 -b 指定命令文件做自动化验收
sftp -P 22 -i ./acme_id_ed25519 -o StrictHostKeyChecking=accept-new \
  [email protected] <<< "put ./test-2026-10-31.csv"

验收看三件事:文件落在预期前缀、structured log 里有对应 session_id、CloudTrail 数据事件里出现 PutObject。三者都对,才算这条通道"可用且可举证"。

实操二:PGP 解密、恶意文件扫描与路由的托管工作流

企业最常被审计追问的一点是"文件在落地区是密文还是明文"。答案是:落地区必须是密文,解密在托管的受控步骤里做。托管工作流可以直接声明解密步骤,不需要自建一台解密机:


{
  "Steps": [
    { "Type": "Decrypt", "DecryptStepDetails": {
        "Type": "PGP", "Name": "decrypt-partner-pgp",
        "SourceFileLocation": "${original.file}",
        "OverwriteExisting": "FALSE",
        "DestinationFileLocation": { "S3FileLocation": { "Bucket": "acme-bucket", "Key": "decrypted/${original.file}" } }
    }},
    { "Type": "Tag", "TagStepDetails": { "Name": "tag-partner", "Tags": [
        { "Key": "partner", "Value": "acme" },
        { "Key": "stage", "Value": "decrypted" }
    ], "SourceFileLocation": "${original.file}" }},
    { "Type": "Custom", "CustomStepDetails": {
        "Name": "notify-integration", "Target": "arn:aws:lambda:ap-southeast-1:111122223333:function:mft-notify",
        "TimeoutSeconds": 60, "SourceFileLocation": "${original.file}"
    }}
  ]
}

三个工程要点:

  • 解密步骤支持 PGP,按解密后的字节数计费(每 GB 0.10 美元,单文件最小按 1 MB 计)。这个价格在文件量小时可以忽略,在 TB 级时是成本表里第二大的项。
  • 解密失败必须能告警。 工作流的 OnExceptionSteps 里挂一个 Tag + SNS 通知,否则伙伴用了错误密钥加密时,文件会永远躺在落地区没人发现。
  • 恶意文件扫描放在解密之后、分发之前。 密文扫不出任何东西,扫描必须在明文副本上做;扫描结论(通过/隔离)要作为对象标签写回,下游只读 av=clean 的对象。

如果不想自己维护杀毒引擎,可以用云厂商的对象存储恶意文件防护(如 GuardDuty 的 S3 恶意文件防护),它在对象写入时异步扫描并打标签,正好接在上面的 Tag 步骤之后。

文件名幂等是最后一道保险。 伙伴重复上传同一份对账文件是常态,落地区按 partner/yyyy/mm/dd/文件名 分区,配合"同名对象写新版本"(开版本控制)而不是覆盖,才能既保留历史又让下游只处理最新版本。

安全加固 12 项清单(每项都给验证方法)

这份清单按"攻击者从外部往里走"的顺序排列,前六项决定"能不能进来",后六项决定"进来之后能干什么、留下什么"。

#加固项风险做法验证方法
1端点入私网公网端点无法挂安全组,等于全网可连选 VPC 端点类型,挂 ENI + 安全组describe-server 看 EndpointType=VPC
2协议收敛明文 FTP 泄露凭据与内容只开 SFTP;AS2 单独端点describe-server 的 Protocols 只有 SFTP
3每伙伴独立账号共用账号导致影响面不可控一伙伴一用户一密钥list-users 数量 = 伙伴数
4禁密码认证弱口令爆破只用公钥;自定义身份源也不开 password用错误密码尝试应被拒
5源 IP 白名单密钥泄露后全球可连安全组按伙伴出口 IP 放行 + WAF从非白名单 IP 连接应超时
6主机密钥托管与轮换主机密钥固定,中间人风险密钥存 Secrets Manager,配多把做无中断轮换describe-server 看 HostKeyFingerprint 变化
7IAM 最小权限伙伴横向读取他人文件只给自身前缀的 PutObject/ListBucketiam simulate-principal-policy 验证越权被拒
8落地区对象锁文件被删或被改写,证据链断裂开版本控制 + 合规模式对象锁尝试删除已锁对象应失败
9静态加密存储介质泄露SSE-KMS,按环境分 CMK对象 ServerSideEncryption=aws:kms
10恶意文件扫描伙伴侧被感染,恶意文件进入内网解密后扫描并打 av=clean 标签上传 EICAR 测试文件应被隔离
11审计留存答不出"谁在何时传了什么"CloudTrail 数据事件 + 结构化日志,留存 ≥ 6 个月Athena 能查出指定文件的 PutObject 记录
12证书与密钥到期监控AS2 证书过期导致全量交换失败到期前 30/7/1 天三级告警告警规则里能看到证书到期指标

五条容易被忽略但代价最高的补充:

  • AS2 的证书必须双份在线。 轮换时同时上传新旧两张证书,等伙伴都切完再摘旧的,否则切换当天所有报文验签失败。
  • 禁止伙伴回读历史文件。 很多"数据中继"事故是伙伴账号被攻破后,攻击者用合法凭据把历史文件全下载走。
  • 文件大小上限要显式设置。 单对象 5 TB 是服务上限,不是你的业务上限;业务上限应设在 2 GB 一类,超过走人工。
  • 速率限制与并发会话上限。 一个伙伴的脚本死循环能把端点打满,多 AZ 也救不了带宽。
  • 新增伙伴必须双人审批。 建用户、发密钥、加白名单三个动作分开授权,避免一个人就能开一条对外通道。

成本模型:按协议计费的形状决定了你的架构

托管 MFT 的计费不是"按机器",而是按协议 × 小时 + 按流量 + 按消息。这个形状会直接扭曲架构决策,所以必须先把账算清。

计费项单价(美元)换算成直觉
SFTP / FTPS / FTP / AS2 端点0.30 / 小时 / 每个协议216 / 月 / 协议,2,592 / 年
上传0.04 / GB1 TB 上传 = 40
下载0.04 / GB1 TB 下载 = 40,往返 1 TB = 80
PGP 解密步骤0.10 / GB按解密后字节计,单文件最小 1 MB
AS2 消息0.01 / 条(前 10 万 / 月),之后 0.005 / 条10 万条 = 1,000 / 月
SFTP 连接器(主动拉取)0.001 / 次 + 0.40 / GB从伙伴侧主动拉文件时用
伙伴 Web 门户0.50 / 小时 / 单元1 单元 = 250 个唯一会话 / 5 分钟
多 AZ 部署免费(最多 3 个 AZ)高可用不额外收费

这套价格在 36 个区域完全一致(含 GovCloud),所以"哪个区域便宜"在这里是个伪问题——选区域只看伙伴延迟与合规,不看价差。

三个真实场景的月账单(不含存储与出口流量):

场景协议月流量报文量计算过程月成本
A 单伙伴对账文件SFTP上传 100 GB无216 + 100×0.04 + 100×0.10230
B 零售 EDI 接入SFTP + AS2上传 500 GB / 下载 100 GB5 万条432 + 20 + 4 + 50 + 5001,006
C 多伙伴 + 高频 EDISFTP + FTPS + AS2上传 400 GB20 万条648 + 16 + 40 + 1,5002,204

看懂这张表,三个结论会自己浮出来:

  1. 闲置端点也在烧钱。 一个测试用的 SFTP 端点,即使一个月零流量,也是 216 美元。测试完立刻 delete-server,这是最容易拿回来的一笔钱。
  2. AS2 是成本放大器。 场景 C 里,报文费 1,500 美元占了总成本的 68%,而文件本身只有 400 GB。当 AS2 报文量超过每月 10 万条时,按条计费必然不划算,此时要么自建 OpenAS2,要么走商业 MFT 的包年许可——这是本文最重要的一条成本结论。
  3. 多 AZ 免费,别自己造 HA。 自建双机要负载均衡、共享存储、会话同步,这些工时远超托管端点的月费。

再给一张自建 vs 托管的年度总成本对照,把"人力"显式计入(这是最常被漏掉的项):

项目自建(ECS/CVM + SFTPGo)云托管(Transfer Family)
计算资源2 台 × 30–45 / 月 ≈ 720–1,080 / 年含在端点费内
端点/协议费0216 × 12 = 2,592 / 年
存储与备份100–300 / 年100–300 / 年
补丁、HA、证书运维人力约 0.15 FTE ≈ 14,400 / 年约 0.02 FTE ≈ 1,900 / 年
审计报表开发一次性 20–40 人时基本为零(日志现成)
年度合计约 15,300–15,800约 4,600–4,800

结论很清楚:在伙伴数量中等、协议不超过两种的情况下,托管方案的年度总成本约为自建的三分之一,差额几乎全部来自人力。反过来说,如果企业已有 7×24 运维团队、自建平台还能被多个系统摊薄(例如同时承载内部批量传输),自建的边际成本会显著下降——这时"自建"不是省钱的错,而是没算清账的错。

合规举证:把"我们加密了"变成"这是证据"

审计现场最无效的回答是"我们用了加密传输"。有效回答必须能当场打开一个查询,给出时间、主体、对象、动作、结果五要素。下表把常见框架的条款映射到可采集的证据。

框架关键要求需要的证据采集方式
PCI DSS 4.0 · 4.2.1持卡人数据经开放网络传输时使用强加密协议版本、密码套件、证书指纹端点 SecurityPolicy 配置快照 + 季度扫描报告
PCI DSS 4.0 · 3.5.1静态存储的 PAN 不可读加密算法、密钥归属对象 ServerSideEncryption=aws:kms + CMK 策略
PCI DSS 4.0 · 8.4.2进入 CDE 的所有访问启用 MFA认证方式配置身份源配置(禁用密码 + 密钥/证书)
PCI DSS 4.0 · 10.2记录对持卡人数据的访问逐对象读写日志CloudTrail S3 数据事件(按前缀过滤)
HIPAA · 164.312(e)(1)传输过程中的完整性控制传输校验、失败重传记录工作流执行记录 + 对象 ETag/校验和
HIPAA · 164.312(b)审计控制主体与动作的关联结构化日志的 username + session_id
等保三级 · 通信传输通信过程完整性与保密性国密/TLS 配置、链路加密端点策略 + 专线加密配置
等保三级 · 安全审计审计记录留存不少于 6 个月日志保留策略与检索能力日志组保留期 + Athena 查询演示
GDPR · Art.32适当的技术措施保障安全加密、访问控制、可恢复性上述证据 + 恢复演练记录
GDPR · 第五章跨境传输的合法机制SCC 签署件与传输清单SCC 存档 + 文件流转台账
SOC 2 · CC6.1 / CC7.2逻辑访问控制与监控权限矩阵 + 异常告警记录IAM 策略快照 + SIEM 告警样例

有了数据事件,"谁在什么时候把哪份文件传上来"就是一条 SQL 的事:


SELECT eventtime,
       useridentity.arn                AS actor,
       element_at(requestparameters, 'bucketName')  AS bucket,
       element_at(requestparameters, 'key')         AS object_key,
       element_at(requestparameters, 'bytesTransferredIn') AS bytes_in,
       sourceipaddress
FROM cloudtrail_logs
WHERE eventsource = 's3.amazonaws.com'
  AND eventname IN ('PutObject', 'GetObject')
  AND element_at(requestparameters, 'key') LIKE 'inbound/acme/%'
  AND eventtime BETWEEN '2026-10-01' AND '2026-10-31'
ORDER BY eventtime DESC
LIMIT 100;

三份可以直接抄进审计说明书的表述:

  1. 传输控制:外部伙伴仅可通过 VPC 内网端点接入,协议限定为 SFTP(SSH2)与 AS2,明文 FTP 未启用;源地址受安全组白名单约束;主机密钥与伙伴密钥由密钥管理服务托管并按 90 天周期轮换。
  2. 数据保护:落地区对象以 KMS 客户托管密钥静态加密,开启版本控制与合规模式对象锁,保留期 X 年;明文仅在受控工作流内生成,且留存原始密文的键与校验和以供追溯。
  3. 可审计性:所有对象级读写经 CloudTrail 数据事件记录,保留 ≥ 6 个月并可经 Athena 检索;会话级操作记录于结构化日志,字段包含主体、会话标识、传输字节数与执行命令。

这三段话的价值在于"可验证":审计员随手挑一条要求现场演示,你都能在一个查询里给出结果。

90 天落地路线:先收口,再迁移,最后建门户

阶段时间关键动作交付物验收口径
一 · 摸底与试点第 1–3 周盘点全部对外文件通道(含网盘、邮件、微信);选 1 个伙伴试点通道清单、数据分类分级、试点架构图能画出全部伙伴接入路径,无遗漏通道
二 · 迁移与加固第 4–6 周端点入私网、协议收敛、12 项加固落地加固核验表、端点与角色配置代码非白名单 IP 连不上;越权读取被拒
三 · 审计与演练第 7–9 周数据事件接入 SIEM、证书到期告警、解密失败演练举证包、告警规则、演练报告抽查任一文件能给出完整读写链
四 · 门户与多云第 10–13 周伙伴自助申请、审批流、第二云接入门户、审批流、多云接入文档新伙伴开通从 5 天降到 1 天以内

三条实践提醒:

  • 第一阶段的产出是"通道清单",不是架构图。 现实里最危险的不是自建 SFTP,而是业务私自开的网盘共享链接。
  • 不要一次性迁移所有伙伴。 按"文件量 × 伙伴配合度"排序,先做配合度高的小伙伴,把流程跑顺再碰大伙伴。
  • 演练必须包含"解密失败"和"证书过期"两个故障。 这两个是 MFT 最常见的线上事故,演练能提前暴露告警缺口。

总结

受监管文件交换的架构决策,本质上是在三个变量之间取舍:伙伴的协议要求、文件与报文的规模、以及你愿意承担多少运维与举证责任。 SFTP 为主、伙伴中等规模的企业,托管端点几乎总是正确答案;有 EDI 且报文高频的企业,商业 MFT 或自建 AS2 更现实;而无论选哪条路,端点入私网、协议收敛、逐对象审计这三件事都不能省——它们不是"最佳实践",是审计现场的入场券。

🚀 企业出海需要云架构咨询?通过 7.chengzicloud.cloud 联系我们,获取专属方案。我们提供多云网络与文件交换通道设计、合规举证包整理、以及从自建 MFT 到托管端点的平滑迁移服务。

相关阅读

本文由 7.chengzicloud.cloud 提供,点击访问首页了解更多

常见问题(FAQ)

托管 SFTP 和自建 SFTP 到底差在哪?

差的不是传输能力,而是三件事的归属:补丁、可用性、审计。托管方案里,操作系统和传输软件的漏洞由厂商修,多可用区由厂商保证,日志天然落到云厂商的审计服务;自建方案里这三件事全在你身上。价格上托管贵得多(单协议 216 美元/月),但把人力算进去,伙伴规模中等的企业用托管通常更便宜。

为什么文件上传成功了,客户端却报错?

十有八九是客户端在上传后发了 SETSTAT(改权限、改时间戳),而 S3 后端不支持 chmod、chown、chgrp、chmtime,也支持不了 rename 覆盖同名对象。把端点的 SetStatOption 设为 ENABLE_NO_OP 即可让客户端不再报错。如果业务真的依赖 POSIX 语义,后端要换成 EFS。

我们是多云架构,可以用一家云的托管端点接所有伙伴吗?

可以,而且这是常见做法:端点放一家云,落地区也放同一家云,再通过跨云专线或对象存储同步把文件送到另一家云的业务系统。但要注意两点——网络出口流量会计费;跨云复制会让"数据驻留"变复杂,如果伙伴来自欧盟,复制到第二朵云等于第二次跨境,需要重新评估合规。

AS2 证书过期会有什么后果?

全量失败,而且往往是静默失败。 证书过期后,对方的签名验证不过、MDN 回执拿不到,报文被拒;如果监控只盯"传输成功数",会看到数字突然归零而不知道原因。务必在证书到期前 30/7/1 天做三级告警,并采用"新旧双证书并行"的轮换方式。

一个账号能建多少端点,成本怎么控?

默认每账号 50 个端点(可申请提升),每端点最多 1 万用户、每用户 50 把 SSH 密钥、单端点 1 万并发会话。成本控制抓四点:删掉测试端点、只开真正需要的协议、AS2 报文量超过 10 万/月时重新评估路线、CloudTrail 数据事件按前缀过滤而不是整桶开启。

已经用 PGP 加密了,还需要存储加密吗?

需要,两者解决不同问题。PGP 保护的是"文件在传输途中和落地区被读取"这一层,密钥在伙伴手里;存储加密保护的是"介质、快照、备份被物理或越权访问"这一层,密钥在你手里。合规框架通常分别要求传输加密与静态加密,缺一项就是一条不符合项。

等保三级或 GDPR 还需要额外做什么?

等保三级除了加密传输,还要求审计记录留存不少于 6 个月、通信双方身份鉴别、数据完整性校验,这三项分别对应日志保留期配置、密钥认证、传输校验和记录。GDPR 维度则要先解决"是否跨境":把端点放在新加坡接欧盟伙伴的文件,本身就是一次传输,需要 SCC 或充分性认定支撑,并提供传输清单。

文件量多大就该考虑自建?

没有绝对的阈值,但可以用两个信号判断:一是每月 AS2 报文超过 10 万条(按条计费开始压倒许可费);二是月流量超过 5 TB 且 PGP 解密成为账单主项。此时自建的边际成本(机器 + 带宽)会低于托管的线性计费,前提是你已经有能承接补丁与双机运维的团队。