AWS 的 IP 地址范围 - AWS 一般参考

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS 的 IP 地址范围

Amazon Web Services (AWS) 以 JSON 格式发布其当前的 IP 地址范围。要查看当前范围,请下载 .json 文件。要维护历史记录,请将连续版本的 .json 文件保存在系统上。要确定自上次保存文件以来是否发生更改,请检查当前文件中的发布时间,并将其与上次保存文件中的发布时间进行比较。

Download

下载 ip-ranges.json

如果您以编程方式访问此文件,您有责任确保仅在成功验证服务器提供的 TLS 证书之后,应用程序才能下载文件。

Syntax

ip-ranges.json 的语法如下。

{ "syncToken": "0123456789", "createDate": "yyyy-mm-dd-hh-mm-ss", "prefixes": [ { "ip_prefix": "cidr", "region": "region", "network_border_group": "network_border_group", "service": "subset" } ], "ipv6_prefixes": [ { "ipv6_prefix": "cidr", "region": "region", "network_border_group": "network_border_group", "service": "subset" } ] }
syncToken

采用 Unix 纪元时间格式的发布时间。

类型:String

示例: "syncToken": "1416435608"

createDate

发布日期和时间。

类型:String

示例: "createDate": "2014-11-19-23-29-02"

prefixes

IPv4 地址范围的 IP 前缀。

类型:数组

ipv6_prefixes

IPv6 地址范围的 IP 前缀。

类型:数组

ip_prefix

用 CIDR 表示法指定的公有 IPv4 地址范围。请注意,AWS 可在更具体的范围内公布前缀。例如,文件中的前缀 96.127.0.0/17 可公布为 96.127.0.0/21、96.127.8.0/21、96.127.32.0/19 和 96.127.64.0/18。

类型:String

示例: "ip_prefix": "198.51.100.2/24"

ipv6_prefix

用 CIDR 表示法指定的公有 IPv6 地址范围。请注意,AWS 可在更具体的范围内公布前缀。

类型:String

示例: "ipv6_prefix": "2001:db8:1234::/64"

network_border_group

网络边界组的名称,这是 AWS 通告 IP 地址的可用区或本地扩展区的唯一集合。

类型:String

示例: "network_border_group": "us-west-2-lax-1"

region

AWS 区域或 GLOBAL(针对边缘站点)。的 CLOUDFRONTROUTE53 范围是 GLOBAL.

类型:String

有效值:ap-east-1 |内测 ap-northeast-1 |内测 ap-northeast-2 |内测 ap-northeast-3 |内测 ap-south-1 |内测 ap-southeast-1 |内测 ap-southeast-2 |内测 ca-central-1 |内测 cn-north-1 |内测 cn-northwest-1 |内测 eu-central-1 |内测 eu-north-1 |内测 eu-west-1 |内测 eu-west-2 |内测 eu-west-3 |内测 sa-east-1 |内测 us-east-1 |内测 us-east-2 |内测 us-gov-east-1 |内测 us-gov-west-1 |内测 us-west-1 |内测 us-west-2 |内测 GLOBAL

示例: "region": "us-east-1"

服务

IP 地址范围的子集。为 API_GATEWAY 列出的地址仅为出口 IP 地址。指定 AMAZON 可获得所有 IP 地址范围(这意味着每个子集也在 AMAZON 子集中)。但是,某些 IP 地址范围仅在 AMAZON 子集中(这意味着它们不会再包含在其他子集中)。

类型:String

有效值:AMAZON |内测 AMAZON_APPFLOW |内测 AMAZON_CONNECT |内测 API_GATEWAY |内测 CHIME_MEETINGS |内测 CHIME_VOICECONNECTOR |内测 CLOUD9 |内测 CLOUDFRONT |内测 CODEBUILD |内测 DYNAMODB |内测 EC2 |内测 EC2_INSTANCE_CONNECT |内测 GLOBALACCELERATOR |内测 ROUTE53 |内测 ROUTE53_HEALTHCHECKS |内测 S3 |内测 WORKSPACES_GATEWAYS

示例: "service": "AMAZON"

筛选 JSON 文件

您可以下载命令行工具以帮助您筛选出自己所要查找的信息。

Windows

适用于 Windows PowerShell 的 AWS 工具 包含 cmdlet Get-AWSPublicIpAddressRange 以便分析此 JSON 文件。以下示例展示了其用法。有关更多信息,请参阅查询 AWS 的公有 IP 地址范围Get-AWSPublicIpAddressRange

例 1。获取创建日期

PS C:\> Get-AWSPublicIpAddressRange -OutputPublicationDate Wednesday, August 22, 2018 9:22:35 PM

例 2. 获取特定区域的信息

PS C:\> Get-AWSPublicIpAddressRange -Region us-east-1 IpPrefix Region NetworkBorderGroup Service -------- ------ ------- ------- 23.20.0.0/14 us-east-1 us-east-1 AMAZON 50.16.0.0/15 us-east-1 us-east-1 AMAZON 50.19.0.0/16 us-east-1 us-east-1 AMAZON ...

例 3. 获取所有 IP 地址

