FortiGate の config を Excel 化|GPT-6 Astra の抽出精度

  • URLをコピーしました!
目次

はじめに

FortiGate の設定を運用担当者向けの Excel パラメータシートへ落とす作業は、手元に設定ファイルがあっても手間が残ります。GUI や CLI の出力を眺めながらセルへ転記し、ポリシーに書かれた Address 名や Service 名が実際にどの値を指しているのかを別の箇所と行き来して確認する必要があるためです。

以前、REST API と Python スクリプトで Excel を生成する仕組みを作成しました。今回は方向を変え、人間側で変換用スクリプトや Excel テンプレートを用意せず、show full-configuration の出力と業務依頼の文章だけを ChatGPT Work の GPT-6 Astra へ渡して、初版のパラメータシートをどこまで作れるかを試しています。

この記事でわかること
  • GPT-6 Astra が config から生成した Excel パラメータシート 24 シートの構成
  • 変換スクリプトも Excel テンプレートも用意せずに依頼したときの実際のプロンプト
  • 元 config と照合して確認できた抽出精度(並び順、入れ子展開、ポート表記、無効ポリシー)
  • 初回出力に残った操作性の改善余地と、人間側に残る確認作業
  • REST API と Python による定型生成との使い分けの考え方

結論から述べます。今回のレビュー範囲では、人間が変換スクリプトを用意しなくても、config の設定値を Excel へ転記し、オブジェクトの参照関係を末端まで展開するところまでは実用に耐える初版が得られました。対象範囲の説明、収録範囲の一覧、確認事項の整理も成果物側で生成されていました。一方で、そこに示された収録範囲が依頼と合っているかを確認する作業と、元 config との突き合わせは人間側に残ります。1 構成・1 回の初回出力を評価した結果であり、大規模構成や HA 環境での抽出精度を示すものではありません。

GPT-6 Astra が出力した Excel パラメータシートの中身

初回出力は 24 シート構成の .xlsx でした。シートは目的別に整理されており、一覧から詳細、参照関係、確認事項へたどれる構成になっています。

目的シート
読み方と収録範囲の説明00_利用ガイド、01_件数照合、23_収録範囲
設定値の一覧02_基本設定、03_管理者、04_IF基本、05_IF補足、06_DNS_NTP、07_DHCP、08_DHCP配布範囲、09_静的ルート
ファイアウォールオブジェクト10_IPv4アドレス、11_アドレスグループ、12_カスタムサービス、13_サービスグループ、14_スケジュール
ポリシー15_ポリシー条件、16_ポリシー動作
参照関係の追跡17_参照関係、18_グループ展開、19_ポリシー展開、20_参照状況
確認と原文の突き合わせ21_確認事項、22_全設定詳細

依頼では config の全文を渡しましたが、パラメータ化の対象は依頼文で指定した範囲だけです。23_収録範囲には入力ファイルの最上位 config ブロック 665 件がすべて列挙され、そのうち 18 件が対象、残りは対象外として設定値を省略した旨が記載されています。「config 全体をパラメータ化した」のではなく「全文を入力し、指定範囲に属する設定をパラメータ化した」という位置づけです。

01_件数照合には、原文の edit 数や setunset 数と、各シートの収録件数を突き合わせる表が置かれています。この表の判定列は Excel 側の数式で計算されており、参照範囲内の件数を数式で集計しています。ただし、件数が一致していることは値が正しいことを意味しません。値の正確さは、後述する元 config との照合で確認しています。

検証条件と実際に使った依頼文

検証は、REST API 版の記事と同じ検証用ラボで実施しました。入力は実機へリストアしたあとに採取した show full-configuration のマスク済みコピーです。

項目内容
機器FortiGate-VM64
FortiOS8.0.0 build 0167
検証環境VMware Workstation Pro 上の検証用 VM
入力show full-configuration のマスク済みコピー
入力規模42,989 行 / 1,390,589 バイト / 最上位 config ブロック 665 件
生成環境ChatGPT Work / GPT-6 Astra(新しい会話で実施)
入力方法テキストファイルの添付と依頼文
初回出力Excel 24 シート
実施回数1 構成・1 回の初回出力を評価
AI 側のコード・ツール使用許可
人間が事前に用意した変換コード・テンプレートなし

入力の行数は大きく見えますが、その大半は既定値と既定オブジェクトです。行数をそのまま設定の複雑さや本番環境の規模と読み替えないでください。実際に対象範囲へ含まれる設定命令は 3,620 件です。

入力に含まれるオブジェクトの件数

既定・既存分を含む入力全体の件数は次のとおりです。

