AWSの各サービスで使用されているIPアドレスを確認する方法 Windows/Linux/Python3

今回はAWSサービスで利用されているIPアドレスから該当のサービスのIPアドレスを抽出する方法をご紹介したいと思います。 AWSは以下のURLでAWSで利用されているIPレンジを公開しています。 https://ip-ranges.amazonaws.com/ip-ranges.json WindowsとLinux、PythonそれぞれでのIPレンジの利用方法を書いていきたいと思います。
2019.01.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ご機嫌いかがでしょうか、豊崎です。

今回はAWSの各サービスで利用されているIPアドレスから該当のサービスのIPアドレスを抽出する方法をご紹介したいと思います。

AWSは以下のURLでAWSで利用されているIPレンジを公開しています。 https://ip-ranges.amazonaws.com/ip-ranges.json

WindowsとLinux、PythonそれぞれでのIPレンジの利用方法を書いていきたいと思います。

Windows

Windowsでは「AWS Tools for Windows PowerShell」が利用できるように準備をしておきます。

### 日付
PS C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell> Get-AWSPublicIpAddressRange -OutputPublicationDate

2019年1月22日 18:51:18


### 特定のリージョンのみ
PS C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell> Get-AWSPublicIpAddressRange -Region ap-northeast-1

IpPrefix                      IpAddressFormat Region         Service
--------                      --------------- ------         -------
52.194.0.0/15                 Ipv4            ap-northeast-1 AMAZON
54.168.0.0/16                 Ipv4            ap-northeast-1 AMAZON
54.238.0.0/16                 Ipv4            ap-northeast-1 AMAZON
54.250.0.0/16                 Ipv4            ap-northeast-1 AMAZON
・
・
<省略>
・
・
2406:daff:4000::/40           Ipv6            ap-northeast-1 EC2
2400:6700:ff00::/64           Ipv6            ap-northeast-1 EC2
2406:da14::/36                Ipv6            ap-northeast-1 EC2
2406:da00:4000::/40           Ipv6            ap-northeast-1 EC2


### 特定のサービスのみ
PS C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell> Get-AWSPublicIpAddressRange -ServiceKey AMAZON_CONNECT

IpPrefix          IpAddressFormat Region         Service
--------          --------------- ------         -------
13.210.2.192/26   Ipv4            ap-southeast-2 AMAZON_CONNECT
13.236.8.0/25     Ipv4            ap-southeast-2 AMAZON_CONNECT
18.182.96.64/26   Ipv4            ap-northeast-1 AMAZON_CONNECT
18.184.2.128/25   Ipv4            eu-central-1   AMAZON_CONNECT
18.233.213.128/25 Ipv4            us-east-1      AMAZON_CONNECT
18.236.61.0/25    Ipv4            us-west-2      AMAZON_CONNECT
35.158.127.64/26  Ipv4            eu-central-1   AMAZON_CONNECT
52.55.191.224/27  Ipv4            us-east-1      AMAZON_CONNECT
54.190.198.32/28  Ipv4            us-west-2      AMAZON_CONNECT


### 特定のサービスのIPアドレスのみ取得
PS C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell> Get-AWSPublicIpAddressRange -ServiceKey AMAZON_CONNECT | select IpPrefix

IpPrefix
--------
13.210.2.192/26
13.236.8.0/25
18.182.96.64/26
18.184.2.128/25
18.233.213.128/25
18.236.61.0/25
35.158.127.64/26
52.55.191.224/27
54.190.198.32/28

Linux

Linuxでは「jq」を準備して、ip-ranges.jsonをローカル(今回はカレントに配置)に保存しておきます。

### 日付
$ jq .createDate < ip-ranges.json
"2019-01-22-18-51-18"

### 特定のリージョンのみ
$ jq '.prefixes[] | select(.region=="ap-northeast-1")' < ip-ranges.json
{
  "ip_prefix": "52.194.0.0/15",
  "region": "ap-northeast-1",
  "service": "AMAZON"
}
{
  "ip_prefix": "54.168.0.0/16",
  "region": "ap-northeast-1",
  "service": "AMAZON"
}
・
・
<省略>
・
・
{
  "ip_prefix": "3.112.64.0/23",
  "region": "ap-northeast-1",
  "service": "AMAZON"
}
{
  "ip_prefix": "18.182.96.64/26",
  "region": "ap-northeast-1",
  "service": "AMAZON_CONNECT"
}

### 特定のサービスのみ
$ jq -r '.prefixes[] | select(.service=="AMAZON_CONNECT")' < ip-ranges.json
{
  "ip_prefix": "13.210.2.192/26",
  "region": "ap-southeast-2",
  "service": "AMAZON_CONNECT"
}
{
  "ip_prefix": "13.236.8.0/25",
  "region": "ap-southeast-2",
  "service": "AMAZON_CONNECT"
}
{
  "ip_prefix": "18.182.96.64/26",
  "region": "ap-northeast-1",
  "service": "AMAZON_CONNECT"
}
{
  "ip_prefix": "18.184.2.128/25",
  "region": "eu-central-1",
  "service": "AMAZON_CONNECT"
}
{
  "ip_prefix": "18.233.213.128/25",
  "region": "us-east-1",
  "service": "AMAZON_CONNECT"
}
{
  "ip_prefix": "18.236.61.0/25",
  "region": "us-west-2",
  "service": "AMAZON_CONNECT"
}
{
  "ip_prefix": "35.158.127.64/26",
  "region": "eu-central-1",
  "service": "AMAZON_CONNECT"
}
{
  "ip_prefix": "52.55.191.224/27",
  "region": "us-east-1",
  "service": "AMAZON_CONNECT"
}
{
  "ip_prefix": "54.190.198.32/28",
  "region": "us-west-2",
  "service": "AMAZON_CONNECT"
}

### 特定のサービスのIPアドレスのみ取得
$ jq -r '.prefixes[] | select(.service=="AMAZON_CONNECT") | .ip_prefix' < ip-ranges.json
13.210.2.192/26
13.236.8.0/25
18.182.96.64/26
18.184.2.128/25
18.233.213.128/25
18.236.61.0/25
35.158.127.64/26
52.55.191.224/27
54.190.198.32/28

Python3

ちなみにPython(3.7.1で実行)だとこんな感じでしょうか

import urllib.request
import json

url = 'https://ip-ranges.amazonaws.com/ip-ranges.json'
req = urllib.request.Request(url)
with urllib.request.urlopen(req) as res:
  ipranges = json.load(res)

### 日付
print(ipranges['createDate'])
### 特定のリージョンのみ
for key in ipranges['prefixes']:
     if key['region'] == 'ap-northeast-1':
         print(key)

### 特定のサービスのみ
for key in ipranges['prefixes']:
     if key['service'] == 'AMAZON_CONNECT':
         print(key)

### 特定のサービスのIPアドレスのみ取得
for key in ipranges['prefixes']:
    if key['service'] == 'AMAZON_CONNECT':
        print(key['ip_prefix'])

さいごに

いかがでしたでしょうか。AWSで利用されているIPアドレスの調べ方についてご紹介いたしました。それぞれの実行環境によってお試しいただければと思います。誰かのお役に経てば幸いです。