PHPでEC2が使ってるIPアドレス帯を取得する
EC2の東京リージョンが使ってるIPを取得する必要があった時のメモ。
https://ip-ranges.amazonaws.com/ip-ranges.json
上記のURLでAWSが使ってるIPアドレス帯を取得できる。
$json = file_get_contents('https://ip-ranges.amazonaws.com/ip-ranges.json'); var_dump($json);
こんな感じで取得すると
string(41372) "{ "syncToken": "1429628708", "createDate": "2015-04-21-15-07-01", "prefixes": [ { "ip_prefix": "23.20.0.0/14", "region": "us-east-1", "service": "AMAZON" }, { "ip_prefix": "27.0.0.0/22", "region": "ap-northeast-1", "service": "AMAZON" }, { "ip_prefix": "43.250.192.0/24", "region": "ap-southeast-1", "service": "AMAZON" }, ......
こんな感じでいっぱい出てくる。
ただこれは海外とかも含めAWS全体のサービスで使ってるIPなので、東京リージョンのEC2だけ抜き出します
$json = file_get_contents('https://ip-ranges.amazonaws.com/ip-ranges.json'); $json = json_decode($json, true); $ec2_ips = array(); foreach ($json['prefixes'] as $line) { if ('EC2' === $line['service'] && 'ap-northeast-1' === $line['region']) { $ec2_ips[] = $line['ip_prefix']; } } var_dump($ec2_ips);
これを実行すると
array(17) { [0]=> string(14) "46.51.224.0/19" [1]=> string(12) "52.68.0.0/15" [2]=> string(12) "54.64.0.0/15" [3]=> string(12) "54.92.0.0/17" [4]=> string(12) "54.95.0.0/16" [5]=> string(13) "54.150.0.0/16" [6]=> string(13) "54.168.0.0/16" [7]=> string(13) "54.178.0.0/16" [8]=> string(13) "54.199.0.0/16" [9]=> string(13) "54.238.0.0/16" [10]=> string(13) "54.248.0.0/15" [11]=> string(13) "54.250.0.0/16" [12]=> string(12) "103.4.8.0/21" [13]=> string(15) "175.41.192.0/18" [14]=> string(14) "176.32.64.0/19" [15]=> string(13) "176.34.0.0/19" [16]=> string(14) "176.34.32.0/19" }
東京リージョンのEC2のIP帯だけ取れました!
あとは保存するなりなんなり