Slide 1

Slide 1 text

Claude Code を 安全に使おう勉強会 (※DevelopersIO向けに社内勉強会スライドをアレンジ済み) 川原征大(kawahara-masahiro) 2026-04-23 1

Slide 2

Slide 2 text

目次 イントロ Claude Code の仕組みを知る Claude Code を安全に使うには? 抑止する工夫 制限する工夫 隔離する工夫 その他いろいろ おわりに 参考 2

Slide 3

Slide 3 text

イントロ 勉強会の目的やアジェンダ、スコープについて話します。 3

Slide 4

Slide 4 text

勉強会の目的 Claude Code (に限らず、AIエージェント) はとても便利です。 しかしリ スクもあり、暴走もします。 この勉強会では、 Claude Codeが適切な範囲で適切に動けるような、 ガ ードレールの敷き方 を学びます。 4

Slide 5

Slide 5 text

アジェンダ 1. Claude Code の仕組みを知る 2. Claude Code を安全に使うには? 3. 抑止する工夫 4. 制限する工夫 5. 隔離する工夫 6. その他いろいろ 5

Slide 6

Slide 6 text

話すこと / 話さないこと 話すこと Claude Code の仕組みとセキュリティの考え方 settings.json の permissions / Hooks / サンドボックス 推奨設定のサンプル共有 話さないこと MCP / Skill など拡張機能のセキュリティ 周辺知識(GitHub / Terraform / コーディング等)のセキュリティ 詳細な settings.json の書き方 ガバナンス・コンプライアンス領域の話 推論の地理的制約、データ保持期間、監査要件など 6

Slide 7

Slide 7 text

Claude Code の仕組みを知る Claude Code の仕組み、特に agenticループとツールの話をします。 7

Slide 8

Slide 8 text

agenticループ agenticループは コンテキストの収集、アクションの実行、結果の検証 の 3つのフェーズで構成されます。 あなた自身もループの一部です。 出典: https://code.claude.com/docs/ja/how-claude-code-works 8

Slide 9

Slide 9 text

agenticループのコンポーネント agenticループは 推論するモデル と アクションを実行するツール によっ て駆動されます。 : コードを理解し、次に何をすべきか推論・判断する 具体例: sonnet , opus : モデルの判断に基づきファイル操作やコマンド実行などを実 際に行う 具体例: Read , Edit , Bash モデル ツール 9

Slide 10

Slide 10 text

参考: 組み込みツールができること カテゴリ Claude ができること ファイル 操作 ファイルの読み取り、コード編集、新規ファイル作成、名前 変更と再編成 検索 パターンでファイルを検索、正規表現でコンテンツを検索、 コードベースを探索 実行 シェルコマンド実行、サーバー起動、テスト実行、git 使用 ウェブ ウェブ検索、ドキュメント取得、エラーメッセージ検索 – 引用: (抜粋) Claude Code の仕組み - Claude Code Docs 10

Slide 11

Slide 11 text

ツールが agentic の肝 ツールが無かったらClaudeはテキスト応答しかできません。 ツールがあ ることでアクションを実行できます。 <ツール制御がセキュリティの肝!> 11

Slide 12

Slide 12 text

Claude Code を安全に使うには? セキュアな環境を作るには ツールの制御 が大事になってきます。 どのような制御アプローチがあるか、学びましょう。 12

Slide 13

Slide 13 text

以下3軸で考えてみました 抑止する : 危険なツールを実行させないように誘導する 制限する : 危険なツールを実行できないようにする 隔離する : 危険なツールを実行しても問題ない環境を作る 13

Slide 14

Slide 14 text

Claude Code で実現するには? 抑止する → CLAUDE.md 制限する → Permissions, Hooks 隔離する → サンドボックス, Dev Container (それぞれの話は後ろで説明します!) 14

Slide 15

Slide 15 text

クラウド事業本部なのでむりやりAWSに絡めます ※ 鵜呑みにしないでください 15

Slide 16

Slide 16 text

抑止する 16

Slide 17

Slide 17 text

制限する 17

Slide 18

Slide 18 text

隔離する 18

Slide 19

