という話

技術ブログにしたい

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帯だけ取れました!
あとは保存するなりなんなり