ASAトンネルのリセット自動化:許可する前に三つの関門
ASAがピアのセキュリティアソシエーションを自ら消す前に、三つの関門を決める。障害はトンネルの内側にあり、範囲は一つのピアであり、再試行は止まる。
自動トンネルリセットは、予定された気まぐれではなく、影響範囲を伴う復旧動作と考えてほしい。目の前の判断は、ツールが示唆するより狭い。どの障害がそれを正当化するのか、どのピアに触れてよいのか、何がそれを止めるのか。この三つを誤れば、証拠を消す機械を作ったことになる。私は、これが一週間の大半にわたって十五分ごとに健全なピアへ発砲し続けたのを見たが、トンネルがそのたびに戻ってきたため誰も気づかなかった。
第一の関門:障害がトンネルの内側にあると証明する
何かを許可する前に、新しい状態を突き合わせる。show crypto ikev2 sa detailedはIKEv2アソシエーションが存在するか、交渉がどこまで進んだかを教え、show vpn-sessiondb detail l2lは同じピアに対応するセッション表示を与える。次にshow crypto ipsec sa peer 203.0.113.10が子SA、encapsとdecapsのカウンタ、使用中のセレクタを示す。encapsカウンタが増え続けdecapsカウンタが横ばいなのは、アソシエーションが全くないのとはまったく別の問題だ。
次に、再構築で直せないものを確認する。戻り経路の欠落、大きなパケットを吸い込むMTU、復号後にポートを拒否するポリシー、応答を装置の外へ回す非対称ルーティングである。これらのいずれかに対してSAを消すと、短い緑の点滅と明日同じチケットが残る。どれもアプリケーション側からは死んだトンネルに見える。だからこそアラートよりカウンタのほうが重要なのだ。
操作の前にスナップショットを取る。ピア、アソシエーション識別子、トリガの瞬間のカウンタ、それを発火させた証拠を記録する。スナップショットより先に走るリセットは、インシデントが持っていた最も有用なデータを破壊する。
第二の関門:範囲をピアに限る。世界には決して向けない
ASAのCLIでは、clear crypto ikev2 sa peer 203.0.113.10とclear crypto ipsec sa peer 203.0.113.10は対象を絞った操作である。ピア引数のない同じコマンドはコンテキスト内の全アソシエーションを消すため、綴りの違いでしかなく効果は全停止になる。Ciscoのクリアコマンドのリファレンスはこれらの形式と、カウンタをリセットするだけで何も修復しない統計専用の変種を区別している。マルチコンテキストモードではコマンドは現在のコンテキストにのみ作用するので、自動化は自分がどのコンテキストにいるかも確かめねばならない。
コマンドを組み立てる前にピアを検証する。空または未解決の変数は、全消去に崩れ落ちるのではなく、ジョブを大きな音で失敗させるべきであり、その検査はレビュー担当者が読めるコードに置く。
影響範囲を正直に描く。一つのピアは複数の保護ネットワーク、数千のセッション、管理用の第二トンネルを運びうるので、ピア単位の消去でもハブでは複数顧客の出来事だ。リセット対象のトンネルに依存しない管理経路から操作を実行する。そうでなければ自動化は自分の結果を検証できず、次の段階は現場へ車を走らせる人間になる。
第三の関門:再試行、クールダウン、定義された成功
ジョブにピアごとのロック、クールダウン期間、新しい観測から数える厳格な試行上限を与える。ロックがなければ、同じ瞬間に発火した二つの監視が再交渉の途中で同じピアを消し、それぞれが相手の失敗だと結論する。
成功とはアソシエーションが戻り、許可された作業が通ることだ。コマンドがエラーなく戻ったことではない。障害を検出したのと同じ検査で確かめ、次に子SAのカウンタが両方向に動くことを確認する。トンネルが落ちたままゼロで終わるコマンドは、復旧の衣を着た監視の失敗である。
不明を失敗から切り離しておく。テレメトリが古い、または管理経路に到達できないなら、正直な状態は不明であり、再試行の予算はそれを再度発砲する許可と読んではならない。
最初の承認済み復旧がサービスを戻さないときは、繰り返すのではなくスナップショットとともにエスカレーションする。定時リセットはこのパターンの最悪の形だ。鍵の再生成、経路、ポリシーの欠陥を隠しながら、健康なセッションをタイマーで切り落とす。
所有権、停止スイッチ、そして一度の訓練
所有者を定め、アプレットやスケジュールを一つの手順で無効にする方法を文書化し、見直し日を設ける。無効化の経路がない自動化は、作者がチームを移った日に恒久的なインフラになる。
ピア選択を故意に壊した状態で、実験室または保守時間帯に訓練する。これでジョブが安全側に失敗するか分かる。次に成功経路を訓練する。何かが壊れているときだけ動くジョブは、正常時の振る舞いを何も教えてくれない。