MENU
「安心のセキュリティをお得な価格」でご提供!
Fortinet商品など
ENGAGE fotinet

FortiGateのREST APIについて

REST APIの概要

FortiOSのREST APIは、GUIやCLIで行う操作をHTTP(S)経由で自動化できる仕組みです。

エンドポイントは大きく2種類に分かれます。

  • CMDB系(Configuration):ファイアウォールポリシーやアドレスオブジェクトなどの設定をCRUD操作。
    例:/api/v2/cmdb/firewall/address
  • Monitor系(Monitoring/Action):状態取得や動作の実行。
    例:/api/v2/monitor/system/status/api/v2/monitor/firewall/session*
    ※Monitor系はバージョンや機種によって利用可能なサブパスが異なります。

認証とREST API Adminの作成

APIを利用するにはBearerトークン認証が標準です。

  • 手順(GUI)
    1. [System] → [Administrators] → [Create New] → [REST API Admin]
    2. プロファイル(権限)とTrusted Hostsを設定
    3. トークンを発行して保存
  • リクエスト例(ヘッダ方式) Authorization: Bearer <API_TOKEN>
  • FortiOS 7.4.5以降の注意点
    • URLの ?access_token= は既定で無効化。
    • Bearerヘッダ方式が必須。
    • 必要に応じて set rest-api-key-url-query enable で再度許可可能(非推奨)。

基本的なリクエスト

  • ベースURLhttps://<FortiGate_IP>/api/v2/...
  • VDOM指定?vdom=<name> を明示することが推奨。
  • 共通ヘッダAuthorization: Bearer <token> Content-Type: application/json

cURLによる操作例

システム状態の取得(Monitor)

curl -k -H "Authorization: Bearer <API_TOKEN>" \
  "https://<FGT>/api/v2/monitor/system/status?vdom=root"

アドレスオブジェクトの追加(CMDB)

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"

ポリシーの作成(CMDB)

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

演算子例:==!==@(部分一致)、!@<> など。

ページング

大量オブジェクト取得時は limitoffset を利用。

?limit=200&offset=0

次ページ:offset=200

Python実装例

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())

エラーと制限

  • 429 Too Many Requests:誤認証を繰り返すとAPI管理者がロックアウトされ、429が返ります。
  • 明示的なレート上限:FortiGateのREST APIには公開仕様としての一律レート制限は示されていません。ただし、高頻度アクセス時はバックオフ処理を実装してください。

運用上のベストプラクティス

  • 最小権限のAPIユーザー:読み取り専用や限定VDOM用に分ける。
  • Bearerヘッダを標準化:URLトークン方式は非推奨のまま。
  • トークン管理:定期ローテーションと安全な保管。
  • ページング実装limit/offsetをクライアント側に組み込む。
  • 証明書検証:本番環境では自己署名無効化。
  • ログ監査:API操作を監査ログに残す。

まとめ

  • FortiGate REST APIは 設定操作(CMDB系)状態確認(Monitor系) に分かれる。
  • 認証はBearerトークン方式が必須(7.4.5以降は特に注意)
  • filter / limit / offset を活用して効率的にデータ取得。
  • レート制限は明示されていないが、ロックアウトや429に備えてリトライ制御を実装することが望ましい。

以上、FortiGateのREST APIについてでした。

最後までお読みいただき、ありがとうございました。

カテゴリ一覧

ページトップへ