AWS IP アドレスの範囲
AWS は、その現在の IP アドレス範囲を JSON 形式で公開します。この情報をもとに、AWS からのトラフィックを特定することができます。また、特定のタイプの AWS リソースとの間におけるトラフィックを許可または拒否することもできます。
現在の範囲を参照するには、.json
ファイルをダウンロードします。履歴を管理するには、連続したバージョンの .json
ファイルをシステムに保存します。ファイルを最後に保存してから変更があるかどうかを確認するには、現在のファイルの公開時刻を確認し、それを最後に保存したファイルの公開時刻と比較します。
独自の IP アドレスの持ち込み (BYOIP) を通じて AWS に持ち込む IP アドレス範囲は、.json
ファイルには含まれていません。
また、一部のサービスでは、AWS マネージドプレフィックスリストを使用してアドレス範囲を公開しています。詳細については、「使用可能な AWS マネージドプレフィックスリスト」を参照してください。
ダウンロード
ip-ranges.json
プログラムを使用してこのファイルにアクセスする場合、サーバーが提供した TLS 証明書を正しく確認した後にアプリケーションがファイルをダウンロードすることを保証する必要があります。
構文
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 エポック時刻形式での公開時刻。
型: 文字列
例:
"syncToken": "1416435608"
- createDate
-
発行日時 (UTC YY-MM-DD-hh-mm-ss 形式)。
型: 文字列
例:
"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 としてアドバタイズされる場合があります。
型: 文字列
例:
"ip_prefix": "198.51.100.2/24"
- ipv6_prefix
-
CIDR 表記でのパブリック IPv6 アドレス範囲。AWS はさらに特定の範囲でプレフィックスをアドバタイズする場合があります。
型: 文字列
例:
"ipv6_prefix": "2001:db8:1234::/64"
- network_border_group
-
AWS が IP アドレス、または
GLOBAL
をアドバタイズするアベイラビリティーゾーンまたはローカルゾーンの一意のセットである、ネットワーク境界グループの名前です。GLOBAL
サービスのトラフィックは、AWS が IP アドレスをアドバタイズする複数の (最大ですべての) アベイラビリティーゾーンまたはローカルゾーンに引き付けられたり、そこから発信されたりする可能性があります。型: 文字列
例:
"network_border_group": "us-west-2-lax-1"
- region
-
AWS リージョンまたは
GLOBAL
です。GLOBAL
サービスのトラフィックは、複数の (最大ですべての) AWS リージョンに引き付けられたり、そこから発信されたりする可能性があります。型: 文字列
有効な値:
af-south-1
|ap-east-1
|ap-northeast-1
|ap-northeast-2
|ap-northeast-3
|ap-south-1
|ap-south-2
|ap-southeast-1
|ap-southeast-2
|ap-southeast-3
|ap-southeast-4
|ca-central-1
|cn-north-1
|cn-northwest-1
|eu-central-1
|eu-central-2
|eu-north-1
|eu-south-1
|eu-south-2
|eu-west-1
|eu-west-2
|eu-west-3
|me-central-1
|me-south-1
|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
を指定します (つまり、すべてのサブセットもAMAZON
サブセットに含まれます)。ただし、一部の IP アドレス範囲はAMAZON
サブセット内にしかありません (つまり、別のサブセットでは使用できません)。型: 文字列
有効な値:
AMAZON
|AMAZON_APPFLOW
|AMAZON_CONNECT
|API_GATEWAY
|CHIME_MEETINGS
|CHIME_VOICECONNECTOR
|CLOUD9
|CLOUDFRONT
|CLOUDFRONT_ORIGIN_FACING
|CODEBUILD
|DYNAMODB
|EBS
|EC2
|EC2_INSTANCE_CONNECT
|GLOBALACCELERATOR
|KINESIS_VIDEO_STREAMS
|MEDIA_PACKAGE_V2
|ROUTE53
|ROUTE53_HEALTHCHECKS
|ROUTE53_HEALTHCHECKS_PUBLISHING
|ROUTE53_RESOLVER
|S3
|WORKSPACES_GATEWAYS
例:
"service": "AMAZON"
範囲の重複
任意のサービスコードから返される IP アドレスの範囲は、AMAZON
サービスコードからも返されます。例えば、S3
サービスコードから返される IP アドレスのすべての範囲は、AMAZON
サービスコードからも返されます。
サービス A がサービス B のリソースを使用する場合、サービス A とサービス B の両方のサービスコードから返される IP アドレス範囲があります。ただし、これらの IP アドレス範囲はサービス A によってのみ使用され、サービス B では使用できません。例えば、Amazon S3 は Amazon EC2 のリソースを使用するため、S3
と EC2
両方のサービスコードから返される IP アドレス範囲があります。ただし、これらの IP アドレス範囲は Amazon S3 でのみ使用されます。したがって、S3
サービスコードは、Amazon S3 でのみ使用されるすべての IP アドレス範囲を返します。Amazon EC2 でのみ使用される IP アドレス範囲を特定するには、S3
サービスコードではなく、EC2
サービスコードから返される IP アドレス範囲を探してください。
JSON ファイルのフィルタリング
情報をフィルターして目的のものを見つけやすくするコマンドラインツールをダウンロードできます。
Windows
AWS Tools for Windows PowerShell には、この JSON ファイルを解析するコマンドレット Get-AWSPublicIpAddressRange
が含まれています。以下はその使用例です。詳細については、「Querying the Public IP Address Ranges for AWS
例 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 ツール
例 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
70.224.192.0/18 52.95.230.0/24 15.253.0.0/16 ...
出口側のコントロールの実装
インスタンスが AWS のサービスのみにアクセスできるようにするには、確実にセキュリティグループのルールが、AMAZON
リストに含まれる CIDR ブロック (EC2
リストにも含まれている CIDR ブロックは除く) へのアウトバウンドトラフィックを許可するようにします。EC2
リストの IP アドレスは、EC2 インスタンスに割り当てることができます。
セキュリティグループにはクォータがあります。各リージョンの IP アドレス範囲の数によっては、リージョンごとに複数のセキュリティグループが必要になる場合があります。
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 ...
次の例では、1 つのリージョンに結果を限定するフィルターを適用する方法を示します。
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
-dd
Thh
: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 アドレス範囲の通知をサブスクライブするには
Amazon SNS コンソール(https://console.aws.amazon.com/sns/v3/home
)を開きます。 -
ナビゲーションバーで、必要に応じて、リージョンを [米国東部 (バージニア北部)] に変更します。サブスクライブする SNS 通知がこのリージョンで作成されているため、このリージョンを選択する必要があります。
-
ナビゲーションペインで [Subscriptions] を選択します。
-
[Create subscription] を選択します。
-
[Create subscription] ダイアログボックスで、次の操作を行います。
-
トピックの ARN には、以下の Amazon リソースネーム (ARN) をコピーします。
arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged
-
プロトコルには、使用するプロトコルを選択します (たとえば、
Email
)。 -
エンドポイントには、通知を受け取るエンドポイントを入力します (たとえば、E メールアドレス)。
-
[Create subscription] を選択します。
-
-
指定したエンドポイントに接続されて、登録を確認するように求められます。たとえば、E メールアドレスを指定した場合は、件名に
AWS Notification - Subscription Confirmation
と表示された E メールメッセージが届きます。指示に沿って操作し、登録を確認します。
通知はエンドポイントの可用性によって異なります。そのため、JSON ファイルを定期的に確認して、常に最新の範囲を入手した方がよいでしょう。Amazon SNS の信頼性について詳しくは、 を参照してくださいhttp://aws.amazon.com/sns/faqs/#Reliability
通知が不要になった場合は、次の手順で受信登録を解除します。
AWS の IP アドレス範囲の通知へのサブスクリプションを解除するには
-
Amazon SNS コンソール(https://console.aws.amazon.com/sns/v3/home
)を開きます。 -
ナビゲーションペインで [Subscriptions] (サブスクリプション) を選択します。
-
サブスクリプションのチェックボックスをオンにします。
-
[Actions]、[Delete subscriptions] の順に選択します。
-
確認を求めるメッセージが表示されたら、[削除] を選択します。
詳細については、Amazon SNS、Amazon Simple Notification Service Developer Guide を参照してください。
リリースノート
次の表では ip-ranges.json
の構文に対する更新について説明します。リージョンの開始ごとに、新しいリージョンコードが追加されています。
説明 | リリース日 |
---|---|
MEDIA_PACKAGE_V2 サービスコードが追加されました。 |
2023 年 5 月 9 日 |
CLOUDFRONT_ORIGIN_FACING サービスコードが追加されました。 |
2021 年 10 月 12 日 |
ROUTE53_RESOLVER サービスコードが追加されました。 |
2021 年 6 月 24 日 |
EBS サービスコードが追加されました。 |
2021 年 5 月 12 日 |
KINESIS_VIDEO_STREAMS サービスコードが追加されました。 |
2020 年 11 月 19 日 |
サービスコードとして CHIME_MEETINGS と CHIME_VOICECONNECTOR を追加しました。 |
2020 年 6 月 19 日 |
AMAZON_APPFLOW サービスコードが追加されました。 |
2020 年 6 月 9 日 |
ネットワーク境界グループのサポートを追加します。 | 2020 年 4 月 7 日 |
WORKSPACES_GATEWAYS サービスコードが追加されました。 |
2020 年 3 月 30 日 |
ROUTE53_HEALTHCHECK_PUBLISHING サービスコードが追加されました。 |
2020 年 1 月 30 日 |
API_GATEWAY サービスコードが追加されました。 |
2019 年 9 月 26 日 |
EC2_INSTANCE_CONNECT サービスコードが追加されました。 |
2019 年 6 月 26 日 |
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 日 |
初回リリース | 2014 年 11 月 19 日 |
詳細
-
AMAZON_APPFLOW
– IP アドレス範囲 -
AMAZON_CONNECT
– ネットワークセットアップ -
CLOUDFRONT
– CloudFront エッジサーバーの場所と IP アドレス範囲 -
DYNAMODB
– IP アドレス範囲 -
EC2
– パブリック IPv4 アドレス -
EC2_INSTANCE_CONNECT
– EC2 Instance Connect セットアップ -
GLOBALACCELERATOR
– Global Accelerator エッジサーバーの場所と IP アドレス範囲 -
ROUTE53
– Amazon Route 53 サーバーの IP アドレス範囲 -
ROUTE53_HEALTHCHECKS
– Amazon Route 53 サーバーの IP アドレス範囲 -
ROUTE53_HEALTHCHECKS_PUBLISHING
– Amazon Route 53 サーバーの IP アドレス範囲 -
WORKSPACES_GATEWAYS
– PCoIP ゲートウェイサーバー