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 の方が適切でした