Slide 19 text

抑止する工夫 Claudeが危険なツール実行をしないように お願い する工夫を考えます。 19

Slide 20

Slide 20 text

CLAUDE.md CLAUDE.md を使って Claude に永続的な指示を与える方法を見ていきま す。 20

Slide 21

Slide 21 text

CLAUDE.md とは CLAUDE.md ファイルは、プロジェクト、個人的 なワークフロー、 または組織全体に対して Claude に 永続的な指示を与えるマークダウンファイル で す。 Claude は 各セッションの開始時にそれらを読 みます 。 – Claude があなたのプロジェクトを記憶する方法 - Claude Code Docs 21

Slide 22

Slide 22 text

CLAUDE.md を置く場所(スコープ) CLAUDE.md は配置する場所によってスコープが変わります。 スコープ 場所 共有対象 管理ポリシ ー OS のシステムディレクトリ 組織内のすべてのユーザ ー プロジェク ト指示 ./CLAUDE.md or ./.claude/CLAUDE.md ソース管理を通じたチー ムメンバー ユーザー指 示 ~/.claude/CLAUDE.md あなただけ(全プロジェ クト共通) – CLAUDE.md ファイルをどこに配置するかを選択する - Claude Code Docs 22

Slide 23

Slide 23 text

危険なツール実行をしないように "お願い" するサンプル CLAUDE.md に「やってほしくないこと」を書いておく例です。 ⚠ お守り程度と思いましょう CLAUDE.md はあくまで「お願い」です。Claude は読んで従おうとしますが、 厳 密な遵守の保証はありません。 次のセクション「制限する工夫」でツール実行そのものを制御しましょう。 # セキュリティ - .env, credentials 等の機密ファイルを読み取り・編集・コミットし - シークレットやAPIキーをコードにハードコードしないこと - rm -rf / や force push 等の破壊的コマンドを実行しないこと 23

Slide 24

Slide 24 text

その他の抑止手段 CLAUDE.md 以外にもいくつか工夫できるポイントがあります。 にもコンテキストファイルを置ける paths フィールドで特定ファイルにスコープしたルールを書ける 曖昧な指示を避ける 「認証失敗する、直して」→ 試行錯誤で操作範囲が広がりがち そもそも破壊的な操作は Claude に依頼しない terraform apply/destroy 、ディレクトリ削除 等 .claude/rules/ 24

Slide 25

Slide 25 text

制限する工夫 ツール実行そのものを 機械的に制御 する仕組みを学びます。 そのために、まずはツールのことを知りましょう。 25

Slide 26

Slide 26 text

ツールの種類 Claude Code は組み込みツールを通じてアクションを実行します。 主要 なツールは以下のとおりです。 ツール 説明 Bash シェルコマンドを実行する Read ファイルの内容を読み取る Edit 特定のファイルに対して対象を絞った編集を行う Write ファイルを作成または上書きする WebFetch 指定された URL からコンテンツを取得する … … – ツール リファレンス - Claude Code Docs 26

Slide 27

Slide 27 text

特に制御したいツール セキュリティの観点で特に制御したいのはこのあたりです。 Bash : シェルコマンドを何でも実行できてしまう Read : 機密ファイル( .env 等)を読まれてしまう Edit / Write : 更新されたくないファイルを変更できてしまう 27

Slide 28

Slide 28 text

settings.json で権限を制御する ツールの制御は settings.json の permission セクションに記載します。 28

Slide 29

Slide 29 text

settings.json とは Claude Code の動作を構成する設定ファイルです。 権限ルール、フック、サンドボックス、その他諸々の設定を定義します。 参考: settings#利用可能な設定 29

Slide 30

Slide 30 text

settings.json の置き場所(スコープ) settings.json は配置する場所でスコープが変わります。 スコープ 場所 共有対象 Managed OS のシステムレベル 組織内のすべてのユーザー User ~/.claude/settings.json あなただけ(全プロジェクト) Project .claude/settings.json チームメンバー Local .claude/settings.local.json あなただけ – 構成スコープ - Claude Code Docs 30

Slide 31

Slide 31 text