PS C:\> (Get-AWSPublicIpAddressRange).IpPrefix 23.20.0.0/14 27.0.0.0/22 43.250.192.0/24 ... 2406:da00:ff00::/64 2600:1fff:6000::/40 2a01:578:3::/64 2600:9000::/28

例 4. 获取所有 IPv4 地址

PS C:\> Get-AWSPublicIpAddressRange | where {$_.IpAddressFormat -eq "Ipv4"} | select IpPrefix IpPrefix -------- 23.20.0.0/14 27.0.0.0/22 43.250.192.0/24 ...

例 5. 获取所有 IPv6 地址

PS C:\> Get-AWSPublicIpAddressRange | where {$_.IpAddressFormat -eq "Ipv6"} | select IpPrefix IpPrefix -------- 2a05:d07c:2000::/40 2a05:d000:8000::/40 2406:dafe:2000::/40 ...

例 6. 获取特定服务的所有 IP 地址

PS C:\> Get-AWSPublicIpAddressRange -ServiceKey CODEBUILD | select IpPrefix IpPrefix -------- 52.47.73.72/29 13.55.255.216/29 52.15.247.208/29 ...

Linux

以下示例命令使用 jq 工具分析 JSON 文件的本地副本。

例 1。获取创建日期

$ jq .createDate < ip-ranges.json "2016-02-18-17-22-15"

例 2. 获取特定区域的信息

$ jq '.prefixes[] | select(.region=="us-east-1")' < ip-ranges.json { "ip_prefix": "23.20.0.0/14", "region": "us-east-1", "network_border_group": "us-east-1", "service": "AMAZON" }, { "ip_prefix": "50.16.0.0/15", "region": "us-east-1", "network_border_group": "us-east-1", "service": "AMAZON" }, { "ip_prefix": "50.19.0.0/16", "region": "us-east-1", "network_border_group": "us-east-1", "service": "AMAZON" }, ...

例 3. 获取所有 IPv4 地址

$ jq -r '.prefixes | .[].ip_prefix' < ip-ranges.json 23.20.0.0/14 27.0.0.0/22 43.250.192.0/24 ...

例 4. 获取所有 IPv6 地址

$ jq -r '.ipv6_prefixes | .[].ipv6_prefix' < ip-ranges.json 2a05:d07c:2000::/40 2a05:d000:8000::/40 2406:dafe:2000::/40 ...

例 5. 获取特定服务的所有 IPv4 地址

$ jq -r '.prefixes[] | select(.service=="CODEBUILD") | .ip_prefix' < ip-ranges.json 52.47.73.72/29 13.55.255.216/29 52.15.247.208/29 ...

例 6. 获取特定区域中的特定服务的所有 IPv4 地址

$ jq -r '.prefixes[] | select(.region=="us-east-1") | select(.service=="CODEBUILD") | .ip_prefix' < ip-ranges.json 34.228.4.208/28

例 7. 获取特定网络边界组的信息

$ jq -r '.prefixes[] | select(.region=="us-west-2") | select(.network_border_group=="us-west-2-lax-1") | .ip_prefix' < ip-ranges.json us-west-2-lax-1

实施出口控制

要仅允许实例访问 AWS 服务,可使用规则创建安全组,这些规则允许出站流量流向 AMAZON 列表中的 CIDR 块 (排除也在 EC2 列表中的 CIDR 块)。EC2 列表中的 IP 地址可以分配给 EC2 实例。

Windows PowerShell

以下 PowerShell 示例显示了如何获取位于 AMAZON 列表中但不位于 EC2 列表中的 IP 地址。复制脚本并将其保存到名为 Select_address.ps1 的文件中。

$amazon_addresses = Get-AWSPublicIpAddressRange -ServiceKey amazon $ec2_addresses = Get-AWSPublicIpAddressRange -ServiceKey ec2 ForEach ($address in $amazon_addresses) { if( $ec2_addresses.IpPrefix -notcontains $address.IpPrefix) { ($address).IpPrefix } }

您可以按如下方式运行此脚本:

PS C:\> .\Select_address.ps1 13.32.0.0/15 13.35.0.0/16 13.248.0.0/20 13.248.16.0/21 13.248.24.0/22 13.248.28.0/22 27.0.0.0/22 43.250.192.0/24 43.250.193.0/24 ...

jq

以下示例说明如何获取位于 AMAZON 列表中但不位于 EC2 列表中的 IP 地址(针对所有区域):

jq -r '[.prefixes[] | select(.service=="AMAZON").ip_prefix] - [.prefixes[] | select(.service=="EC2").ip_prefix] | .[]' < ip-ranges.json 52.94.22.0/24 52.94.17.0/24 52.95.154.0/23 52.95.212.0/22 54.239.0.240/28 54.239.54.0/23 52.119.224.0/21 ...

以下示例说明如何将结果筛选到一个区域:

jq -r '[.prefixes[] | select(.region=="us-east-1" and .service=="AMAZON").ip_prefix] - [.prefixes[] | select(.region=="us-east-1" and .service=="EC2").ip_prefix] | .[]' < ip-ranges.json

