Claude Code を安全に使おう勉強会 / Claude Code Security Basics
by
MasahiroKawahara
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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