対象件数
IPv4 アドレス25
アドレスグループ6
カスタムサービス94
サービスグループ6
スケジュール4
IPv4 ポリシー3
system interface7(うち物理ポート 2 本)
DHCP サーバー1
IPv4 静的ルート0

このうち検証用に追加した定義は 28 エントリです。抽出時に判断が分かれそうな形を意図的に混ぜています。

  • Address 12 件: サブネット、単一ホスト、IP 範囲、FQDN、未参照オブジェクト
  • Address Group 4 件: 入れ子を含む
  • Custom Service 6 件: TCP/UDP 併記、不連続ポート、ポート範囲
  • Service Group 2 件
  • スケジュール 1 件: 平日 09:00〜18:00
  • ポリシー 3 件: 拒否、NAT 付き許可、無効の許可設定。ID と並び順を異ならせています

静的ルートは 0 件のため、今回の結果からルートの転記精度は判断できません。

実際に使用したプロンプト

読者が再利用できるよう、実際に送った依頼文をそのまま掲載します。結果を見てから条件を追加したものではありません。

添付はFortiOS 8.0.0のFortiGateから取得したshow full-configurationです。この設定から、運用担当者が設定確認・引き継ぎに使えるExcelパラメータシート(.xlsx)を作成してください。

対象は、基本設定、インターフェース、DNS、NTP、DHCPサーバー、静的ルート、IPv4アドレス/アドレスグループ、カスタムサービス/サービスグループ、スケジュール、IPv4ファイアウォールポリシーです。

シート構成や列、書式は、実務で確認しやすいように設計してください。対象範囲のオブジェクトは既定・既存のものも含めて整理し、設定間の参照関係も確認できるようにしてください。

設定値は添付を根拠とし、設定から分からない稼働状態や設計意図は推測で補わないでください。省略した項目、読み取れなかった項目、確認が必要な事項があれば明示してください。[REDACTED]はマスク済みの値です。

コードやファイル作成ツールは使用して構いません。完成したExcelファイルと、作成範囲・注意点の短い説明を提供してください。

今回は独立した検証です。過去の会話・メモリ・他の資料を参照せず、この依頼文と添付ファイルだけを根拠に作成してください。

過去情報を参照しないという条件はプロンプト上の指示です。サービス側のメモリ機能などを技術的に無効化したことまで確認したものではありません。

入力ファイルは、パスワード、鍵、証明書などを [REDACTED] へ置き換えたコピーです。外部サービスへ config を渡す前提の検証では、この前処理を省略しないことをおすすめします。

手元の config で試すときの進め方

手順
config を採取する

対象機器の CLI から設定を出力します。コマンドの基本的な扱いは FortiOS 8.0.0 の Administration Guide にまとまっています(CLI basics)。

show full-configuration
手順
秘密情報をマスクする

パスワードハッシュ、事前共有鍵、証明書、シリアル番号など、外部へ出したくない値を置換します。今回はこの置換にもスクリプトを使用しました。

手順
対象範囲を明記して依頼する

どのセクションを Excel 化するかを列挙し、推測で補わないこと、省略した項目を明示することを依頼文へ含めます。範囲を書かずに依頼すると、対象内と対象外の境界が成果物から読み取れなくなります。

手順
元 config と突き合わせる

成果物に含まれる自己チェック表示だけで判断せず、元ファイルとの照合を別に行います。今回は初回 Excel の完成後、別の会話でスクリプトを使って突き合わせました。

元 config と照合して分かった抽出精度

初回 Excel の完成後、別の会話でスクリプトを使い、元 config と突き合わせました。Excel 自身が表示する「一致」という自己チェックの結果だけでは判断していません。

照合対象結果
入力ファイルExcel 記載の SHA-256 と一致
対象 18 セクションの全設定詳細setunset 3,620 命令すべて一致。欠落・重複なし
詳細の階層パス・命令原文・行番号一致
主要一覧の設定値1,538 セルを照合し、不一致なし
基本設定・管理者・DNS/NTP不一致なし
直接参照130 件の参照値と定義の有無が一致
グループ展開の経路40 件一致
ポリシー展開の経路21 件一致
収録範囲全 665 ブロックの一覧、位置、直下エントリ数、命令数を照合し一致

3,620 命令と 1,538 セルなどには、同じ設定を別の粒度で表した重複が含まれます。足し合わせて「独立した設定を 5,000 件以上検証した」とは言えません。以下では、判断が分かれそうな箇所を代表例として取り上げます。

ポリシーの並び順が保持されている

