迷惑メールを始めとする各種スパムや、コメント欄などへのいたずら投稿への対策作業を行っていると、「AWSからのアクセスをIPアドレスから判別してブロックしたい」などと思うことがあります。IPアドレスから逆引きすればそれらしきホスト名が返ることがありますが、場合によります。そこで、事前に各クラウドベンダーの使用するIPアドレス一覧を取得しておき、これをブラックリストとして使用します。
メールサーバーの場合はパブリッククラウドからのアクセスをすべて遮断などとするわけにはいきませんが、コメント欄や問い合わせフォームなどの人間がパソコンから利用することを想定した場所に限っては、パブリッククラウドからのアクセスをすべてスパムやそれに類するものとみなしても多くの場合問題ないでしょう。
また、Webサイトをクローラーで自動的に巡回してデータを収集する「スクレイピング」を防ぎたい場合にもこの方法はある程度有効です。
Azure
IPアドレス帯がJSONで公開されています。過去にはXML形式でも公開されていましたが、現在は終了しているようです。
なお、JSONファイルを直接ダウンロードできる固定のリンクが存在しないため、プログラムから自動的に取得したい場合は少し工夫が必要です。具体的には、下記リンクのページから「Download」ボタンを押した先のページを毎回取得し、そこからJSONファイルのURLを取り出す必要があります。RubyのNokogiriなどを使えば問題なく実現できるでしょう。
サービス タグの現在の一覧と IP アドレス範囲の詳細を含む JSON ファイルをダウンロードできます。 これらの一覧は、毎週更新されて公開されます。 各クラウドの場所は次のとおりです。
Azure Public
https://docs.microsoft.com/ja-jp/azure/virtual-network/service-tags-overview#discover-service-tags-by-using-downloadable-json-files
Azure US Government
Azure China
Azure Germany
AWS
同じくJSONで公開されています。更新はおそらく随時で、プッシュ通知のサービスもあるようです。
https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-ip-ranges.htmlhttps://ip-ranges.amazonaws.com/ip-ranges.json
GCP
同じくJSONで公開されています。
https://cloud.google.com/compute/docs/faq#find_ip_rangehttps://www.gstatic.com/ipranges/cloud.json
「_netblocks.google.com のSPFレコードを見る」「_cloud-netblocks.googleusercontent.com のTXTレコードを見る」といった解説を見かけますが、前者はGoogleのメールサーバーのIPアドレスの一部しか取れませんし、後者は下記の通り古い方法です。
重要: これまで、Google Cloud では、ユーザーに _cloud-netblocks.googleusercontent.com DNS TXT レコード(およびその参照先のレコード)を調べるようにお願いしていました。ご使用のスクリプトやソフトウェア ライブラリを更新して、cloud.json ファイルから読み取るようにしてください。この JSON ファイルには、これ以外にも、リージョンの外部 IP アドレスが接続されているリージョンなどの情報が含まれています。
https://cloud.google.com/compute/docs/faq#find_ip_range
Oracle Cloud
同じくJSONで公開されています。
https://docs.cloud.oracle.com/ja-jp/iaas/Content/General/Concepts/addressranges.htmhttps://docs.cloud.oracle.com/iaas/tools/public_ip_ranges.json
IBM Cloud
IBM Cloud の IP 範囲のページでIPアドレスが公開されています。
JSONやXMLなどではないので、プログラムから利用するにはスクレイピングが必要です。更新頻度も低そうなので、用途によっては手動でコピペということでも良いかも知れません。
Alibaba Cloud
IPアドレス帯を公開していません。