亚马逊AWS官方博客
AWS BYOIP实战:企业公网IP上云迁移方案
AWS VPC 内资源对公网 IP 地址的需求
在AWS云环境中,VPC内的资源(主要是EC2实例)对公网IP地址有着多样化的需求场景。首先,这些资源需要访问AWS的公共服务,如Amazon S3、DynamoDB等,这些服务虽然位于AWS网络内,但需要通过公网端点进行访问。其次,EC2实例需要访问互联网以获取软件更新、与第三方API通信等。更重要的是,在大多数生产环境中,位于互联网的最终用户需要主动访问这些云上资源,例如访问Web应用、API服务、游戏或其他面向公众的服务。根据子网类型的不同,实现公网连接的方式也有所差异,主要分为公有子网(Public Subnet)和私有子网(Private Subnet)两种场景。
![]() |
公有子网场景
公有子网是指路由表中包含指向互联网网关(Internet Gateway, IGW)的默认路由(0.0.0.0/0)的子网。在这种场景下,EC2实例可以直接分配公网IP地址或弹性IP地址(Elastic IP, EIP)。当实例需要访问互联网或AWS公共服务时,流量会通过IGW进行1:1的NAT转换,将实例的私有IP地址映射到其公网IP地址。对于入站流量,互联网用户可以直接通过公网IP地址访问实例,IGW会自动将目标公网IP地址转换为实例的私有IP地址。这种架构简单直接,适合需要直接暴露在互联网上的服务,如Web服务器、堡垒机等。使用BYOIP功能后,企业可以将自己的公网IP地址段带入AWS,并将其中的地址作为EIP分配给公有子网中的实例,从而在迁移过程中保持IP地址的连续性,避免DNS更新和白名单重新配置的复杂性。
私有子网场景
私有子网是指路由表中不包含指向IGW的默认路由的子网,其中的实例在默认情况下无法直接访问互联网。在这种场景下,EC2实例通常只分配私有IP地址,不拥有公网IP地址。当私有子网中的实例需要访问互联网或AWS公共服务时,需要通过NAT网关(NAT Gateway)或NAT实例作为中介。NAT网关部署在公有子网中,拥有自己的弹性IP地址,私有子网的路由表会将互联网流量(0.0.0.0/0)指向NAT网关。出站流量经过NAT网关时,源IP地址会被转换为NAT网关的EIP,从而实现私有实例的互联网访问。但需要注意的是,NAT网关只支持出站连接,互联网用户无法主动发起到私有子网实例的连接。对于需要接受入站连接的私有子网资源,通常会在公有子网中部署应用负载均衡器(ALB)或网络负载均衡器(NLB),由负载均衡器使用公网IP地址接收流量,然后将请求转发到私有子网中的后端实例。在BYOIP场景下,企业可以将自有公网IP地址分配给NAT网关或负载均衡器,确保出站流量的源IP地址或入站服务的访问地址保持不变,这对于需要IP白名单、合规性要求或IP信誉管理的企业尤为重要。
字节跳动的BYOIP上云之路
背景
字节跳动(ByteDance)是一家领先的互联网科技公司,成立于2012年,总部位于北京。公司旗下拥有抖音、TikTok、今日头条、西瓜视频、飞书、Lark等多款现象级产品,业务遍布全球多个国家和地区。
在字节跳动的全球化业务扩展和上云迁移过程中,保持公网IP地址的连续性成为了一项关键需求。首先,在白名单管理场景下,字节跳动与全球数百家合作伙伴、第三方服务提供商以及企业客户建立了基于IP地址的访问控制策略,这些白名单配置分布在合作伙伴的防火墙、API网关和安全策略中,如果在迁移到AWS时更换IP地址,将需要协调数百个外部组织同步更新配置,不仅工作量巨大,还会带来业务中断风险。其次,在安全合规方面,字节跳动的某些业务需要满足特定地区的监管要求,这些要求明确规定了服务必须使用经过备案或认证的IP地址段,更换IP地址意味着需要重新进行漫长的合规审批流程。此外,在邮件服务场景中,字节跳动的企业邮件系统和营销邮件平台长期使用特定的IP地址段发送邮件,这些IP地址已经建立了良好的发件人信誉(IP Reputation),如果更换IP地址,新的IP地址将被视为”冷启动”状态,可能导致邮件被大量标记为垃圾邮件,严重影响邮件送达率和业务运营。基于这些强烈的业务需求,字节跳动在与AWS合作的上云迁移项目中,将BYOIP功能作为核心技术方案之一,以确保在享受AWS云服务弹性和可靠性的同时,保持IP地址的连续性和业务的平稳过渡。
技术方案设计
AWS BYOIP(Bring Your Own IP)服务允许企业将自有的公网 IPv4 或 IPv6 地址段从本地部署迁移到 AWS 账户中。企业保持对地址段的所有权,AWS 负责在互联网上代为发布路由。迁移完成后,地址段将作为地址池出现在 AWS 账户中,可用于创建弹性 IP(Elastic IP)并分配给 EC2 实例、NAT 网关和负载均衡器等资源。
字节跳动本次 BYOIP 项目的目标是将网段 x.y.0.0/23 从自建机房迁移到 AWS 美东一区域。考虑到业务需求、业务连续性和风险控制,项目采用了分阶段实施策略:第一阶段迁移 x.y.1.0/24 网段;第二阶段再迁移 x.y.0.0/24 网段。
核心设计原则:
- 所有权不变:IP 网段所有权始终保持为字节跳动
- 路由代发:由 AWS 代为发布 BGP 路由,AS-Path 源变更为 AWS 的 AS16509 和 AS14618
- 合规验证:通过 X.509 证书和 ROA 对象确保所有权验证和路由发布授权的合规性
- 标准流程:遵循 AWS BYOIP 四阶段流程——资源准备(Preparing)、配置(Provisioning)、发布(Advertising)和分配使用(Allocating)
方案实施
BYOIP 验证机制原理概览
![]() |
如图所示,AWS BYOIP 的安全性建立在两个相互独立但互补的验证机制之上:所有权验证(图左侧蓝色部分)和路由发布授权验证(图右侧绿色部分)。接下来,我们将分别介绍这两个验证机制的工作流程。
所有权验证机制(图左侧)
所有权验证机制确保”导入合法性”(Who you are),即验证企业对 IP 地址段的合法所有权。该机制基于 X.509 证书和数字签名技术,包含 5 个关键步骤:
- 步骤 1-3(企业准备):企业生成 RSA 密钥对和 X.509 证书,将证书上传到 RIR 的公开 RDAP 记录,然后使用私钥对授权消息进行数字签名并通过 CLI 命令提交
- 步骤 4-5(AWS 验证):AWS 从 RIR 获取证书并提取公钥,通过比对公钥解密的签名摘要与明文计算的摘要来验证 IP 地址段所有权的真实性和完整性
路由发布授权机制(图右侧)
路由发布授权机制确保”发布合法性”(What you can announce),即验证特定 ASN 是否有权发布该 IP 地址段的路由。该机制基于 RPKI(资源公钥基础设施)体系,同样包含 5 个关键步骤:
- 步骤 1-2(企业准备):企业在 RIR 系统中创建 ROA(Route Origin Authorization)对象,明确授权 AWS 的 AS16509 和 AS14618 可以发布路由,全球 RPKI 验证器定期同步这些授权信息
- 步骤 3-5(AWS 验证与发布):AWS 查询 RPKI 验证器确认路由状态为”Valid”,然后通过全球 BGP 网络向互联网通告路由
双重验证的协同作用
如图中心黄色区块所示,这两层验证机制相互配合:X.509 证书验证确保了 IP 地址段导入 AWS 的合法性(身份验证),ROA 验证确保了路由发布到互联网的合法性(权限验证)。
下面我们将对 BYOIP 的四个阶段进行详细展开,介绍每个阶段的具体操作步骤、关键验证点和注意事项。
1. 资源准备阶段(Preparing)
资源准备阶段是整个项目的基础,涉及密钥对与证书生成、授权消息签名、RIR 配置和 ROA 对象创建等关键工作。
1.1 生成密钥对
使用 OpenSSL 命令行工具生成 RSA 2048 位私钥文件:
user@bd:~$ openssl genpkey -aes256 -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out byoip-private.key
私钥文件将用于后续的数字签名操作,必须妥善保管。
1.2 生成 X.509 证书
基于私钥创建自签名的 X.509 证书,有效期设置为 365 天:
user@bd:~$ openssl req -new -x509 -key byoip-private.key -days 365 | tr -d "\n" > byoip-publickey.cer
证书生成时需要填写完整的 Distinguished Name(DN)信息,包括国家代码(US)、州/城市(SFO)、组织名称(BD)、部门(Lark)等字段。
1.3 生成授权消息签名
授权消息(Authorization Message)是 BYOIP 所有权验证的核心元素,它通过数字签名技术证明企业对 IP 地址段的合法控制权。
授权消息格式
授权消息采用固定格式,由七个部分组成,使用竖线符号”|”分隔:
1|aws|account|cidr|YYYYMMDD|SHA256|RSAPSS
各组成部分详解:
- 版本号(Component 1):必须设置为”1″,表示当前 BYOIP 授权消息协议的版本号
- AWS 分区(Component 2):指定目标 AWS 云分区,有效值包括:
aws– AWS 商业区域aws-cn– AWS 中国区域aws-iso– AWS 隔离区域(美国机密云)aws-iso-b– AWS 隔离区域 Baws-us-gov– AWS GovCloud(美国政府云)
- AWS 账户 ID(Component 3):12 位数字,表示要将 IP 地址段导入的目标 AWS 账户
- CIDR 地址段(Component 4):要导入的 IP 地址段,必须遵循标准 CIDR 表示法(如 x.y.1.0/24 )
- 过期日期(Component 5):授权消息的有效期截止日期,采用 ISO 8601 格式(YYYYMMDD)。签名在指定日期的 00:00:00 UTC 后失效,但不影响已导入的 IP 地址段
- 哈希算法(Component 6):当前必须设置为”SHA256″,用于生成消息摘要
- 签名填充模式(Component 7):当前必须设置为”RSAPSS”,表示使用 RSA Probabilistic Signature Scheme 填充模式
根据上述规则,构造授权消息并使用私钥进行签名:
user@bd:~$ text_message="1|aws|0123456789AB|x.y.1.0/24|20251231|SHA256|RSAPSS"
user@bd:~$ signed_message=$( echo -n $text_message | openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -sign byoip-private.key -keyform PEM | openssl base64 | tr -- '+=/' '-_~' | tr -d "\n")
生成的 signed_message 将与明文 text_message 一起通过 AWS CLI 命令提交,供 AWS 在 Provisioning 阶段进行验证。
1.4 更新 RIR RDAP 记录
企业需要将生成的 X.509 证书上传到 RIR(区域互联网注册机构)的 RDAP(Registry Data Access Protocol)记录中,以便 AWS 在 Provisioning 阶段能够获取证书进行验证。上传时必须包含完整的证书内容,包括 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 标记,所有内容必须在单独的一行中。
不同 RIR 的证书上传流程:
- ARIN:通过 Account Manager 门户,将证书添加到代表该地址段的”Network Information”对象的”Public Comments”部分。注意:不要添加到组织(Organization)的 comments 部分
- RIPE:将证书作为新的”descr”字段添加到代表该地址段的”inetnum”或”inet6num”对象中。这些对象通常可以在 RIPE Database 门户的”My Resources”部分找到。注意:不要添加到组织的 comments 部分或上述对象的”remarks”字段
- APNIC:通过编辑”inetnum”或”inet6num”记录的 remarks 字段来添加证书
字节跳动项目中的实施:
由于字节跳动的 IP 地址段 x.y.1.0/24 归属于 ARIN,字节网络团队需要通过 ARIN Account Manager 门户将证书添加到”Network Information”对象的”Public Comments”部分。
验证证书上传成功:
证书上传后,可以通过以下两种方式验证:
- 使用 whois 命令查询:
- 使用浏览器访问 RDAP API 端点:
https://rdap.arin.net/registry/ip/x.y.1.0
注意:证书在 Provisioning 阶段完成后可以从 RIR 记录中删除,但建议保留以便后续可能的审计或故障排查需求。
1.5 创建 ROA 对象
在 ARIN 系统中创建 ROA 对象,明确授权 AWS 的 AS16509 和 AS14618 发布该地址段的路由,最大前缀长度设置为 /24。ROA 是 RPKI(资源公钥基础设施)体系的重要组成部分,用于防止 BGP 路由劫持。
验证 ROA 状态
通过 RIPE 的 RPKI 验证器 API 确认 ROA 配置正确,需要分别确认 AS16509 和 AS14618 的 ROA 状态:
1.6 后续验证流程
资源准备阶段完成了企业侧的准备工作,实际验证由 AWS 在后续阶段执行:
- 所有权验证(步骤 4-5):将在配置阶段(Provisioning)由 AWS 执行,详见 2.2 节
- 路由发布授权验证(步骤 3-5):将在发布阶段(Advertising)由 AWS 执行,详见第三部分:发布阶段(Advertising)
注意:私钥和证书仅在 Provisioning 阶段用于验证,证书过期后不会影响已经成功 BYOIP 到 AWS 的网段,且同一对密钥和证书可以在多个 BYOIP 项目中重复使用,支持 IPv4 和 IPv6 地址段。
2. 配置阶段(Provisioning)
Provisioning 阶段是将 IP 地址段正式导入 AWS 的关键步骤,也是 AWS 执行所有权验证的阶段。
2.1 执行 Provision 命令
使用 AWS CLI 的 ec2 provision-byoip-cidr 命令:
命令执行后,初始状态为”pending-provision”,表示 AWS 正在进行后台验证和配置。
2.2 AWS 所有权验证流程
AWS 在此阶段执行严格的数字签名验证,这是确保”导入合法性”的核心机制。验证流程包括四个关键步骤:
- 从证书中提取公钥:AWS 从 RIR 的 RDAP 记录中获取企业上传的证书,解析并提取其中的 RSA 公钥
- 公钥解密得摘要 A:使用公钥对企业提交的签名进行解密,得到原始的消息摘要(Hash 值)
- 明文计算得摘要 B:AWS 对企业提交的明文授权消息使用相同的 SHA256 算法重新计算摘要
- 比对验证:比较两个摘要值,若 A == B 则验证通过
这种基于公钥基础设施(PKI)的验证机制确保了三个关键安全属性:
- 身份认证:授权消息确实由持有私钥的企业签发
- 完整性验证:授权消息在传输过程中未被篡改
- 不可抵赖性:企业无法否认曾发出该授权
2.3 监控 Provisioning 状态
通过 aws ec2 describe-byoip-cidrs 命令持续监控状态:
当状态变更为”provisioned”且 StatusMessage 显示”Cidr successfully provisioned into Ipv4Pool”时,表示该网段已成功导入 AWS 并分配到特定的 IPv4 地址池。
注意:这个过程通常会在 2 小时内完成,但有可能最长需要 1 周时间,具体取决于 RIR 记录的同步速度和 AWS 内部验证流程。
3. 发布阶段(Advertising)
Advertising 阶段负责将 IP 地址段的路由发布到全球互联网,AWS 会在发布前验证 RPKI 路由状态,确认:
- ROA 对象存在且有效
- 授权的 ASN 包含 AWS(AS16509/AS14618)
- 路由状态为”Valid”
如果路由的起源 ASN 与 ROA 授权匹配,路由被标记为”valid”;否则被标记为”invalid”或”not found”。
3.1 执行 Advertise 命令
验证通过后,执行发布命令:
3.3 BGP 路由发布
命令执行成功后,状态立即变更为”advertised”。AWS 通过其全球 BGP 网络向互联网通告该地址段的路由,AS-Path 的起源 ASN 显示为 AWS(AS16509/AS14618)。全球互联网的路由表将逐步更新,流量开始被引导到 AWS 网络。支持 RPKI 的网络会优先接受或仅接受”valid”状态的路由,从而有效防止路由劫持。
注意:虽然路由的发布者变成了 AWS,但通过 whois 查询该 IP 地址段时,所有权信息(Organization)仍然显示为字节跳动,这正是 BYOIP 的核心价值所在。
4. 分配使用阶段(Allocating)
使用阶段是方案落地的最终环节。
4.1 分配弹性 IP
IP 地址段成功 Provision 和 Advertise 后,可以从该地址池中分配弹性 IP 地址(EIP)。在 AWS 控制台或 CLI 中分配 EIP 时,需要在”Public IPv4 address pool”选项中选择”Public IPv4 address that you bring to your AWS account with BYOIP”类型。
![]() |
4.2 绑定到 AWS 资源
将分配的 EIP 绑定到 EC2 实例、NAT 网关或负载均衡器等资源上。
![]() |
4.3 邮件服务配置(可选)
如果需要将 BYOIP 的 EIP 用于邮件发送服务(绑定到 EC2 实例作为邮件代理),需要向 AWS 提交工单申请移除端口 25 的限制,因为 AWS 默认会阻止所有 EC2 实例和 Lambda 函数的 25 端口出站流量,以防止垃圾邮件滥用,从而保护 AWS IP 地址信誉。
实施效果与业务价值
字节跳动的 BYOIP 项目取得了圆满成功,两个网段 x.y.1.0/24 和 x.y.0.0/24 都在预期时间内顺利完成迁移和上线。项目实施后带来了显著的业务价值和技术收益。
在白名单管理方面,由于 IP 地址保持不变,字节跳动无需协调全球数百家合作伙伴更新防火墙规则、API 网关配置和安全策略,避免了大规模的配置变更工作。这不仅节省了数百小时的沟通和协调成本,更重要的是消除了因配置不同步导致的业务中断风险。合作伙伴的访问控制策略可以无缝延续,业务连续性得到了完美保障。
在邮件服务场景中,BYOIP 的价值尤为突出。字节跳动的 Lark 产品的邮件服务长期使用 x.y.0.0/23 网段发送邮件,这些 IP 地址在主流邮件服务提供商(Gmail、Outlook、Yahoo 等)的信誉系统中已经建立了良好的发件人评分。通过 BYOIP 保持 IP 地址不变,邮件送达率维持在迁移前的 98% 以上水平,完全避免了新 IP 地址”冷启动”阶段可能出现的大量邮件被标记为垃圾邮件的问题。这对于依赖邮件通知的企业协作产品来说至关重要,直接保障了数千万用户的正常使用体验。
在安全合规方面,由于 IP 地址段的所有权信息保持为字节跳动,相关的网络安全备案、数据合规认证等文件无需重新申请和审批。这为企业节省了数月的合规流程时间和大量的行政成本。同时,在面对安全审计和监管检查时,IP 地址的连续性也简化了证据链的追溯和说明工作。
从技术架构角度看,BYOIP 方案为字节跳动的混合云战略提供了关键支撑。企业可以灵活地在自建数据中心和 AWS 云之间迁移工作负载,而无需担心 IP 地址变更带来的连锁反应。这种灵活性为未来的多云部署、灾难恢复和业务扩展奠定了坚实基础。
项目的成功实施也为字节跳动积累了宝贵的 BYOIP 实践经验,包括完整的操作手册、自动化脚本、验证工具和故障排查流程。这些知识资产将在更多公网 IP 网段的迁移中继续发挥价值,并可推广到其他业务单元的上云项目中,形成可复制的最佳实践模式。
附录
- BYOIP详细步骤可参考文档《Introducing Bring Your Own IP (BYOIP) for Amazon VPC》
- 更新证书到 RIR RDAP 流程参考文档《Upload the X.509 certificate to the RDAP record in your RIR》
- 在 RIR 中创建 ROA Create a ROA object in your RIR
- 验证 RIR 中的证书及 ROA 状态《Validate your BYOIP》
- AWS EC2申请移除端口号为25到公网 IP 的限制 EC2 Port 25 Restriction
*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。
本篇作者
AWS 架构师中心: 云端创新的引领者探索 AWS 架构师中心,获取经实战验证的最佳实践与架构指南,助您高效构建安全、可靠的云上应用 |
![]() |





