触る前に地図を描く
目標
初めて見る顧客先のシステムで、何も触る前に地図を描きます。何を依頼するか、調査範囲がどこまでか、何が何に及ぶか、いつが安全か。そして、元に戻す方法を先に書きます。
環境
顧客先のシステム一式が/opt/data/siteにあります。初めて見るシステムでも、顧客にとっては10年もののシステムで、その間に誰も記録していない依存が積み重なっています。コピーを取ってから、そのコピーで作業します。
cp -r /opt/data/site /root/site
cd /root/site
ls -R | head -40
受け取ったのはこれがすべてです。構成図もWikiもありません。
作るもの
inventory.txt 무엇이 있는지 + 첫날 요청할 것
retention.txt 로그 보존 기간과 그것이 조사에 뜻하는 것
upstream.txt 이 서비스를 부르는 쪽
downstream.txt 이 서비스가 부르는 쪽
shared.txt 구성도에 없는 공유 상태
timing.txt 언제가 안전하지 않은가
plan.md 변경 계획 — 첫 줄이 되돌리는 방법
rollback.sh 실제로 되돌리는 스크립트
snapshot.sh 재시작 전에 상태를 남기는 스크립트
採点方法
ステップ7とステップ8では、採点ツールが、書いたスクリプトを直接実行します。
rollback.sh 채점기가 설정을 일부러 바꾼 뒤 돌려서, 원본으로 돌아오는지 봅니다
snapshot.sh 프로세스·메모리·열린 파일·최근 로그 네 가지가 시각과 함께 나오는지 봅니다
言うだけで何もしないスクリプトは落ちます。そして採点は、どんな場合でも、設定を元の状態に戻します。
ステップ
- 何があるかを書き、初日に同時に依頼することを一覧にします。承認プロセスはおおむね直列なので、初日にすべてを投げれば並列で進みます。
- ログの保存期間を探します。その値が調査範囲を決めます。
- アクセスログの送信元IPで上流をすべて探します。何件ずつかも調べます。
- 設定で下流を探し、何を変えるときに下流が危険になるかを書きます。
- 設定ファイル2つを比較して、共有状態を探します。
- crontabでバッチウィンドウを探し、安全なタイミングを決めます。
plan.mdとrollback.sh: 変更計画書の最初の行は、変更内容ではなく、元に戻す方法です。元に戻すのにかかる時間と観察ウィンドウも書きます。snapshot.sh: 再起動の前に状態を残します。
参考
ステップ8の理由が、このラボで最も忘れられやすいことです。再起動は、症状を消すと同時に証拠も一緒に消します。再起動が必要であっても、その前にスナップショットを残しておけば、そのファイル1つが、あとでレポートの半分になります。
何があり、何を依頼するか
何があるかを書き、初日に同時に依頼することを一覧にします。承認プロセスはおおむね直列なので、初日にすべてを投げれば並列で進みます。
設定ファイルが何個あるかから見てください。そして初日に依頼する一覧です。承認プロセスはおおむね直列で、VPNが終わらないとアカウントが上がらず、アカウントが出ないと権限になりません。初日にすべてを同時に投げれば、並列で進みます。
保存期間が調査範囲を決める
ログの保存期間を探します。その値が調査範囲を決めます。
etc/logrotate.confに書かれています。ローテーションされたファイルの数とも合っているかを見てください。その値を超える報告が来たら、ログでは確認できません。
誰がこれを呼び出しているか
アクセスログの送信元IPで上流をすべて探します。何件ずつかも調べます。
アクセスログの送信元IPを数えてみてください。1つだけ見つけて終わりにしてはいけません。このサービスを止めたときに一緒に止まる場所が、影響範囲です。
これが何を呼び出しているか
設定で下流を探し、何を変えるときに下流が危険になるかを書きます。
設定のdownstreamを見てください。そして、何を変えるときに下流が危険になるかも書いてください。タイムアウトを延ばすと、私たちは余裕を与えたと思いますが、下流ではコネクションが長く保持されます。
構成図にない共有状態
設定ファイル2つを比較して、共有状態を探します。
設定ファイルは2つです。同じものを指している行があるかを見てください。共有状態は構成図にあまり描かれませんが、事故はここで起きます。
いつが安全でないか
crontabでバッチウィンドウを探し、安全なタイミングを決めます。
crontabを見てください。日次の締め・夜間レポート・月次精算が、それぞれいつか。技術的に安全でも、タイミングが間違っていれば事故です。
ロールバックを先に書く
plan.mdとrollback.sh: 変更計画書の最初の行は、変更内容ではなく、元に戻す方法です。元に戻すのにかかる時間と観察ウィンドウも書きます。
変更計画書の最初の行が、元に戻す方法です。元に戻すのにかかる時間と、観察ウィンドウ(何をどれだけ見るか)も書きます。採点ツールが設定をわざと変えてから、rollback.shを実行して、元に戻るかを確認します。
再起動の前に残す
snapshot.sh: 再起動の前に状態を残します。
再起動は、症状を消すと同時に証拠も一緒に消します。プロセス・メモリ・開いているファイル・最近のログの4つを、時刻とともに残してください。このファイル1つが、あとでレポートの半分になります。