自带 IP 地址 (BYOIP) - Amazon Elastic Compute Cloud
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

自带 IP 地址 (BYOIP)

您可以将部分或全部公有 IPv4 地址或 IPv6 地址范围从本地网络引入到您的 AWS 账户中。您继续拥有该地址范围,但 AWS 默认将其发布到 Internet 上。在将地址范围引入 AWS 中之后,它会在您的账户中显示为地址池。

重要

BYOIP 并非在所有区域中都可用。有关受支持区域的列表,请参阅自带 IP 常见问题

要求

  • 必须在区域 Internet 注册表 (RIR) 中注册地址范围,例如 American Registry for Internet Numbers (ARIN)、Réseaux IP Européens Network Coordination Centre (RIPE) 或 Asia-Pacific Network Information Centre (APNIC)。它必须由企业或机构实体注册,而不能由个人注册。

  • 您可以引入的最具体 IPv4 地址范围是 /24。

  • 对于公开发布的 CIDR,您可以引入的最具体 IPv6 地址范围是 /48,对于不公开发布的 CIDR,您可以引入的最具体 IPv6 地址范围是 /56。

  • 您可以将每个地址范围一次添加到一个区域中。

  • 对于每个区域,您可以将总共 5 个 IPv4 和 IPv6 地址范围引入到您的 AWS 账户中。

  • IP 地址范围中的地址必须具有干净的历史记录。我们可能会调查 IP 地址范围的声誉,并保留权利以拒绝包含的 IP 地址具有不良声誉或与恶意行为关联的 IP 地址范围。

  • 您必须拥有所使用的 IP 地址。这意味着只支持以下情况:

    • ARIN – “Direct Allocation”和“Direct Allocation”网络类型。

    • RIPE – “ALLOCATED PA”、“LEGACY”、“ASSIGNED PI”和“ALLOCATED-BY-RIR”分配状态

    • APNIC -“ALLOCATED PORTABLE”和“ASSIGNED PORTABLE”分配状态

准备将您的地址范围引入您的 AWS 账户

要确保仅您可以将地址范围添加到您的 AWS 账户,您必须授权 Amazon 发布该地址范围。您还必须通过签名的授权消息提供您拥有该地址范围的证据。

路由来源授权 (ROA) 是有关可通过 RIR 创建的路由通告的加密声明。它包含地址范围、允许发布地址范围的自治系统编号 (ASN) 及到期日期。ROA 授权 Amazon 以特定的 AS 编号发布地址范围。但是,它不会授权您的 AWS 账户将地址范围引入 AWS。要授权您的 AWS 账户将地址范围引入 AWS,您必须在该地址范围的注册数据访问协议 (RDAP) 备注中发布自签名 X509 证书。该证书包含一个公有密钥,AWS 使用该密钥验证您所提供的授权上下文签名。请确保您的私有密钥的安全,并使用该密钥对授权上下文消息进行签名。

这些任务中的命令在 Linux 上受支持。在 Windows 上,您可以使用适用于 Linux 的 Windows 子系统运行 Linux 命令。

创建一个 ROA 对象

创建 ROA 对象以授权 ASN 16509 和 14618 来发布您的地址范围,以及当前授权的 ASN 来发布该地址范围。您必须将最大长度设置为要引入的最小前缀的大小(例如 /24)。若要 ROA 可用于 Amazon,可能需要多达 24 小时的时间。有关更多信息,请参阅下列内容:

创建自签名 X509 证书

使用以下过程创建自签名 X509 证书,并将其添加到您的 RIR 的 RDAP 记录。openssl 命令需要 OpenSSL 版本 1.0.2 或更高版本。

复制下面的命令并仅替换占位符值(以彩色斜体文本显示)。

