Claude Codeをチームに配る前に:情シス審査の「本当に止まるの?」に、動く現物で答える

>100 Views

July 17, 26

スライド概要

Claude Codeをチームや全社に配るとき、稟議や情報システム部門の審査で必ず問われる「AIが本番を消したら、どうやって止めるのか」に、紙の規程ではなく動く現物で答えるための資料です。報告されている事故と同じ形のコマンドを自分の環境で流し、実行の手前で終了コード2で止まるところを、止まらなかった限界まで正直に見せます。permissions.denyの宣言とPreToolUseフックの二層。個人には無料のフック(cc-safe-setup, MIT)で足ります。組織で強制・監査する運用が要る人向けの配布物一式はこちら → https://yurukusa.booth.pm/items/8230188

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Claude Code を チームに配る前に 情シスの審査に出す1枚 「本当に止まるの?」に、動く現物で答える 紙の規程ではなく、事故と同じ形のコマンドを自分の環境で流し、 実行の手前で止まるところを終了コードで見せる。 対象: Claude Code を小さなチームに配りたい技術リード・情報システム担当 自分の Claude Code 環境での実測に基づく 1 / 11

2.

最初に浴びる問い 「AIが本番のデータベースを消したら、 どうやって止めるんですか」 チームに Claude Code を配ろうとすると、たいていこの一言で止まる。 速さは欲しい。でも本番は壊されたくない。もっともな問いだ。 やっかいなのは、紙の規程で答えても通らないこと。「運用ルールで禁止する」「レビューを徹底する」は約束であって、 止まる仕組みではない。決裁する側もそれを知っている。約束は疲れた夜に破れる。 Claude Code チーム安全導入パック 2 / 11

3.

なぜ「各自で気をつける」では守れないのか 組織のリスクは平均で決まらない。いちばん無防備な一人で決まる。 19人が丁寧に設定しても、20人目が何もしなければ、AIは同じリポジトリと同じ認証情報の上を走る。 事故は、いちばん疲れている夜の、いちばん急いでいる人の手元で起きる。 だから、人の注意ではなく仕組みで止まってほしい。守りを二層で組んだ。両方とも、自分の環境で動かして確かめてい る。 Claude Code チーム安全導入パック 3 / 11

4.
[beta]
第一層

消えたら戻らない操作を、宣言で塞ぐ
チームに配る設定ファイル( settings.json )に、取り返しのつかない操作を拒否リストとして書く。配る全員の設定に同
じものが入る。
{ "permissions": {
"deny": [
"Bash(rm -rf:*)", "Bash(sudo rm:*)",
"Bash(git push --force:*)", "Bash(git reset --hard:*)",
"Bash(git clean -fd:*)", "Bash(npm publish:*)"
] } }
ただし、この拒否はコマンド文字列の前方一致で見ているだけ。同じ結果になる別の書き方はすり抜ける。だから第二層が要る。

Claude Code チーム安全導入パック

4 / 11

5.

第二層 実行の直前で止める。そして自分で流してみた 実行の直前で機械的に止めるフック(PreToolUse)を重ねる。中身は MIT ライセンスで公開しているもの(cc-safe-setup) で、第三者が中を読める。 「たぶん止まる」では稟議は通らない。だから、報告されている事故と同じ形のコマンドを、自分の環境で一つずつ流して みた。約束でなく結果で確かめたかった。 流したのは、フォルダごと消える形・本番テーブルを落とす形・鍵を漁って露出させる形・未 コミットの作業が消える形。 Claude Code チーム安全導入パック 5 / 11

6.

実測: 事故と同じ形を流したら、どれも実行の手前で終わった 流した「事故と同じ形」 コマンドの例 結果 移動の失敗の後に削除が続く mv … && rm -rf … 終了コード2で停止 書き方をずらした削除 rm -rf --backup=numbered … 終了コード2で停止 本番テーブルの削除 psql -c "DROP TABLE …" 終了コード2で停止 一語での本番全消し migrate:fresh / db:reset 終了コード2で停止 鍵の露出 env | grep token 終了コード2で停止 未コミットの作業が消える git checkout … 終了コード2で停止 コマンドは組み立てられるが、走る前に終わる。これが「約束します」と「止まります」の違いだった。挙動は検証時点のもので、フックの更新で変わり うる。 自分の Claude Code 環境での実測 6 / 11

7.

発見: 網は一枚でなく、重ねて初めて塞がる mv の失敗の後に続く rm -rf を止めたのは、 rm を見張るフックではなかった。 rm の見張りは「コマンドが rm で始まるか」を見るので、 mv … && rm -rf … のように途中に紛れた削除は素通り する。 これを捕まえたのは、複合コマンドを分解して「移動の後に削除が続く形」を専門に見るフックのほうだった。 終了コード2を返すと、その実行はキャンセルされる。分類器の判断や承認モード(自動承認か確認か)に関係なく、実行の一 つ手前の層で止まる。「自動承認にしていたら素通りするのでは」という懸念にも、この層は独立して効く。 Claude Code チーム安全導入パック 7 / 11

8.

止まらなかったものも、隠さずに書く ここで嘘をつくと、全部が嘘になる。だから限界も書く。 TRUNCATE TABLE は止まるのに、 TABLE を省いた素の TRUNCATE はすり抜けた。 文字列を見る最善努力の網であって、保証ではない。第一層の拒否リストも、書き方をずらせば抜ける形は残る。 決裁者へのいちばん誠実で、いちばん通りやすい答えは「絶対に事故は起きません」ではない。「致命的な操作は二層で実 行の手前で止まる。網に限界があることも把握していて、月次で塞ぎ続ける」——抜けを隠した完璧の主張より、抜けを見 せた運用のほうが、稟議では強い。 なお、ここでの挙動は検証時点のもので、フックやツールの更新で変わりうる。 Claude Code チーム安全導入パック 8 / 11

9.

決裁者への答え方 紙でなく、終了コードで答える 約束は破れる。止まる仕組みは、破ろうとしたコマンドの、実行の一つ手前で終わる。 ✓ 致命的な操作は二層で、実行の手前で止まる(宣言 + フック) ✓ 承認モードに依存しない(自動承認でも独立して効く) ✓ 網の限界を把握し、月次で穴を塞ぎ、全操作を記録する この1枚が、稟議・情シス審査の別紙になる 9 / 11

10.

先に言う。個人には、これは要らない 個人で使うなら 組織で強制・監査するなら 二層は無料で足りる。フック(cc-safe-setup)は MIT で公 有料の一式は、これを「一人の手元」から「組織の運用」 開。拒否リストも上の JSON を settings.json に貼るだ に変える束。 け。有料のものは要らない。 全員に同じ設定を配って強制する手順 github.com/yurukusa/cc-safe-setup CI で弱い設定を落とす仕組み 稟議にそのまま貼れる文例・月次の点検表 実際に起きた事故の実例(四系統: 削除・委譲・費用・停 止) 散らばった無料の部品でなく、配って・強制して・監査まで回す束 10 / 11

11.

配って・強制して・監査する立場の人へ Claude Code チーム安全導入パック チームに配る立場で、稟議やセキュリティレビューを通す必要があるなら、動く現物・デモ・稟議文例・月次 表・事故実例をここに束ねてある。 yurukusa.booth.pm/items/8230188 引用した事故はすべて公開の不具合報告から番号で辿れる実在のもの。誇張も作り話もしていない。個人なら無料のフックで足りる。要 るのは、組織で強制して監査する運用がいる人だけ。 自分の Claude Code 環境での実測に基づく 11 / 11