TT Lab
はじめる
学ぶ 学習パス コース

見知らぬシステムの前で

触る前に地図を描く

TT Labで続きを見る

目標

初めて見る顧客先のシステムで、何も触る前に地図を描きます。何を依頼するか、調査範囲がどこまでか、何が何に及ぶか、いつが安全か。そして、元に戻す方法を先に書きます。

環境

顧客先のシステム一式が/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  프로세스·메모리·열린 파일·최근 로그 네 가지가 시각과 함께 나오는지 봅니다

言うだけで何もしないスクリプトは落ちます。そして採点は、どんな場合でも、設定を元の状態に戻します。

ステップ

  1. 何があるかを書き、初日に同時に依頼することを一覧にします。承認プロセスはおおむね直列なので、初日にすべてを投げれば並列で進みます。
  2. ログの保存期間を探します。その値が調査範囲を決めます。
  3. アクセスログの送信元IPで上流をすべて探します。何件ずつかも調べます。
  4. 設定で下流を探し、何を変えるときに下流が危険になるかを書きます。
  5. 設定ファイル2つを比較して、共有状態を探します。
  6. crontabでバッチウィンドウを探し、安全なタイミングを決めます。
  7. plan.mdとrollback.sh: 変更計画書の最初の行は、変更内容ではなく、元に戻す方法です。元に戻すのにかかる時間と観察ウィンドウも書きます。
  8. 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つが、あとでレポートの半分になります。