doridoridoriand’s diary

主に技術的なことを書いていく予定(たぶん)

クラウドベンダーのIPアドレス範囲の調べ方

小ネタです。クラウドベンダーがIPアドレスをどのくらい保有しているのか気になって調査したことがあったので、記事に起こしてみました。

今回調べたクラウドベンダー

今回はIPv4のみ調査しました。IPv6を含めると マンドクセ 膨大になりすぎて後述するスクリプトの計算が終わらないので。

AWS

AWSでは保有しているIPアドレスのCIDRブロックをAPIとして 公開 しています。 ページに記載されているCIDRブロックを計算すればIPアドレス保有数がわかります。 以下のようなコードを書いて個数を調べてみました

※計算時間短縮のため、並列演算をしています。実行するとCPUを使い切る挙動になるのでご注意ください。

試しに実行したところ、

$ ruby show_number_of_aws_ip_address.rb
I, [2019-09-28T20:25:00.222308 #61863]  INFO -- : Start to parse IP Address ranges of AWS.
I, [2019-09-28T20:25:00.786106 #61863]  INFO -- : Number of CIDR blocks: 1818
I, [2019-09-28T20:34:05.882460 #61863]  INFO -- : Completed to calculate number of IP addresses. Number of IP address of AWS: 93482928

9300万個所有しているようです。多いですね。

GCP

GCPではspfレコードに所有しているIPアドレス一覧を 記載 しています。 シェルで試しに引っ張ってきてみました。

$ netBlockAddr=(`dig -t txt _spf.google.com +short | tr ':' '\n' | grep net | tr ' ' '\n' | grep net`); for i in ${netBlockAddr[@]}; do dig -t txt $i +short; done | tr ' ' '\n' | grep ip4 | tr ':' '\n' | grep -v ip4;
35.190.247.0/24
64.233.160.0/19
66.102.0.0/20
66.249.80.0/20
72.14.192.0/18
74.125.0.0/16
108.177.8.0/21
173.194.0.0/16
209.85.128.0/17
216.58.192.0/19
216.239.32.0/19
172.217.0.0/19
172.217.32.0/20
172.217.128.0/19
172.217.160.0/20
172.217.192.0/19
108.177.96.0/19
35.191.0.0/16
130.211.0.0/22

※shell力がうんこなので、どなたかもっと良い書き方あったら教えて下さい(切実)

AWSの時と同様にスクリプトを書いてみました。

$ ruby show_number_of_gcp_ip_address.rb
I, [2019-09-28T21:15:23.028779 #91774]  INFO -- : Start to parse IP Address ranges of GCP.
I, [2019-09-28T21:15:23.678997 #91774]  INFO -- : Number of CIDR blocks: 19
I, [2019-09-28T21:15:25.140817 #91774]  INFO -- : Completed to calculate number of IP addresses. Number of IP address of GCP: 322816

めちゃくちゃ少ない。。!
本当に合っているのか不安になる少なさですね。GoogleAppEngineに関してはこのリストに入ってない可能性もあるので、もうちょっと調べてみます(多分)

Azure

Azureでは、以前はXMLによるファイル提供での公開だったのですが、その手法が 廃止予定 になり、その代わりとして Service Tag DiscoveryAPI がプレビュー公開されています。今回はService Tag DiscoveryAPIを利用した方法で計算してみます。

以下のスクリプトで調査可能です。

$ ruby show_number_of_azure_json_ip_address.rb
I, [2019-09-28T21:27:09.594383 #96119]  INFO -- : Start to parse IP Address ranges of Azure.
I, [2019-09-28T21:27:10.568397 #96119]  INFO -- : Number of CIDR blocks: 17009
I, [2019-09-28T21:29:32.258446 #96119]  INFO -- : Completed to calculate number of IP addresses. Number of IP address of Azure: 30981085

特筆すべきはCIDRブロックの多さですね。比較的細かいアドレスレンジを大量に集めているようです。


クラウドベンダーのアドレスをブロックしたいニッチな要求(このご時世実施したらメリットよりデメリットのほうが大きいと思いますが)の時などに参考になればと思います。
IBM CloudやOracle Cloud Platformも、時間を見つけて追加していこうと思います。