無視されるVPNリスク報告書――書くべきはスコアではなく決定だ
発見は決定ではない。「VPNは安全でない」を、名前のある二つの選択肢、日付入りの証拠、一人の責任者に変えれば、誰かが承認も却下もできる。
深刻度のランキングで終わるリスクメモは、管理者に評決だけを与え、行動を何も与えない。だからこそ多くのメモは「承知しました」とだけ返ってくる。承認されるメモは共通の形を持つ:狭く検証可能な主張が一つ、価格つきの名前のある選択肢が二つ、期限までに答えるべき人物が一人。以下のすべては、知っていることを誇張せずにその形を作る話だ。
スコアは誰も尋ねなかった問いに答える
発生可能性×影響の算術は、所見を互いに並べ替える数値を生む。それは役員に何に署名すべきかを告げず、ゲートウェイについての決定ではなく乗数の議論を招く。二桁の小数の露出値が会議を丸ごと飲み込み、本当の問い――今四半期に更新へ予算を付けるか――が問われないままだったのを見たことがある。
この領域に本当の決定はいくつかしかない。更新に予算を付ける、宣言した日まで限られた露出を受け入れる、サービスに到達できる人を絞る。それぞれ責任者も費用も異なり、どれも「リスクを40パーセント減らす」ではない。
深刻度のインフレは問題を悪化させる。すべての所見が重大になると、ランキングは識別をやめ、読み手は残った唯一の信号、つまり誰が最も大声で不満を言ったかに戻る。リリースがサポート外であること、それがサポート外になって二四半期目であること、特定の職員グループがそれに依存していることを述べるメモは、赤いバッジよりはるかに実行可能だ。
曖昧さももう一つの失敗だ。「VPNは安全でない」は解決できない――どの配備か、どのバージョンか、誰が何に到達できるかが書かれていないからだ。読み手が検証できる一文が、有用な報告書の最小単位だ。
誰かが検証できるまで主張を小さくする
主張は意見ではなく公表された境界に固定する。ベンダーのサポート外、必須の認証手順の欠落、本来見えるべきでないネットワークセグメントからの到達可能性は、いずれも背後にテストがある主張だ。第一の場合、テストはゲートウェイ自体での三つのコマンドだ:
openvpn --version | head -n 1
dpkg-query -W -f='${Version}\n' openvpn
openssl x509 -in /etc/openvpn/server.crt -noout -enddate
バージョン行とパッケージ照会は通常一致し、一致しない場合は別途報告する価値のある第二の問題を見つけたことになる。証明書の有効期限は、クライアントが接続できなくなるまで確認を忘れられる項目であり、リリース文字列と同じ証拠添付に入るべきものだ。
各出力がどこから来て、いつ取得されたかを記録する。「ゲートウェイgw1、火曜日に収集」と書かれたメモは懐疑的な人が再実行できるが、興味ある行まで切り取ったスクリーンショットはできない。ファイルが自分のマシンを離れる前に、鍵、プライベートアドレス、アカウント名を削除する。
メモは名前のある選択肢の間の選択として書く
決定メモが短いのは、一つの仕事しかしないからだ:私が使う形はこれで、リモートアクセスのリリースがサポート外になった架空の中規模組織向けに埋めた。
Ask: approve one of two upgrade paths for remote access before 30 June.
Claim: gw1 runs a release that left vendor support in January.
Evidence: version output and vendor notice, attached, collected 14 March.
Option A: upgrade in place, one maintenance window, staff on the current client build.
Option B: replace the gateway, two windows, client reinstall for 180 staff.
Cost of waiting: no security fixes for a service 180 staff use daily.
Owner: platform team. Decision needed from: IT director, by 28 March.
どの行もその場所に値する。依頼は一文で日付を含む。主張は検証可能だ。選択肢Bが存在するのは、選択肢Aを形式ではなく選択にするためであり、人々が過小評価する費用だからクライアントの再インストールを名指しする。待つ費用は確率ではなく結果を述べる。
| Line in the note | What it prevents |
|---|---|
| Ask with a date | A reply of "agreed in principle" that funds nothing |
| Claim with a command behind it | A debate about whether the problem is real |
| Two options with different costs | A single proposal that can only be approved or refused |
| Named decision owner | A thread where everyone assumes someone else signed |
メモがしてはならないのは、支えられない結論をこっそり持ち込むことだ。侵害が示されていないなら一行でそう書くべきだ――後で誇張を見つけた読み手は、次の三つのメモも割り引くからだ。
リスクの受容に含めるべきもの
受容は決定の不在ではなく、沈黙でもない。答えがしばらく露出と共に生きることなら、メモには三つの追加が要る:終了日、誰かが実際に行う監視手順、そして日が来たときに問いを再び開く名前のある人物。
暫定的な統制にも同じ扱いが要る。サービスをより小さなグループに制限しても、制限がどこかで実施され誰かが名簿を維持しなければ露出は減らない。夜間のバッチ処理を静かに止めるブロックは統制ではなく、書類の整った障害だ。
変更の責任者と決定の責任者が別人なら分けておく。プラットフォームチームが実行し、役員が受け入れる。両方の名前をメモに書くことで最も多い停滞――よく準備された計画が、それを見たことのない人を待つこと――が消える。
送る前に配備に対してメモを検証する
ゲートウェイが複数ある組織では主張はすぐ古くなる。別のリリースについてのフォーラムのスレッドから、あるいは先月作り直されたホストからコピーした所見は会議で反論され、メモの残りも一緒に崩れる――メモが名指しするすべてのホストで証拠を再実行する。
for h in gw1 gw2; do
ssh "$h" 'openvpn --version | head -n 1; systemctl is-active openvpn@server'
done
二つのホストが食い違えば、メモは混在した構成の話になり、それは別の、たいていはより説得力のある所見だ。トラフィックを処理していると思っていたホストでサービスが停止しているなら、立ち止まり、メモがどこかへ行く前に棚卸しを直す。
それから出力を添付し、決定日を件名に入れ、議論するグループではなく「はい」と言える人物に送る。答えが「今ではない」として返ってきたら、「今」になる日付を尋ね、その日付をメモの次の版に書き込む。