Python

以下 python 脚本显示了如何获取位于 AMAZON 列表中但不位于 EC2 列表中的 IP 地址。复制脚本并将其保存到名为 get_ips.py 的文件中。

#!/usr/bin/env python import requests ip_ranges = requests.get('https://ip-ranges.amazonaws.com/ip-ranges.json').json()['prefixes'] amazon_ips = [item['ip_prefix'] for item in ip_ranges if item["service"] == "AMAZON"] ec2_ips = [item['ip_prefix'] for item in ip_ranges if item["service"] == "EC2"] amazon_ips_less_ec2=[] for ip in amazon_ips: if ip not in ec2_ips: amazon_ips_less_ec2.append(ip) for ip in amazon_ips_less_ec2: print(str(ip))

您可以按如下方式运行此脚本:

$ python ./get_ips.py 13.32.0.0/15 13.35.0.0/16 13.248.0.0/20 13.248.16.0/21 13.248.24.0/22 13.248.28.0/22 27.0.0.0/22 43.250.192.0/24 43.250.193.0/24 ...

AWS IP 地址范围通知

只要 AWS IP 地址范围发生更改,我们就会向 AmazonIpSpaceChanged 主题的订阅者发送通知。有效负载包含以下格式的信息:

{ "create-time":"yyyy-mm-ddThh:mm:ss+00:00", "synctoken":"0123456789", "md5":"6a45316e8bc9463c9e926d5d37836d33", "url":"https://ip-ranges.amazonaws.com/ip-ranges.json" }
create-time

创建日期和时间。

通知可能不按顺序传输。因此,我们建议您检查时间戳以确保正确的顺序。

synctoken

采用 Unix 纪元时间格式的发布时间。

md5

ip-ranges.json 文件的加密哈希值。可以使用此值来检查下载的文件是否已损坏。

url

ip-ranges.json 文件的位置。

如果您希望只要 AWS IP 地址范围发生更改就收到通知,可以按以下所示进行订阅,以便使用 Amazon SNS 接收通知。

订阅 AWS IP 地址范围通知

  1. 通过以下网址打开 Amazon SNS 控制台:https://console.aws.amazon.com/sns/v3/home

  2. 在导航栏中,将区域更改为 美国东部(弗吉尼亚北部)(如果需要)。您必须选择此区域,因为您订阅的 SNS 通知是在此区域中创建的。

  3. 在导航窗格中,选择 Subscriptions

  4. 选择 Create subscription

  5. Create subscription 对话框中,执行以下操作:

    1. 对于 Topic ARN,复制以下 Amazon 资源名称 (ARN):

      arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged
    2. 对于 Protocol,选择要使用的协议 (例如 Email)。

    3. 对于 Endpoint,键入用于接收通知的终端节点 (例如,您的电子邮件地址)。

    4. 选择 Create subscription

  6. 将通过您指定的终端节点与您联系并要求您确认订阅。例如,如果您指定了一个电子邮件地址,您将收到一封主题为 AWS Notification - Subscription Confirmation。按照指示确认您的订阅。

通知受到终端节点可用性约束。因此,应定期检查 JSON 文件以确保您在最新范围内。有关 Amazon SNS 可靠性的更多信息,请参阅https://aws.amazon.com/sns/faqs/#Reliability

如果您不希望再收到这些通知,请通过以下步骤取消订阅。

取消订阅 AWS IP 地址范围通知

  1. 通过以下网址打开 Amazon SNS 控制台:https://console.aws.amazon.com/sns/v3/home

  2. 在导航窗格中,选择 Subscriptions

  3. 选中订阅对应的复选框。

  4. 选择 ActionsDelete subscriptions

  5. 当系统提示进行确认时,选择 Delete (删除)

有关 Amazon SNS 的更多信息,请参阅Amazon Simple Notification Service 开发人员指南

发行说明

下表介绍对 AWS IP 地址范围的更新。我们还会在推出每个区域时添加新的区域代码。

Description 发布日期
添加了 CHIME_MEETINGSCHIME_VOICECONNECTOR 服务代码。 2020 年 6 月 19 日
添加了 AMAZON_APPFLOW 服务代码。 2020 年 6 月 9 日
增加了对网络边界组的支持。 2020 年 4 月 7 日
添加了 WORKSPACES_GATEWAYS 服务代码。 2020 年 3 月 30 日
添加了 API_GATEWAY 服务代码。 2019 年 9 月 26 日
添加了 EC2_INSTANCE_CONNECT 服务代码。 2019 年 6 月 12 日
添加了 DYNAMODB 服务代码。 2019 年 4 月 25 日
添加了 GLOBALACCELERATOR 服务代码。 2018 年 12 月 20 日
添加了 AMAZON_CONNECT 服务代码。 2018 年 20 月 6 日
添加了 CLOUD9 服务代码。 2018 年 20 月 6 日
添加了 CODEBUILD 服务代码。 2018 年 4 月 19 日
添加了 S3 服务代码。 2017 年 2 月 28 日
添加了对 IPv6 地址范围的支持。 2016 年 8 月 22 日