検証用のポリシーは、ID の昇順と評価順が一致しないよう、30、10、20 の順で並べています。FortiGate のポリシーは上から評価されるため、ID 順へ並べ替えられると読み手が評価順を誤ります。

config firewall policy
    edit 30
        set status enable
        set name "LAB_DENY_PARTNER"
        set action deny
    next
    edit 10
        set status enable
        set name "LAB_ALLOW_OUTBOUND"
        set action accept
    next
    edit 20
        set status disable
        set name "LAB_MAINT_RESERVED"
        set action accept
    next
end

15_ポリシー条件と 16_ポリシー動作には「元順」列が設けられ、1・2・3 に対して ID 30・10・20 が並んでいます。評価順が ID の昇順へ並べ替えられることはありませんでした。利用ガイドにも、Excel 上で並べ替えた場合は「元順」列で戻すという扱いが書かれています。

入れ子のアドレスグループが末端まで展開されている

ポリシー 30 と 10 が参照する LAB_G_USERS は、別のグループを内包する二段構成です。

config firewall addrgrp
    edit "LAB_G_CLIENTS"
        set member "LAB_HOST_CLIENT" "LAB_RANGE_CLIENTS"
    next
    edit "LAB_G_USERS"
        set member "LAB_G_CLIENTS" "LAB_HOST_ADMIN"
    next
end

18_グループ展開では、起点グループ、参照経路、末端名、末端定義が 1 行ずつ並びます。LAB_G_USERS については LAB_G_CLIENTS を経由する 2 行と直接メンバーの 1 行、あわせて 3 行が出力され、末端は LAB_HOST_CLIENTLAB_RANGE_CLIENTSLAB_HOST_ADMIN の 3 オブジェクトへ到達していました。末端定義の列には 192.168.10.10 255.255.255.255 のような実値と、IP 範囲の始点・終点が入ります。

なお、このシートの「解決」という判定は、オブジェクトの参照をたどって定義に到達できたという意味です。FQDN の名前解決に成功したという意味ではありません。

サービスのポート表記がまとめられていない

カスタムサービスは、見やすさを優先すると表記が変わりやすい箇所です。TCP と UDP の併記や、不連続なポートの扱いを確認しました。

config firewall service custom
    edit "LAB_S_DNS"
        set tcp-portrange 53
        set udp-portrange 53
    next
    edit "LAB_S_APP"
        set tcp-portrange 8443 9000-9002
    next
end

12_カスタムサービスと 18_グループ展開のいずれでも、LAB_S_DNS は TCP 53 と UDP 53 の両方を保持していました。LAB_S_APP8443 9000-9002 のままで、8443 から 9002 までの連続範囲へまとめられてはいませんでした。プロトコルの欠落や不連続ポートの誤った統合は、通信条件を誤って伝えるため、両方を確認しました。

無効ポリシーと未参照オブジェクトが区別されている

ポリシー 20 は set status disable の無効設定です。省略されず 15_ポリシー条件へ収録されており、20_参照状況では、そこからのみ参照されるオブジェクトが「無効ポリシーのみ参照」として分類されていました。LAB_G_SERVERSLAB_S_APPLAB_S_MAINTLAB_WEEKDAY などが該当します。

意図的に置いた未参照オブジェクト(LAB_HOST_UNUSEDLAB_FQDN_UNUSEDLAB_S_UNUSED など)は「対象内の参照なし」に分類されていました。運用上重要なのは、この表示を削除可能という判断へ短絡させていない点です。

参考: 初回出力 Excel「00_利用ガイド」
「参照状況は対象範囲の明示的な参照キーに限定。「対象内の参照なし」は未使用・削除可能を意味しない。対象外機能からの利用は未評価。」

出力されていない項目を既定値で埋めていない

設定資料でありがちな取り違えが、値が書かれていない状態と、値が空である状態の混同です。今回の出力では 3 つが区別されていました。

空文字

set で空の値が明記されている状態です。

unset

解除の命令が明記されている状態です。

記載なし

その階層に項目自体が出力されていない状態です。0 や disable を代入しません。

この区別が効いていたのが、拒否ポリシー 30 の NAT です。今回取得した full config では、拒否ポリシー 30 に set nat が出力されていなかったため、Excel 側でも「記載なし」となっており、disable で補われてはいませんでした。

参考: 初回出力 Excel「16_ポリシー動作」
「ID 30のnatは「記載なし」。denyからnat disableを推定しません。UTM無効でも記載されたプロファイル参照名を保持。」

階層の取り違えも起きていませんでした。DHCP サーバーは親設定が vci-match enable、その下の ip-range 側が vci-match disable という組み合わせですが、07_DHCP と 08_DHCP配布範囲で別の階層として記載されています。

