Help us understand the problem. What is going on with this article?

Excelの関数だけでPaloAltoのAPIをたたく

More than 3 years have passed since last update.

■ はじめに

みなさん、ネットワークの構築や運用の自動化はどのようなものをお使いでしょうか。
Ansibleなどのツールを利用したり、NAPALMなどのライブラリでコードを書いて動かしていたりしていらっしゃるかと思います。
でも「この現場だとツールの導入やコード書くこと自体がハードル高くて・・」
という方もいらっしゃるのではないでしょうか。

そこで、ケースは限られてしまいますが、お手元のExcel(2013以上)で、かつ、関数だけを使ってPAN-OS(Paloalto)のAPIを叩く例をご紹介します。マクロ、VBAは使いません。

■ PAN-OS(Paloalto)のAPIと Excelの WEBSERVICE関数

PAN-OS(Paloalto)のAPIはHTTPでリクエストすると、XMLでレスポンスが返ってきます。
一方、Excelには、GETのHTTPリクエストをする WEBSERVICE 関数、
XMLをXPATHでフィルタするFILTERXML関数が2013から導入されています。
これらの組み合わせを利用します。

なお、認証キーの発行方法などの準備は過去に投稿した PAN-OS(Paloalto)のXML APIの叩き方
を参照してください。

WEBSERVICE関数の使い方

書式:WEBSERVICE(URL)

引数にURLを指定すると、GETでコンテンツを取得します。この関数自体はレスポンスはXMLでなくても構いません。

FILTERXML関数の使い方

書式:FILTERXML(XML, XPath)
元データとなるXMLと、フィルタいしたいXPathを指定します。

■ 使用例:Excelによるポリシーチェック

Excelで指定した条件のパケットが、設定してあるポリシーのどれにマッチするか、
またはマッチしないかを確認してみることにします。新しい通信要件が発生したときに「ポリシーの追加する必要あるんだっけ?」を簡単に確認するようなケースを想定しています。
コマンドでいうとtest security-policy-matchです。

関数の組み合わせ方は以下の通りです。

=FILTERXML(WEBSERVICE(リクエスト文字列),"//response/result")

リクエスト文字列の書式は以下の通りです。

https://Paloalto管理IP/api/?type=op&cmd=<test><security-policy-match><source>送信元IPアドレス</source><destination>宛先IPアドレス</destination><protocol>プロトコル番号(TCPなら6)</protocol><destination-port>ポート番号</destination-port></security-policy-match></test>&key=APIキー

※httpsの場合、証明書のエラーがあると正常に結果が取得できません。

リクエスト文字列の例

https://192.168.1.254/api/?type=op&cmd=<test><security-policy-match><source>192.168.0.101</source><destination>2.2.2.2</destination><protocol>6</protocol><destination-port>80</destination-port></security-policy-match></test>&key=xxxdummyxxx

そして、指定した条件にマッチしたルールがあれば以下のような結果が返ってきます。

rule1 {
        from trust;
        source [ 192.168.0.101 192.168.0.102 192.168.0.103 ];
        source-region none;
        to untrust;
        destination any;
        destination-region none;
        user any;
        category any;
        application/service [ appcustom25/tcp/any/443 appcustom25/tcp/any/80 appcustom25/tcp/any/8080 ];
        action allow;
        terminal yes;
}

あとは、Excelのほうで料理してあげれば、こんな使い方ができます。
image.png

■さいごに

  • Excelの関数だけでGETのリクエストができる
  • XMLをXPathでフィルタする関数がある

の2点を抑えておくと、特別な環境がなくてもちょっとした自動化ができるケースもあるのではないでしょうか?

akira6592
Ansible / ネットワーク / 自動化
https://tekunabe.hatenablog.jp/
ap-com
エーピーコミュニケーションズは「エンジニアから時間を奪うものをなくす」ため、ITインフラ自動化のプロフェッショナルとして、クラウドも含めたインフラ自動化技術で顧客の課題を解決すると同時に、SI業務の課題を解決するプロダクト・サービスを提供するNeoSIer(ネオエスアイヤー)です。
https://www.ap-com.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away