创建自签名 X509 证书并将其添加到 RDAP 记录

  1. 生成 RSA 2048 位密钥对,如下所示。

    openssl genrsa -out private.key 2048
  2. 使用以下命令从该密钥对创建一个公有 X509 证书。在此示例中,该证书在 365 天后过期,在此日期后它将不能是受信任的。请务必相应地设置到期时间。当系统提示您提供信息时,输入默认值。

    openssl req -new -x509 -key private.key -days 365 | tr -d "\n" > publickey.cer
  3. 使用 X509 证书更新 RIR 的 RDAP 记录。请务必复制证书中的 -----BEGIN CERTIFICATE----------END CERTIFICATE-----。请务必事先在上述步骤中使用 tr -d "\n" 命令删除换行符(如果尚未这样做的话)。要查看证书,请运行以下命令。

    cat publickey.cer

    对于 ARIN,在地址范围的“Public Comments (公共注释)”部分中添加证书。请勿将其添加到您组织的注释部分。

    对于 RIPE,将证书添加为地址范围的“描述”字段。请勿将其添加到您组织的注释部分。

    对于 APNIC,通过电子邮件将公有密钥发送到 helpdesk@apnic.net,以手动将其添加到地址范围的“remarks”(备注) 字段中。请以 IP 地址的 APNIC 授权联系人身份发送电子邮件。

创建签名授权消息

签名的授权消息的格式如下所示,其中,日期是消息的到期日期。

1|aws|account|cidr|YYYYMMDD|SHA256|RSAPSS

创建签名授权消息

  1. 创建一个明文授权消息,并将其存储在名为 text_message 的变量中,如以下示例中所示。复制以下示例,并仅将示例账号、地址范围和失效日期替换为您自己的值。

    text_message="1|aws|123456789012|198.51.100.0/24|20191201|SHA256|RSAPSS"
  2. 使用您创建的密钥对在 text_message 中对授权消息进行签名,然后将其存储在名为 signed_message 的变量中。

    signed_message=$(echo $text_message | tr -d "\n" | openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -sign private.key -keyform PEM | openssl base64 | tr -- '+=/' '-_~' | tr -d "\n")
    重要

    我们建议您复制并粘贴此命令。不要修改或替换任何值。

预配置地址范围以用于 AWS

在预置一个地址范围以用于 AWS 时,您需要确认您拥有该地址范围,并授权 Amazon 发布该地址范围。我们还会通过签名授权消息验证您拥有该地址范围。该消息是使用在通过 X509 证书更新 RDAP 记录时使用的自签名 X509 密钥对签名的。

要预配置地址范围,请使用以下 provision-byoip-cidr 命令。使用您自己的地址范围替换示例地址范围。--cidr-authorization-context 选项使用您以前创建的变量,而不是 ROA 消息。

aws ec2 provision-byoip-cidr --cidr address-range --cidr-authorization-context Message="$text_message",Signature="$signed_message"

预配置地址范围是一项异步操作,因此该调用会立即返回,但地址范围未准备就绪,直到其状态从 pending-provision 更改为 provisioned 才可供使用。完成预置过程最多可能需要三周时间。要监控您预置的地址范围的状态,请使用以下 describe-byoip-cidrs 命令。

aws ec2 describe-byoip-cidrs --max-results 5

如果在预置过程中出现问题,并且状态变为 failed-provision,则您必须在解决问题后再次运行 provision-byoip-cidr 命令。

预置不公开发布的 IPv6 地址范围

默认情况下,将预置一个地址范围以公开发布到 Internet 上。您可以预置不公开发布的 IPv6 地址范围。在将非公有地址范围内的 IPv6 CIDR 块与一个 VPC 关联时,只能通过 AWS Direct Connect 连接访问该 IPv6 CIDR。

不需要使用 ROA 以预置非公有地址范围。

要预置不公开发布的 IPv6 地址范围,请使用以下 provision-byoip-cidr 命令。

aws ec2 provision-byoip-cidr --cidr address-range --cidr-authorization-context Message="$text_message",Signature="$signed_message" --no-publicly-advertisable
重要

您只能在预置期间设置 publicly-advertisableno-publicly-advertisable 标记。您以后无法更改地址范围的可发布状态。

通过 AWS 发布地址范围

预配置地址范围后,即可对其进行发布。您必须发布预配置的确切地址范围。您不能只发布预配置的地址范围的一部分。

如果您预置不公开发布的 IPv6 地址范围,则无需完成该步骤。

在通过 AWS 对地址范围进行发布之前,我们建议您停止从其他位置发布它。如果您一直从其他位置发布 IP 地址范围,我们将无法可靠地为其提供支持或解决问题。具体来说,我们无法保证到地址范围的流量将进入我们的网络。