あわせて、設定から確定できない値は 21_確認事項へ回されていました。DHCP で実際に取得したアドレス、実際のゲートウェイ、実効 DNS、NTP の同期状態、FQDN の解決結果、設計意図は、いずれも推測で作られていません。

実務で残った確認と改善余地

今回のレビュー範囲では重大な転記ミスは確認されませんでしたが、そのまま配布する完成物というより、調整の余地がある初版という位置づけです。以下はレビューで挙がった改善候補で、まだ反映していません。

  • 15_ポリシー条件には action がなく、16_ポリシー動作には status がありません。条件を見ながら許可・拒否や NAT まで判断するにはシート間の往復が必要です。条件側へ action と NAT を併記する改善が考えられます
  • 24 シートありますが、内部ハイパーリンクはありません。利用ガイドから主要シートへの導線があると、引き継ぎ資料として使いやすくなります
  • 01_件数照合の「管理者 = 42」は管理者の人数ではなく設定命令の数です。数え方の説明は同じ行にありますが、「管理者設定命令」といった見出しのほうが誤読しにくいと考えます
  • 参照展開は入力時点の固定スナップショットです。Excel 内の設定セルを書き換えても参照解析は自動更新されません

最後の点は成果物側にも明記されており、再計算されるのは 01_件数照合の数式だけで、参照解析と展開は添付時点の結果として固定されると説明されています。誤解を招きにくい設計ですが、シートを編集しながら使う運用では前提として共有しておく箇所です。

表示品質については未確認の範囲が残ります。レビューに使った環境には日本語フォントがなく、日本語を含むセルの実表示や文字切れの有無を確認できていません。Windows 版 Excel での表示と印刷は、配布前に実機で確認することをおすすめします。これは文字欠落があると判定したものではなく、確認が完了していないという意味です。

あわせて、この検証全体が前処理もレビューも不要だったわけではありません。検証用設定の準備、秘密情報のマスク、出力後の照合には、いずれも AI の支援やスクリプトを使っています。人間が変換スクリプトを用意せずに依頼できた、という範囲の結果です。

REST API 版との使い分け

以前作成した REST API と Python による Excel パラメータシートの自動生成は、同じ成果物を目指しながら性質が異なります。方式を選ぶときの軸を整理します。

今回(config を AI へ渡す)REST API 版
入力取得済みの設定ファイル機器への API アクセス
事前準備マスク処理と依頼文REST API 管理者、トークン、Trusted Hosts、実行環境
出力形式の固定性依頼ごとに構成が変わりうるスクリプトが定めた構成で固定
繰り返し利用同じ結果を再現する前提ではない同じ手順で再実行できる
確認が必要な範囲収録範囲が依頼と合っているかの確認と、元 config との照合取得対象、取得成否、参照解決、出力値の妥当性

今回が 24 シート、REST API 版が 21 シートですが、この数の差は性能の差ではありません。収録範囲も列構成も異なります。工数、速度、費用、正確性を同条件でそろえた直接比較は実施していません。

手元にすでに config があり、専用の変換スクリプトを用意せず、一度きりの資料化を試したい場面では今回の方式が向きます。定期的に同じ形式で出力し、差分を追いたい場面では REST API 版のほうが扱いやすいと考えます。

利用環境は ChatGPT Work の GPT-6 Astra です。モデルの料金やプラン別の提供範囲は『GPT-6 Astra の料金と提供範囲』にまとめているため、この記事では扱いません。今回の結果は、Work 上のツールやスキルを含む成果物への評価であり、モデル単体を切り離したベンチマークではありません。他モデルとの同条件比較も実施していないため、モデル間の優劣は判断できません。

まとめ

手元の config を一度だけ資料化したい場面では、AI へ渡して初版を作らせる方法は試す価値があります。今回の初回出力は、設定値の転記と参照関係の整理という点では良好でした。一方で、成果物に示された収録範囲が依頼と合っているかの確認と原文との照合、用途に応じた操作性の調整は残ります。

  • 人間が変換スクリプトを用意せずに得られた 24 シートの初版
  • 対象 18 セクション 3,620 命令の照合で確認できた不一致なしという結果
  • ポリシーの並び順、入れ子展開、ポート表記が変形されずに保持された点
  • 無効ポリシーと未参照オブジェクトを削除可能と断定しない扱い
  • シート間の往復と内部リンク不足という操作性の改善余地
  • 日本語表示と印刷の確認、および元 config との突き合わせという残る作業
  • 1 構成・1 回の結果であり、大規模構成や HA 環境での抽出精度は未検証

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

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次