どのトンネル名も、誰が所有しているかを尋ねるまでは台帳の一行に見える。名前が教えてくれるのは、いま何かが接続されているという事実だけだ。サービスが誰のものか、何に到達を許されているか、トンネルを生んだ構成が承認済みのものかは分からない。艦隊規模では、その三つの問いが台帳であり、トンネルは最新の観測にすぎない。

一つのサービス、三つの記録

意図したサービスとは、テナントが権利として持つものだ。すなわち ID、プレフィックス、リソース、そしてライフサイクルの状態である。配備された構成は、それを実現すべき生成されたポリシーだ。観測されたセッションは、何かが接続したという実行時の証拠である。これらを一つの表として扱うと、三種類の異なる真実が、同時に三通りに誤った一行へ押し込まれる。

RecordAnswersGoes stale when
Intended serviceWho may reach whatA contract changes and nobody edits the record
Deployed configurationWhat the gateway was toldA device is edited by hand
Observed sessionWhat is running nowTelemetry stops or a session ends

実務上の試験は、各記録が単独で答えられる問いだ。このプレフィックスは誰のものかと問えば、意図したサービスの記録が答える。ゲートウェイがどのポリシーを持つかと問えば、配備された記録が答える。今週誰かが使ったかと問えば、セッションの記録が答える。自分の問いに答えられない列こそ、最初に直すべき列だ。

記録するのはテナントであり、インターフェースではない

再接続を越えて残る識別子を各サービスに与える。一時的なトンネルインターフェースやセッション番号は、顧客とは無関係な理由で変わる。そのどちらかをキーにした台帳は、リンクが揺れるたびに新しい行を増やす。代わりにテナントとサービスをキーにし、そこへ観測を結びつける。

記録には、責任を持つテナントと運用者、受け入れたピアまたはユーザーの ID、資格情報そのものの写しではなく参照、保護されたプレフィックス、ルーティングの文脈、許可されたリソース、意図したライフサイクルの状態が必要だ。資格情報の素材は、対応済みのシークレットストアに置く。秘密鍵を抱えた台帳は、環境の二番目で、より保護の弱い複製になってしまう。

生成された構成には所有者とバージョンがある

自動化はこれを容易にし、同時に巧みに隠す。生成器が正常に走ったことは、テンプレートが描画された証明であって、すべての機器が出力と一致している証明ではない。インシデントの最中に誰かがゲートウェイを手で変える。その変更こそ記録すべき最も価値のあるもので、後のどの実行も再現しない唯一の変更だからだ。

配備されたポリシーを生んだリビジョンを記録し、直接の編集を、黙って上書きせず突き合わせるべき差分として残す。突き合わせこそがここでの成果物だ。生成器の成功と機器の実際の状態は比較すべき二つの事実であり、等しいと仮定してはならない。

セッションは証拠であり、認可ではない

配備が RADIUS 会計を使う場合、RFC 2866 は作業に使える具体的なフィールドを与える。Acct-Status-Type は開始と停止を区別し、同じセッションに属する記録は Acct-Session-Id を共有する。これらのフィールドがあれば、ダッシュボードの要約を信じずに、セッションがいつ始まり終わったかを再構成できる。

会計の識別子は実行時の証拠だ。どのテナントがサブネットを所有するかを定めるものではなく、何かへのアクセスを許すものでもない。ゲートウェイとサービスの ID に相関させ、収集時刻を観測の隣に保つ。報告の欠落は利用の不在ではなくテレメトリの故障かもしれず、古い記録はアクセスがいまも有効である証明にはならない。

廃止も同じ結合を使う

サービスを外すとは、意図したアクセス、資格情報、稼働中のセッションを、その順に、それぞれの所有者を通じて外すことだ。そのうえで、廃止した構成が機器から消え、許可されていた経路がもう解決されないことを確認する。前四半期に去った顧客が、トンネル名だけ消して経路を消していないためにプレフィックス一覧に残り続けてはならない。

このどれも、機能ごとに一台の機器や特定の自動化製品を要求しない。運用上の要件はもっと狭く、もっと難しい。顧客、その意図したアクセス、配備されたポリシー、現在の実行時の証拠が、誰かのトンネル名の記憶に頼らず結合できなければならない。まず三つの記録を作り、そのうえでそれらを維持する道具を選ぶ。

関連記事