为最大限度地减少停机时间,您可以在发布之前将 AWS 资源配置为使用地址池中的某一地址,然后停止从当前位置发布该地址并同时开始通过 AWS 发布该地址。有关从地址池分配弹性 IP 地址的更多信息,请参阅分配弹性 IP 地址

要发布地址范围,请使用以下 advertise-byoip-cidr 命令。

aws ec2 advertise-byoip-cidr --cidr address-range
重要

您最多只能每 10 秒运行一次 advertise-byoip-cidr 命令,即使每次指定不同的地址范围也是如此。

要停止发布地址范围,请使用以下 withdraw-byoip-cidr 命令。

aws ec2 withdraw-byoip-cidr --cidr address-range
重要

您最多只能每 10 秒运行一次 withdraw-byoip-cidr 命令,即使每次指定不同的地址范围也是如此。

使用地址范围

您可以查看和使用在您的账户中预置的 IPv4 和 IPv6 地址范围。

IPv4 地址范围

您可以从 IPv4 地址池中创建弹性 IP 地址,并将其用于您的 AWS 资源,如 EC2 实例、NAT 网关和 Network Load Balancer。

要查看有关在您的账户中预置的 IPv4 地址池的信息,请使用以下 describe-public-ipv4-pools 命令。

aws ec2 describe-public-ipv4-pools

要从 IPv4 地址池中创建弹性 IP 地址,请使用 allocate-address 命令。您可以使用 --public-ipv4-pool 选项指定 describe-byoip-cidrs 返回的地址池的 ID。或者,您可以使用 --address 选项从您预置的地址范围中指定一个地址。

IPv6 地址范围

要查看有关在您的账户中预置的 IPv6 地址池的信息,请使用以下 describe-ipv6-pools 命令。

aws ec2 describe-ipv6-pools

要创建 VPC 并从 IPv6 地址池中指定 IPv6 CIDR,请使用以下 create-vpc 命令。要让 Amazon 从 IPv6 地址池中选择 IPv6 CIDR,请省略 --ipv6-cidr-block 选项。

aws ec2 create-vpc --cidr-block 10.0.0.0/16 --ipv6-cidr-block ipv6-cidr --ipv6-pool pool-id

要将 IPv6 地址池中的 IPv6 CIDR 块与 VPC 关联,请使用以下 associate-vpc-cidr-block 命令。要让 Amazon 从 IPv6 地址池中选择 IPv6 CIDR,请省略 --ipv6-cidr-block 选项。

aws ec2 associate-vpc-cidr-block --vpc-id vpc-123456789abc123ab --ipv6-cidr-block ipv6-cidr --ipv6-pool pool-id

要查看 VPC 和关联的 IPv6 地址池信息,请使用 describe-vpcs 命令。要查看有关特定 IPv6 地址池中的关联 IPv6 CIDR 块的信息,请使用以下 get-associated-ipv6-pool-cidrs 命令。

aws ec2 get-associated-ipv6-pool-cidrs --pool-id pool-id

如果将 IPv6 CIDR 块与 VPC 取消关联,则会将其释放回 IPv6 地址池中。

有关在 VPC 控制台中使用 IPv6 CIDR 块的更多信息,请参阅 Amazon VPC 用户指南 中的使用 VPC 和子网

取消预配置地址范围

要停止在 AWS 上使用您的地址范围,请先释放任何弹性 IP 地址,并取消关联仍从地址池中分配的任何 IPv6 CIDR 块。接下来,停止发布该地址范围,并最终取消预置该地址范围。

您无法取消预置地址范围的一部分。如果要在 AWS 上使用更具体的地址范围,请取消预置整个地址范围,并预置一个更具体的地址范围。

(IPv4) 要释放每个弹性 IP 地址,请使用以下 release-address 命令。

aws ec2 release-address --allocation-id eipalloc-12345678abcabcabc

(IPv6) 要取消关联 IPv6 CIDR 块,请使用以下 disassociate-vpc-cidr-block 命令。

aws ec2 disassociate-vpc-cidr-block --association-id vpc-cidr-assoc-12345abcd1234abc1

要停止发布地址范围,请使用以下 withdraw-byoip-cidr 命令。

aws ec2 withdraw-byoip-cidr --cidr address-range

要取消预置地址范围,请使用以下 deprovision-byoip-cidr 命令。

aws ec2 deprovision-byoip-cidr --cidr address-range

取消预置地址范围最多可能需要一天的时间。