FortiOSのREST APIは、GUIやCLIで行う操作をHTTP(S)経由で自動化できる仕組みです。
エンドポイントは大きく2種類に分かれます。
/api/v2/cmdb/firewall/address/api/v2/monitor/system/status、/api/v2/monitor/firewall/session*APIを利用するにはBearerトークン認証が標準です。
Authorization: Bearer <API_TOKEN>?access_token= は既定で無効化。set rest-api-key-url-query enable で再度許可可能(非推奨)。https://<FortiGate_IP>/api/v2/...?vdom=<name> を明示することが推奨。Authorization: Bearer <token> Content-Type: application/json
curl -k -H "Authorization: Bearer <API_TOKEN>" \
"https://<FGT>/api/v2/monitor/system/status?vdom=root"
curl -k -X POST \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"name":"HQ_LAN","subnet":"10.0.1.0 255.255.255.0"}' \
"https://<FGT>/api/v2/cmdb/firewall/address?vdom=root"
curl -k -X POST \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"name": "ALLOW-HQ-OUT",
"srcintf": [{"name":"port1"}],
"dstintf": [{"name":"port2"}],
"srcaddr": [{"name":"all"}],
"dstaddr": [{"name":"all"}],
"action": "accept",
"schedule": "always",
"service": [{"name":"ALL"}],
"nat": "enable"
}' \
"https://<FGT>/api/v2/cmdb/firewall/policy?vdom=root"
filter= パラメータで絞り込み可能。
例)名前が HQ_LAN のみ取得:
GET /api/v2/cmdb/firewall/address?filter=name==HQ_LAN&vdom=root
演算子例:==、!=、=@(部分一致)、!@、<、> など。
大量オブジェクト取得時は limit と offset を利用。
?limit=200&offset=0
次ページ:offset=200。
import requests
base = "https://<FGT>/api/v2"
token = "<API_TOKEN>"
vdom = "root"
headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
# システムステータス
r = requests.get(f"{base}/monitor/system/status", headers=headers, params={"vdom": vdom}, verify=False)
print(r.json())
# フィルタ+ページング例
params = {"vdom": vdom, "filter": "name==HQ_LAN", "limit": 200, "offset": 0}
r = requests.get(f"{base}/cmdb/firewall/address", headers=headers, params=params, verify=False)
print(r.json())
limit/offsetをクライアント側に組み込む。以上、FortiGateのREST APIについてでした。
最後までお読みいただき、ありがとうございました。