permissions セクションに権限ルールを記載する allow : 手動承認なしでツール使用を許可 ask : ツール使用のたびに確認を促す deny : ツール使用を拒否 { "permissions": { "allow": [ ... ], "ask": [ ... ], "deny": [ ... ] } } 31

Slide 32

Slide 32 text

Tips: 評価の順序 権限ルールは deny → ask → allow の順番で評価されます。 最初にマッチしたルールが優先されるため、 deny は常に最優先 です。 32

Slide 33

Slide 33 text

権限ルールの書き方 ルールは Tool または Tool(specifier) の形式で書きます。 ルール 効果 Bash すべての Bash コマンドをマッチ Bash(npm run *) npm run で始まるコマンドをマッチ Read(~/.zshrc) ~/.zshrc ファイル読み取りをマッチ Edit(/src/**/*.ts) /src/ 配下の TS ファイル編集をマ ッチ Read(//**/.env*) システム全体の .env* ファイル読み取りをマッチ – (読み込み推奨!) 権限ルール構文 - Claude Code Docs 33

Slide 34

Slide 34 text

推奨設定のサンプル ~/.claude/settings.json に置く例です。 完全なサンプルは こちら → { "permissions": { "deny": [ "Read(//**/.env*)", "Read(//**/credentials*)", "Edit(//**/.env*)", "Edit(//**/credentials*)", "Bash(rm *)", "Bash(git *)" ]}} Gist 34

Slide 35

Slide 35 text

⚠ Read(.env)のdeny は Bash(cat .env) を防げない ReadやEditの deny の影響範囲は、あくまで "そのツール内のみ" です。 Bash 経由のファイル/ネットワークアクセスも防ぐには、後述のサンドボックスや Hooks が有用です。 35

Slide 36

Slide 36 text

その他の制限手段: Hooks settings.json の deny ではカバーしきれない範囲もあります。 そういった範囲は Hooks (や その次のSandbox) で補いましょう。 36

Slide 37

Slide 37 text

Hooks とは Claude Code ライフサイクル内の特定ポイントで 自動実行される、 ユー ザー定義のシェルコマンド(など) です。 同じく settings.json に記載しま す。 観点 permissions (deny/allow) Hooks 方式 静的なパターンマッチ スクリプトによるチェック 柔軟性 ツールとパターンの組み合わせ 任意のロジックを実装可能 用途 基本的なアクセス制御 複雑な条件での判定 – Claude Code フック - Claude Code Docs 37

Slide 38

Slide 38 text

ライフサイクルイベントの例 イベント いつトリガーするか SessionStart セッション開始時 PreToolUse ツール呼び出しの直前 PostToolUse ツール呼び出しの成功後 Notification Claude がユーザーに通知を送信する時 ツール制御の文脈では PreToolUse をよく使います。 38

Slide 39

Slide 39 text

Hooks の活用例 具体的な書き方は を参照ください。 PreToolUse フックを使用する。 Bash コマンドの URL を検証し、許可されていないドメインをブロ ックするフックを実装します。 – 権限を設定する - Claude Code Docs Hooksリファレンス 39

Slide 40

Slide 40 text

隔離する工夫 影響範囲を限定する 仕組みを学びます。 40

Slide 41

Slide 41 text

サンドボックス Bash ツールのファイルシステムとネットワークを OS レベルで制限する 仕組みです。 41

Slide 42

Slide 42 text

サンドボックスとは サンドボックスのスコープは Bash ツールとその子プロセスのみ です。 Read, Edit, Write, WebFetch 等のほか組み込みツールは対象外です。 Claude Code は ネイティブサンドボックス機能 を 備えており、エージェント実行のためのより安全な 環境を提供しながら、継続的な許可プロンプトの必 要性を軽減します。 各 bash コマンドの実行許可を 求める代わりに、サンドボックス化により 事前に定 義された境界 が作成され、Claude Code はリスク を軽減しながらより自由に動作できます。 – サンドボックス - Claude Code Docs 42

Slide 43

Slide 43 text

何が嬉しい? permissions の deny パターンは コマンド文字列 のマッチです。 しかし、コマンドはいくらでも書き換えられます。 python -c "print(open('.env').read())" や less .env 、 my-custom-script .env な ど、いくらでも迂回できます。 サンドボックスは OSレベル でファイルアクセスとネットワーク接続を制 限するため、 コマンド名に関係なく、すべての子プロセスに同じ制約が適 用されます。 "deny": ["Bash(cat .env)", "Bash(curl example.com)"] 43

Slide 44

Slide 44 text

有効化の方法 settings.json に以下を記載します。 (もしくは /sandbox で有効化) ⚠ autoAllowBashIfSandboxed は最初は false にしたほうが良い autoAllowBashIfSandboxed はデフォルト true です。 この状態では Bash コマンド が自動承認されるため、 ファイルシステム・ネットワークの境界設定や permissions 設定が不十分なまま有効にすると危険です。 最初は false にして手動承認を残しておくのが安全です。 { "sandbox": { "enabled": true, "autoAllowBashIfSandboxed": false }} 44

Slide 45

Slide 45 text

境界の設定方法 出典: sandbox > filesystem, network に定義します。 詳しい書き方は を参照ください。いちサンプル → https://code.claude.com/docs/ja/settings 公式リフ ァレンス Gist 45

Slide 46

Slide 46 text

その他の隔離手段: Dev Container より強力な隔離が必要な場合は も選択肢です。 コンテナ内で Claude Code を実行し、ホストシステムから完全に分 離 ファイアウォールでネットワーク接続先をホワイトリスト制限 Anthropic が を提供しています Dev Container リファレンス実装 46

Slide 47

Slide 47 text

その他いろいろ 雑多なTipsや所感、メモを書いていきます。 あまり整理できていないところもあります。 47

Slide 48

Slide 48 text

Claude Code を起動する場所に注意する デフォルトの挙動として、Claude Code は 起動されたディレクトリ内の ファイルにアクセス できます。 したがって、起動する場所を絞ること が、そのままアクセス範囲を絞ることに繋がります。 ホームディレクトリや複数プロジェクト/コンテキストが混じったような デカいディレクトリでの起動は避けましょう 。 無関係なファイルまでア クセスされるリスクがあるためです。 参考: 作業ディレクトリ - Claude Code Docs 48

Slide 49

Slide 49 text

Permissions / Hooks / サンドボックス はどう使い分け る? Permissions とサンドボックスは補完関係であり両方使うべき です。 各ツールの基本的な制御 → Permissions Bash 実行のOSレベルでの封じ込め → サンドボックス Hooks は Permissions やサンドボックスでは制御が難しい、 高度な allow/deny 判断処理が必要な場合に使うと良いです。 49

Slide 50

Slide 50 text

サンドボックスを触り始めた雑感(メモレベル) permissions.deny の Bash(xx) では防ぎきれない、 ファイル読み書 き・NW経由の迂回を封じ込められるのは、かなり便利 デフォルトだと Bash 実行が承認無しになる。 怖いので、 autoAllowBashIfSandboxed:false を入れた デフォルトだとサンドボックス内での Bash 実行が失敗した時に、 承認を求めたうえでサンドボックス外で再実行しようとする allowUnsandboxedCommands:false を入れて、バイパスを止めた サンドボックス外で実行したいコマンドは excludedCommands に 明示的に書く運用が良さそう 最初は Bashの実行失敗 or NWアクセス承認/拒否確認が多発しが ち。 地道にチューニングしながら運用するのが現実的 50

Slide 51

Slide 51 text

たとえば aws コマンドを実行させると 169.254.169.254 (インスタン スメタデータ) や *.amazonaws.com への アクセス承認を都度求められ る。これらは network.allowedDomains で許可すると良い gh / terraform 等の Go製ツールはサンドボックス内から macOS の TLS 信頼サービスにアクセスできず失敗する enableWeakerNetworkIsolation:true で回避できるが、 ネットワー ク隔離が弱まる点はトレードオフ 51

Slide 52

Slide 52 text

パーミッションモードを使い分けよう – 引用: 利用可能なモード - Claude Code Docs 52

Slide 53

Slide 53 text

dangerously-skip-permissions は原則使わない --dangerously-skip-permissions フラグは --permission-mode bypassPermissions と同等です。 保護されたディレクトリへの書き込みを 除く、すべての権限プロンプトをスキップします。 強力な隔離環境で動か す場合を除き、 原則使わない ようにしましょう。 💡 Tips: バイパスモード自体をブロックできる settings.json に disableBypassPermissionsMode: "disable" を設定すると、そもそも バイパスモードに入れなくできます。 通常は組織ポリシーを強制する目的で に置かれます。 管理設定(managed-settings) 53

Slide 54

Slide 54 text

autoMode の雑感(メモレベル) autoMode は 分類器モデルがアクションの安全性を判断 し、許可な しで実行可否を決めるモード (現在は研究プレビュー) 少し触った感想: わりと承認無しに色々実行するので、ちょっと怖 い。 Permissions や Sandboxing の設定はちゃんと固めた上で使い たいと思った 未検証: autoMode.environment で信頼インフラを分類器に連携できる 未検証: 分類器組み込みのblock/allowルールをオーバーライドできる autoMode.allow / autoMode.soft_deny に追加ルールを定義する claude auto-mode defaults でデフォルトの完全なリストを取得 し、 それをベースに編集する (空リストから書き始めない) 54

Slide 55

Slide 55 text

出典: ブロックルールと allow ルールをオーバーライドする - Claude Code Docs 55

Slide 56

Slide 56 text

小ネタ: "🤖 Co-Authored-By" を消す キーを更新して、 git コミットとプルリクエストメッセージを カスタマイズできます。 以下、空にする設定です。 ※ includeCoAuthoredBy 設定は非推奨になっています。 attribution { "attribution": { "commit": "", "pr": "" }} 56

Slide 57

Slide 57 text

Claude Code の周辺環境も整えましょう シークレット管理ツール ( , 等) 認証情報を .env などに平文で置くのを避けます Claude Code に読み取られるリスク自体を無くしましょう .gitignore 機密情報は確実に ignore します。 誤ってコミット対象に含めて しまうリスクを下げましょう settings.local.json など個人設定も ignore 対象にします。 個 人設定の設定が他メンバーに混ざるのを防ぎます で機密情報のコミットを検出・ブロックします など… 1Password CLI aws-vault pre-commit gitleaks 57

Slide 58

Slide 58 text

有益なリソース 読み込みたい公式ドキュメント : 基本仕様や設定可能なキー一覧が分かる : 権限ルールの構文が分かる : サンドボックス機能を理解できる : 各モードの権限が分かる : 利用可能なツール一覧が分かる Claude Codeの設定 設定 > 権限 設定 > サンドボックス はじめに > パーミッションモード リファレンス > ツール 58

Slide 59

Slide 59 text

おわりに 以下、今回話したことです。 安全に Claude Code を使うには ツールの制御が肝 抑止 : CLAUDE.md でお願いする。ただしお守り程度と割り切る 制限 : permissions で deny/ask/allow を定義する。複雑な判定は Hooks で補う 隔離 : サンドボックスで Bash ツールを OS レベルで封じ込める。よ り強力な隔離は Dev Container も選択肢 周辺環境 (シークレット管理、 .gitignore 、pre-commit 等) も合わ せて整えよう 安全な Claude Code 環境を作りましょう! 59

Slide 60

Slide 60 text

参考 本資料作成にあたり、参考にしたリンクを記載します。 60

Slide 61

Slide 61 text

Claude Code 公式ドキュメント 基本情報 settings.json (権限/ツール/Hooks) サンドボックス, Dev Container Claude Code の仕組み Claude があなたのプロジェクトを記憶する方法 モデル構成 パーミッションモード Claude Code の設定 権限を設定する ツール リファレンス Hooksリファレンス サンドボックス Dev Container 61

Slide 62

Slide 62 text

関連リポジトリ・ツール anthropics/claude-code/.devcontainer - Dev Container リファレ ンス実装 1Password CLI 99designs/aws-vault pre-commit gitleaks/gitleaks 62