もりはやメモφ(・ω・ )

ITとか読書感想文とか

AzureのVMのパブリックIPを一括で取得するコマンド

AzureのVMのパブリックIPを一括で取得するコマンドが必要になったのでやりました。

背景:なぜそれが必要だったのか

AWSのGuardDutyで指定する信頼するIPへAzureのVMのIPも登録しておきたいと考えたためです。自分たちの管理するサーバからの通常アクセスがGuardDutyのFindingsに表示されるのは気持ちの良いものではありませんから、信頼するIPには全ての管理するオンプレ、クラウドのパブリックIPを登録しておきたいと考えました。

az vm list-ip-addresses

結論: 以下の az vm list-ip-addresses で取りたい情報は取れました。*1

$ az vm list-ip-addresses | jq .[].virtualMachine.network.publicIpAddresses | jq .[].ipAddress

参考:表示結果 *2

$ az vm list-ip-addresses | jq .[].virtualMachine.network.publicIpAddresses | jq .[].ipAddress
"203.0.113.1"
"203.0.113.2"
"203.0.113.3"
"203.0.113.4"

名前も一緒に欲しい場合はこちら

$ az vm list-ip-addresses | jq -r '.[].virtualMachine.network.publicIpAddresses[] | [.ipAddress , .name]|@csv'

az network public-ip list

調べる途中で、VMに限定せずにパブリックIPを取得する az network public-ip list も使えそうだと調べました。 手元の環境で az vm list-ip-addresses と差分をとったところ、VMの networkInterfaces に加えて以下のパブリックIPも表示されていることが確認できました。

  • virtualNetworkGateways
  • applicationGateways

上記以外にも az vm list-ip-addresses では表示されないパブリックIPが取得できるのでしょう。*3

$ az network public-ip list | jq .[].ipAddress

名前も一緒に欲しい場合はこちら

$ az network public-ip list | jq -r  '.[] | [.ipAddress, .name] | @csv'

*1:2回jq使っているのはダサいかもしれない

*2:IPはRFC 5735 Special Use IPv4 Addresses から利用

*3:今回の場合、AWSのサーバへアクセスが行われるIPのみ必要だったため、 az vm list-ip-addresses の方が適切でした