PAN-OS(Paloalto)のXML APIの叩き方

# ■ はじめに
Paloalto Networks社のFWは、HTTP(S)経由のAPIに対応しています。
レスポンスはXMLで返ってきます。簡単な例でAPIを叩いてみます。

# ■ 準備
リクエストには毎回認証用のパラメータであるkeyを付加する必要があります。
そのkeyを発行するために、まず以下のリクエストを出してレスポンスを確認します。
GETで投げられるので履歴に残らないようにご注意下さい。（後述しますがPOSTも可能です）

```
https://PA管理IPアドレス/api/?type=keygen&user=管理者ユーザ名&password=パスワード
```


そうすると、XML形式のレスポンスが返ってきて、そこにkeyが含まれているので、
この値を控えておきます。パスワードを変更しない限りkeyも変更されません。
（以下例のkeyは適当です）

```xml
<response status=“success”>
  <result>
   <key>93rfgdAGAa%fagwFGFADgfAgfadeDDYNa27Ab%aKLpPga=</key>
  </result>
</response>
```

# ■ APIを叩いてみる例
それでは実際に簡単な例として、ポリシー一覧を取得してみます。
クエリは以下の形式です。
```
https://PA管理IPアドレス/api/?type=op&cmd=<show><running><security-policy></security-policy></running></show>&key=発行したkey
```

結果例です。

```xml
<response cmd="status" status="success">
<result>
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  any/any/any/any;
        action allow;
        terminal yes;
}

rule2 {
        from trust;
        source any;
        source-region none;
        to untrust;
        destination any;
        destination-region none;
        user any;
        category any;
        application/service  any/any/any/any;
        action deny;
        terminal no;
}
dynamic url: no
pol objs matched
</result>
</response>
```

# ■ 便利なAPIブラウザ
「他にAPIでどんなことできるかな？どう叩けばよいかな？」というときは
機器に入っているAPIブラウザが便利です。以下のURLで確認できます。
```
https://{PA管理IPアドレス}/php/rest/browse.php
```
こんな画面になります。
![Image2.png](https://qiita-image-store.s3.amazonaws.com/0/124069/9a4a8e1c-185d-5d4f-cdb0-1f401c81be2f.png)

ここから、たとえばルーティングテーブルを確認したい場合は
「API  > 操作コマンド > show > routing > route」
と辿って行くと、
```
https://{PA管理IPアドレス}/api/?type=op&cmd=<show><routing><route></route></routing></show>
```
というクエリを叩けばいいことが分かります。
![Image3.png](https://qiita-image-store.s3.amazonaws.com/0/124069/f8ae2d63-9e56-a275-1bbd-694dcd8e70e9.png)

実際にはkeyも付加してあげて試してみると、こんな感じになります。

```xml
<response status="success">
  <result>
    <flags>
      flags: A:active, ?:loose, C:connect, H:host, S:static, ~:internal, R:rip, O:ospf, B:bgp, Oi:ospf intra-area, Oo:ospf inter-area, O1:ospf ext-type-1, O2:ospf ext-type-2
    </flags>
    <entry>
      <virtual-router>default</virtual-router>
      <destination>0.0.0.0/0</destination>
      <nexthop>192.168.0.1</nexthop>
      <metric>10</metric>
      <flags>A S</flags>
      <age/>
      <interface>ethernet1/4</interface>
    </entry>
    <entry>
      <virtual-router>default</virtual-router>
      <destination>192.168.0.0/24</destination>
      <nexthop>192.168.0.10</nexthop>
      <metric>0</metric>
      <flags>A C</flags>
      <age/>
      <interface>ethernet1/4</interface>
    </entry>
    <entry>
      <virtual-router>default</virtual-router>
      <destination>192.168.0.10/32</destination>
      <nexthop>0.0.0.0</nexthop>
      <metric>0</metric>
      <flags>A H</flags>
      <age/>
      <interface/>
    </entry>
  </result>
</response>
```

# ■ 補足
今回は簡便さを優先してGETにしていますが、POSTも可能です。
また、情報の取得だけでなく、設定等も可能です。

# ■ 参考資料
[PAN‐OS REST API による レポート情報の取得]
(https://live.paloaltonetworks.com/twzvq79624/attachments/twzvq79624/Management-TKB/860/1/PANOS-API-Report.pdf])
→日本語の資料。準備のkeyの発行やレポート情報の取得方法が書かれています。

[APIリファレンス(ここではver6.1)](https://www.paloaltonetworks.com/content/dam/pan/en_US/assets/pdf/technical-documentation/pan-os-61/XML-API-6.1.pdf)
→情報の取得だけでなく設定する例も書かれていて、広く浅くの資料です。要チェックです。


アイディア次第でいろいろできそうではないでしょうか。
以上です。