この記事は公開されてから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アドレスの調べ方についてご紹介いたしました。それぞれの実行環境によってお試しいただければと思います。誰かのお役に経てば幸いです。