blog

Claude Codeのセキュリティ対策と設定|個人・企業で今すぐやるべきチェックリスト【2026】

Claude Code セキュリティ完全ガイド|企業導入の設定・リスク管理のイメージ

Claude Codeのセキュリティ対策で、まず今日やることは3つです。①.envなどの秘密情報を、Readのdenyルールで読ませない。②知らないフォルダを安易に信頼せず、確認画面の「Yes」を押し続けない。③サンドボックスを有効にし、/sandboxで実際に動いているかまで確かめる。denyだけでは、Pythonなどのスクリプト経由の読み取りは止まりません(この端末で確認)。設定の書き方はチェックリストにまとめています。企業で使う場合は、権限ルールの設計と定期的な見直しを導入前に決めておくことが前提です。

Claude Codeは、Anthropicの生成AI「Claude(クロード)」が、手元のパソコンでファイルを読み書きし、コマンドを実行するツールです。できることが多いぶん、何を許すかは利用者が決める必要があります。この記事の「セキュリティ」は、2つの意味に分けて読めます。1つはClaude Codeに何を許すかの設定(権限・サンドボックス・送ったデータの扱い・企業での管理)、もう1つは書かれたコードの脆弱性を見つける公式機能「Claude Security」です。前者を中心に、Anthropic公式ドキュメントにもとづいて解説します(確認日は参考文献に記載)。

先に、この記事で使う言葉の言い換えです。

言葉意味
allow・ask・deny確認なしで許可する・毎回確認する・禁止する、の3種類のルール。判定は deny → ask → allow の順です
権限モードClaudeが確認なしで何をしてよいかの基準(Manual・auto など6種類)
サンドボックスシェルコマンドが触れるファイルと通信先を、OSの仕組みで絞った囲い
プロンプトインジェクションファイルやWebページに悪意のある文を紛れ込ませ、AIの指示を上書きしようとする手口
credentials(サンドボックスの設定)守りたい認証情報のファイルや環境変数を指定する設定

目次

Claude Codeのセキュリティの全体像:起きうること7つと、止める仕組み

先に、Claude Codeを使うときに起きうる問題と、それを止める公式の仕組みを一覧にします。どれも設定で大きく減らせますが、1つの仕組みですべてを防げるわけではありません。

起きうること止める主な仕組み
① 秘密情報(.env・APIキー・~/.ssh)を読まれ、会話に入るReadのdenyルール、サンドボックスの credentials 設定
② ファイルの削除や上書きなど、取り返しのつかない操作Manualモードの確認、askルール、denyルール
③ 外部への送信(curl・wget など)通信するコマンドは既定で自動承認しない、denyルール、サンドボックスの通信制限
④ 知らないリポジトリに仕込まれた設定や、プロンプトインジェクション信頼ダイアログ、非対話(-p)で動かすときの読み込み制限
⑤ 信頼できないMCPサーバー提供元の選別、.mcp.json のサーバーごとの承認、組織でのMCP管理
⑥ 書かれたコードに脆弱性が残る/security-review、security-guidance プラグイン、Claude Security
⑦ 送ったコードやプロンプトの保存・学習への利用プライバシー設定、契約の種類、計測(テレメトリ)の停止(保存期間は表)

実際に公開された脆弱性と、依存パッケージの乗っ取りの例は、後半の節にまとめています。

確認画面で「Yes」を押し続けると何が起きるか

Manualモードでは、Claude Codeはファイルの編集やコマンドの実行の前に確認を出します。ここで「Yes, and don’t ask again」を選ぶと、Bashコマンドとウェブ取得(WebFetch)のドメインについては、許可のルールがリポジトリの直下の .claude/settings.local.json に保存され、以後そのリポジトリのすべてのセッションで確認なしに通ります。ファイル編集の許可はファイルに保存されず、セッションの終わりまでです(公式 Configure permissions)。

つまり、確認を読まずに押し続けると、広い許可が気づかないうちに積み上がっていきます。後で紹介する /permissions で定期的に見直すのはこのためです。

もう1つ知っておきたいのが、起動時のモードです。v2.1.283以降、ターミナルとVS Codeでは「autoモード」が組み込みの開始モードで、別の分類器モデルが操作を確認し、危険と判断したものだけを止めます。すべて自分で確認したい場合はManualモードで起動します(公式 Permission modes、違いは後述の表)。

守りは3つの層で考える

  • 権限(パーミッション):Claude Code本体が、ツールの呼び出しごとに「許可・確認・拒否」を判定します。この判定はClaude Codeが行うもので、モデルが行うのではありません。プロンプトやCLAUDE.mdに書いた指示はClaudeが試みる動きを変えますが、Claude Codeが許可する範囲は変えません。
  • サンドボックス:Bashなどのシェルコマンドと、そこから起動したプログラムが触れるファイルと通信先を、OSの仕組みで制限します。
  • 環境の分離:dev container(開発用コンテナ)や仮想マシンの中でClaude Code全体を動かし、手元のパソコンから切り離します。

公式は、権限とサンドボックスを「互いを補う2つの層」と説明しています。プロンプトインジェクションでClaudeの判断がだまされても、サンドボックスの制限は残るためです。

権限の許可・確認・拒否を実際にどう決めるかは、Claude Code 権限設定で解説しています。

関連記事Claude Codeで学習させない設定は?

まずやるべきClaude Codeのセキュリティ設定チェックリスト(個人・チーム共通)

Claude Codeのセキュリティは、ほとんどが手元の設定で決まります。企業導入の検討に入る前に、個人でも今日から実施できる対策を、公式ドキュメント(Security・Permissions・Permission modes・Sandboxing)に沿って一覧にしました。

#やること具体的な方法
1起動時の権限モードを確かめるv2.1.283以降はautoモードが既定です。すべて自分で確認したいなら claude --permission-mode manual で起動するか、~/.claude/settings.json の permissions.defaultMode を "default"(Manualの設定値)にします。実行中は Shift+Tab で切り替えられます
2.envなど秘密情報のファイルを読ませないpermissions.deny に Read(./.env)・Read(./.env.*)・Read(./secrets/**) を書きます。ただし、Pythonなどのスクリプト経由の読み取りは止まりません(6番とあわせます)
3ホームフォルダの直下で起動しないプロジェクトのフォルダに移ってから起動します。ホームフォルダの直下では信頼が保存されず、毎回確認が出ます
4知らないリポジトリを安易に信頼しない初めてのフォルダでは信頼ダイアログが出ます。中身を確認してから「Yes」を選びます。非対話の -p ではこの確認が出ません
5通信や削除のコマンドを広く許可しないcurl・wget は既定では自動承認されません。Bash(curl *) のような広い許可は入れず、使わないならdenyに入れます
6Bashをサンドボックスで動かす/sandbox で有効にします。LinuxではbubblewrapとsocatがないとDependenciesタブに不足が出て、サンドボックスなしで動きます。~/.ssh などの認証情報は既定では読めるので、credentials で個別に拒否します。有効にしたら /sandbox で実際に動いているかを確かめ、動かないときに止めたいなら sandbox.failIfUnavailable を true にします
7MCPサーバーは信頼できる提供元だけにする自作か、信頼できる提供元のものを使います。プロジェクトの .mcp.json のサーバーは個別に承認が求められます
8「常に許可」したルールを見直す/permissions で、これまでに保存した許可ルールを確認・削除します。python3 * や node * のような広い許可は「今後確認しない」で保存しないでください
9変更をセキュリティの観点で確認する/security-review で現在のブランチの変更を確認します。作業中に自動で確認させるなら security-guidance プラグインを入れます
10学習への利用と保存期間を確認するFree・Pro・Maxは claude.aiのプライバシー設定でいつでも変更できます(Team・Enterprise・APIは商用規約)。保存期間は下の表で確認できます
11止めて確かめたい操作はaskにするパッケージの追加(Bash(npm install *) など)はaskルールに入れます。autoモードでも確認が出ます(実際の画面)

1・2・5番は、次の1つの設定ファイルにまとめて書けます(~/.claude/settings.json に書くと自分のすべてのプロジェクトに、プロジェクトの .claude/settings.json に書くとそのプロジェクトに効きます)。保存後、Claude Code内で /status を実行すると、設定ファイルが読み込まれたかを確認できます。

{
  "permissions": {
    "defaultMode": "default",
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Bash(curl *)",
      "Bash(wget *)"
    ],
    "ask": [
      "Bash(git push *)"
    ]
  }
}

この例では、秘密情報のファイルを読ませず、curl・wget を禁止し、git push の前には必ず確認を出します。対象は自分の環境に合わせて変えてください。

実際の画面:初めてのフォルダで出る確認

表の4番目(知らないリポジトリを安易に信頼しない)に当たる画面です。信頼ダイアログは、まだ信頼していないフォルダでClaude Codeを対話モードで起動したときに出ます。

Claude Codeを初めてのフォルダで起動すると出る確認画面。Accessing workspaceの下にフォルダの場所が表示され、「No, exit」と「Yes, I trust this folder」のどちらかを選ぶ(2026年10月13日・Claude Code 2.1.296で撮影)
初めてのフォルダで出る確認画面(2026年10月13日にこの記事のために撮影・Claude Code 2.1.296・Linux)。既定の選択は「No, exit」なので、中身を確認してから「Yes」を選びます。

このダイアログには、そのフォルダの設定ファイルが許可しようとしているルールや追加のフォルダが並びます。プロジェクトの .claude/settings.json にある permissions.allow のルールは、ここで信頼するまで使われません(denyとaskのルールは制限するだけなので、信頼の前から効きます)。

公式によると、ホームフォルダの直下でClaude Codeを起動した場合、この信頼は今回のセッションだけのものになり、ディスクに保存されないため、起動のたびに確認が出ます。設定でこれを保存することはできません。プロジェクトのサブフォルダで起動すれば、フォルダ(Gitのリポジトリならリポジトリの直下)ごとに信頼が保存されます。

Claude Security(脆弱性スキャン)とは:書かれたコードの脆弱性を見つける公式機能

「Claude Codeのセキュリティ」には、AIの操作の範囲を絞る設定(この後の節)とは別に、書かれたコードに潜む脆弱性を見つけるための公式機能もあります。2026年2月20日に「Claude Code Security」が、TeamプランとEnterpriseプランの利用者向けの限られた研究プレビューとして発表されました。既知のパターンに照らすのではなく、部品どうしの関係やデータの流れを読み取って脆弱性を探し、人が確認するための修正案(パッチ)を出します(出典:Anthropic公式発表)。

現在の公式製品ページ(Claude Security)では、名称が「Claude Security」になり、コードベースをスキャンして指摘を検証し直したうえで修正案を出し、修正は人が確認・承認してから適用する、と説明されています。提供形態は2つです。Claude.aiのアプリはClaude Enterprise向けのパブリックベータで、スキャンには Claude Mythos 5.1 が使われます(このモデルでのスキャンはアプリでのみ)。Claude Code用のプラグインは、すべてのClaude Codeの利用者向けにベータで提供されています。

Claude Codeで使えるセキュリティ確認の道具は5段階

公式ドキュメントは、脆弱性の確認を1つの道具に任せず、段階ごとに重ねる形を勧めています。どの段階で何を使うかを、公式の表に沿ってまとめます。

いつ道具確認する対象
作業中security-guidance プラグインClaudeが書いているコードの、よくある脆弱性(インジェクション、安全でないデシリアライズ、安全でないDOMの使い方など)。見つけたら同じセッションで直します
必要なときに1回/security-review現在のブランチの変更を1回だけ確認します
必要なときに深くClaude Security プラグインリポジトリ全体や差分を複数のエージェントで調べ、検証済みの指摘と修正案を出します
プルリクエストCode Review(Team・Enterprise)コードベース全体を踏まえた、正しさとセキュリティの確認
CI既存の静的解析・依存関係のスキャナー言語ごとのルール、サプライチェーン(依存パッケージ)の確認など

security-guidance プラグインは、ターミナルのClaude Codeで次のように入れます。入れた後は自動で動き、呼び出すコマンドはありません。Python 3.7以降が必要で、ターンの終わりやコミットのときの確認はGitのリポジトリの中でだけ動きます。

/plugin install security-guidance@claude-plugins-official

公式は、どの段階も「保証ではなく、後の確認の代わりにはならない」と注意しています。/security-review の使い方はClaude Codeのレビュー用コマンドの解説で詳しく説明しています。

権限(パーミッション)の仕組み:6つのモードと確認の出方

権限モードは6種類

権限モードは、Claudeが確認なしで何を実行できるかの基準を決めます(公式 Permission modes)。

モード確認なしで動くもの向いている場面
default(Manual)読み取りだけすべて自分で確認したいとき、機密を扱う作業
acceptEdits読み取り、ファイル編集、mkdir・touch・mv・cp などのよく使うファイル操作(作業フォルダ内)確認しながらコードを直していくとき
plan読み取り(autoモードが使えるときは、分類器が認めたコマンドも)変更する前にコードを調べるとき
autoすべて(裏で分類器が安全を確認)長い作業、確認の回数を減らしたいとき
dontAsk作業フォルダ内の読み取りと、事前に許可したツールだけ。確認が出るものは拒否締めつけたCIやスクリプト
bypassPermissionsすべて隔離したコンテナや仮想マシンの中だけ

denyルールは、bypassPermissions を含むすべてのモードで効きます。また、設定ファイルなどの「保護されたパス」への書き込みは、bypassPermissions など一部の場合を除いて自動承認されません。組織では、bypassPermissions を使えないように管理設定で止めることもできます(後述)。

ツールの種類ごとの確認と、「今後確認しない」の範囲

Manualモードでの確認の出方は、ツールの種類で決まります。

ツールの種類確認「Yes, and don’t ask again」の範囲
読み取り(ファイルの読み取り、Grep)作業フォルダと追加したフォルダの中なら不要—
Bashコマンド必要(ls・cat・git status など、組み込みの読み取りコマンドを除く)リポジトリとコマンドごとに保存
ファイルの編集・書き込み必要セッションの終わりまで
ウェブ取得・検索(WebFetch・WebSearch)必要(WebFetchは、公式があらかじめ許可したドキュメントのドメインを除く)WebFetchはリポジトリとドメインごと、WebSearchはリポジトリごとに保存

実際の画面:ファイルを作るときの確認

上の表の「ファイルの編集・書き込み」の行に当たる画面です。Claude Codeがファイルを作る前に、内容を見せて許可を求めます。

Manualモードでhello.txtの作成を頼んだときの確認画面。Create file hello.txtの内容が表示され、「Yes」「Yes, and switch to accept edits」「No」の3つから選ぶ(2026年10月13日撮影)
Manualモードでファイルの作成を頼むと、実行前にこの確認画面が出ます(2026年10月13日撮影)。「Yes」でこの1回だけ許可、「No」で拒否です。2番目を選ぶと、そのセッションではファイル編集の確認が省かれます。

Manualモードには、解析しきれないBashコマンド、どのルールにも当てはまらないコマンド、起動したフォルダの外へのファイル操作の前にも確認が出る守りがあります(公式 Security)。ただし最後の確認は画面上の境界なので、承認したBashコマンドは、自分のユーザーの権限が及ぶ場所ならどこにでも書けます。OSのレベルで止めたい場合はサンドボックスを使います。

権限ルールの書き方:allow・ask・denyと設定ファイルの置き場所

チェックリストの「.envを読ませない」「広すぎる許可を絞る」を実際に設定するには、権限ルールの書き方を知っておく必要があります。公式ドキュメント(Configure permissions)の要点をまとめます。

ルールは3種類。判定は deny → ask → allow の順

種類動き
allow指定したツールの使用を、確認なしで許可します
ask指定したツールを使おうとするたびに、確認を求めます
deny指定したツールの使用を禁止します

ルールは deny、ask、allow の順に評価され、最初に当てはまったものが結果になります。ルールの細かさは順番に影響しません。そのため、広いdenyルール(例:Bash(aws *))があると、より細かいallowルール(例:Bash(aws s3 ls))を書いても実行できません。allowでdenyの例外は作れないという点が、はまりやすいところです。

ルールの書式

書き方意味
Bash(または Bash(*))すべてのBashコマンドに当てはまります。denyに書くと、ツールそのものがClaudeから見えなくなります
Bash(npm run build)npm run build というコマンドに当てはまります
Bash(rm *)rm で始まるコマンドに当てはまります。denyに書くとツールは残り、当てはまる呼び出しだけが止まります
Read(./.env)現在のフォルダの .env の読み取りに当てはまります
Read(./secrets/**)secrets フォルダ以下の読み取りに当てはまります
WebFetch(domain:example.com)example.com への取得に当てはまります

読ませたくないファイルは Read の deny で指定する(.claudeignore は効かない)

公式ドキュメントは、ファイルやフォルダを読ませないようにするには Read のdenyルールを追加する、としています。プロジェクトに .claudeignore というファイルを置いても効果はなく、その内容は Read のdenyルールへ移すよう案内されています。

  • Read のdenyルールは、同じパスへの編集・書き込み(新規作成を含む)も止めます。ノートブックの編集(NotebookEdit)は対象外なので、どのツールにも変えさせたくないパスには Edit のdenyも足します。
  • Read・Edit のdenyルールが効くのは、Claudeの組み込みのファイル操作と、cat・head・tail・sed・tee などClaude Codeが認識できるBashのファイル操作、> file のようなリダイレクトまでです。
  • PythonやNodeのスクリプトが自分でファイルを開く場合のように、別のプログラムを経由した読み書きには効きません。そこまで止めたい場合は、OSのレベルで制限するサンドボックスを併用します。

実際の画面:denyルールで.envが読めなかったとき

settings.jsonのdenyルールでRead(./.env)を拒否した状態で.envの中身を尋ねた画面。Claude Codeは「権限設定でこのファイルへの読み取りが拒否されているため読めない」と答え、下部にmanual mode onと表示されている(2026年10月13日撮影)
上の設定例のうちRead(./.env)のdenyを入れた検証用フォルダで「.envの中身を教えてください」と頼んだ結果(2026年10月13日撮影)。Claude Codeは読めず、「権限設定で拒否されている」と答えました。下部のmanual mode onは、確認画面を出す起動方法(--permission-mode default)で撮ったためです。

危険なコマンドをdenyへ入れる:ただし書き方を変えられると止まらない

確認画面で「Yes」を押し続ける使い方になりやすい人ほど、通信や削除のコマンドは最初からdenyに入れておくと安全です。次は、通信のコマンドと削除のコマンドを止める例です(対象は環境に合わせて変えてください)。

{
  "permissions": {
    "deny": [
      "Bash(curl *)",
      "Bash(wget *)",
      "Bash(rm *)"
    ]
  }
}

公式の権限ドキュメント(Configure permissions の「What a Bash rule doesn’t match」)は、Bashのルールを「Claudeが書いたコマンドの文字列に一致させる仕組み」と説明し、denyやaskは、そのプログラムの周りの安全の境界ではないとしています。公式の表では、次の書き方は止まりません。

ルール止まる書き方止まらない書き方(公式の例)
Bash(curl *)curl https://example.com/usr/bin/curl https://example.com、sh -c 'curl https://example.com'
Bash(rm *)rm -rf build//bin/rm -rf build/、bash -c 'rm -rf build/'
Bash(git push *)git push origin maingit -C . push origin main、git -c push.default=current push origin main、git 'push' origin main

ルールの照合前に公式が自動で外す「ラッパー」は、timeout・time・nice・nohup・stdbuf・command・builtin・noglob と、フラグなしの xargs に限られます。direnv exec・devbox run・mise exec・npx・docker exec は外されないため、Bash(devbox run *) のような許可は、run の後ろに何が来ても一致します。

対策は3つを重ねます。いずれも公式が挙げている手段です。

  • 書き方の違いを足して塞ぐ:sh -c や絶対パスの形まで止めたいときは、Bash(bash -c *)・Bash(sh -c *) のように、その形をdenyへ追加します(公式のワイルドカードの書式に沿った例で、この記事では実機検証していません。書き方を変えられるとまた漏れるため、これだけでは境界になりません)。
  • コマンドの文字列に頼らない境界を使う:ファイルと通信の制限はサンドボックスで行います(次の節)。公式も「文字列に依存しない強制にはサンドボックスを使う」としています。
  • 実行前に自分のロジックで検査する:PreToolUseフックで、コマンドの全文を実行前に確かめます。

PreToolUseフックは、終了コード2で呼び出しを止めます。次は、rm -rf を含むBashコマンドを止めるフックの登録例です(書式は公式のhooksガイドの例に沿っています)。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-rm-rf.sh"
          }
        ]
      }
    ]
  }
}

止めるスクリプトは、公式の protect-files.sh(Edit・Write用)の書き方に沿って、Bash用に作れます。入力のJSONからコマンドを取り出し、条件に合えば標準エラー出力に理由を書いて終了コード2で終わります。理由はClaudeに渡るので、別のやり方を探してもらえます。次はその一例です(.claude/hooks/block-rm-rf.sh に保存し、chmod +x します)。

#!/bin/bash
INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

if echo "$COMMAND" | grep -q 'rm -rf'; then
  echo "Blocked: rm -rf is not allowed" >&2
  exit 2
fi

exit 0

権限設定の全体はClaude Codeの権限設定の解説で詳しく説明しています。

.envの秘密情報を、そもそもファイルに置かない:実行時にだけ渡す

Readのdenyは「読ませない」守りで、キーがファイルに平文で残る問題は解決しません。キーをファイルに置かず、コマンドを実行するときだけ環境変数として渡す方法があります。次は、各ツールの公式ドキュメントで確認できる使い方です(2026年10月20日確認)。

ツール仕組み公式ドキュメントの使い方
1Password CLI(op run).env には秘密そのものではなく op:// の参照を書く。コマンドを子プロセスで実行し、秘密は「そのプロセスの間だけ」環境変数として使える.env に AWS_ACCESS_KEY_ID="op://development/aws/Access Keys/access_key_id" のように書き、op run --env-file="./prod.env" -- aws で実行
Doppler(doppler run)Dopplerに保存した秘密を、実行するプロセスの環境変数として渡すdoppler run -- npm start
direnvフォルダに入る・出るときに .envrc を読み込み、環境変数を設定・解除する。新しい .envrc は承認するまで読まれないdirenv allow . で承認する。.envrc はbashのコードなので、平文のキーを直接書くと、ファイルに残る問題は変わらない

どの方法でも、渡した環境変数は実行するコマンドから読めます。そのため、本番の強い権限のキーではなく、権限を絞った開発用のキーを渡すのが基本です。あわせて、.env などのファイルはReadのdenyに入れたままにしておきます。1Password CLI・Doppler・direnvの導入は、それぞれの公式ドキュメントに従ってください。

秘密情報がコミットに紛れ込むのを防ぐ道具もあります。gitleaks は、パスワード・APIキー・トークンなどの秘密情報をGitのリポジトリから検出するツールです。公式のREADMEは、リポジトリの直下の .pre-commit-config.yaml に次のように書き、pre-commit install を実行する方法を示しています(rev はREADMEの例で、pre-commit autoupdate で更新します)。コミットの前に検査が走るため、.env を読ませない設定とは別の、もう1つの網になります。

repos:
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.24.2
    hooks:
      - id: gitleaks

設定ファイルの置き場所と優先順位

ファイル効く範囲使いどころ
~/.claude/settings.json自分のすべてのプロジェクト個人の基本設定(.envを読ませない、など)
.claude/settings.jsonそのプロジェクト(リポジトリに入れてチームで共有)チーム共通のルール
.claude/settings.local.jsonそのプロジェクトの自分だけ共有したくない個人用の調整。「今後確認しない」で保存された許可もここに入ります
管理設定(managed settings)組織全体管理者が配る、利用者側では上書きできない設定

どこか1か所でdenyされたツールは、ほかの場所の設定や起動時の引数で許可することはできません。たとえばユーザー設定で許可していても、プロジェクト設定でdenyしていればブロックされます(逆も同じです)。

設定した後は、/permissions で、どのルールがどの設定ファイルから読み込まれているかを一覧で確認できます(画面は下の「企業・チームで導入するときの設定方針」の節にあります)。

サンドボックスで、コマンドが触れる範囲をOSのレベルで絞る

サンドボックスは、Claudeが実行するシェルコマンドと、そこから起動したプログラムを、決められた範囲の中だけで動かす仕組みです。既定ではオフで、Claude Code内で /sandbox を実行するか、設定ファイルで sandbox.enabled を true にすると有効になります(公式 Sandboxing)。

有効にしたときに、コマンドが既定で届く範囲は次のとおりです。読み取りはパソコンのほぼ全体に届く点に注意が必要です。

対象既定の範囲変える設定
書き込み作業フォルダ、ユーザーごとの一時フォルダ、追加したフォルダ(保護されたパスは書き込み不可)filesystem.allowWrite・filesystem.denyWrite
読み取りパソコンのほぼ全体。~/.ssh や ~/.aws/credentials などの認証情報も含みますfilesystem.denyRead・credentials
通信直接は外へ出られず、手元のプロキシが許可したドメインと照合します(許可リストは最初は空)network.allowedDomains・network.deniedDomains
環境変数Claude Codeから引き継ぎます(中の秘密情報も含む)credentials・CLAUDE_CODE_SUBPROCESS_ENV_SCRUB

公式は「組み込みの認証情報の拒否リストは無く、指定したファイルと変数だけが制限される」と明記しています。SSHの鍵やクラウドの認証情報は、自分で credentials に書く必要があります。次は、認証情報を読ませず、決めたドメインにだけ通信させる設定の例です。

{
  "sandbox": {
    "enabled": true,
    "allowUnsandboxedCommands": false,
    "credentials": {
      "files": [
        { "path": "~/.ssh", "mode": "deny" },
        { "path": "~/.aws/credentials", "mode": "deny" }
      ],
      "envVars": [
        { "name": "GITHUB_TOKEN", "mode": "deny" }
      ]
    },
    "network": {
      "allowedDomains": ["github.com", "*.npmjs.org"]
    }
  }
}

allowUnsandboxedCommands を false にすると、サンドボックスの中で失敗したコマンドを、Claudeが外で実行し直す逃げ道(確認つきの再実行)を止められます。

サンドボックスの外で動くもの

サンドボックスが包むのはシェルコマンドだけです。次のものは外で動くため、それぞれ別の手当てが必要です。

  • Read・Edit・Write・WebFetch・WebSearch などの組み込みのツール:権限ルールに従います。denyRead ではReadツールは止まらず、allowedDomains ではWebFetchは制限されません。
  • フック(hooks)、手元で動くMCPサーバー、ステータスラインのコマンド、apiKeyHelper など:利用者と同じ権限で動きます。
  • 自分で ! から打ったコマンド、excludedCommands に入れたコマンド、サンドボックスの外での再実行を認めたコマンド。

動く環境は、macOS・Linux・WSL2です(LinuxとWSL2では bubblewrap と socat が必要)。Windowsのネイティブ環境ではサンドボックスが使えず、コマンドはサンドボックスなしで動くため、使うならWSL2の中でClaude Codeを動かします。必要なものが無くて起動できないときも、既定ではサンドボックスなしで動くので、止めたい場合は sandbox.failIfUnavailable を true にします。詳しい設定はClaude Codeのサンドボックスの解説で説明しています。

実際に試して分かったこと:.envのdenyとサンドボックスはどこまで効くか

ここまでの説明が実際の動きと合っているかを、この端末で確かめました。条件は次のとおりです。

  • 日時と環境:2026年10月16日、Linux(Ubuntu)、Claude Code v2.1.301
  • 検証用の空のフォルダを作り、.env には「TEST_TOKEN=test」という無害な1行だけを書きました(本物の秘密情報は使っていません)
  • プロジェクトの .claude/settings.json に、チェックリストの例と同じ Read(./.env)・Read(./.env.*) のdenyを書きました
  • 同じフォルダに、.env を開いて表示するだけのPythonスクリプト read_env.py(中身は print(open('.env').read()) の1行)を置きました
試したこと結果
Claudeに「.envの中身を教えて」と頼む(Readツール)読めませんでした(上の「denyルールで.envが読めなかったとき」の画面)
Bashで cat .env を実行させる確認画面も出ずに拒否されました。表示は「Permission to use Bash with command cat .env has been denied.」
python3 read_env.py を実行させる(サンドボックスなし)denyでは止まらず、実行の確認画面が出ました。「Yes」を選ぶと TEST_TOKEN=test が表示されました
同じことを、python3 の実行を許可した状態で非対話(-p)で行う確認なしで実行され、中身が表示されました
sandbox.enabled を true にする(socatが入っていない状態)サンドボックスは動かず、コマンドはサンドボックスなしで実行されました。対話の画面では警告が目立たず、/sandbox の画面で「socat: not installed」と分かりました
socatを用意してサンドボックスが動く状態で、同じスクリプトを実行するPermissionError: [Errno 13] Permission denied: '.env' で読めませんでした
サンドボックスが動く状態で、作業フォルダの外にある別のテスト用ファイルをPythonで読む読めました(既定では、読み取りは作業フォルダの外にも届きます)
そのファイルを sandbox.credentials の files に "mode": "deny" で書くPermissionError で読めなくなりました
autoモードで、askルール Bash(npm install *) を入れて npm install を頼む自動では通らず、確認画面が出ました(「No」を選び、インストールはしていません)

denyを入れても、Pythonスクリプト経由では読めた

Readのdenyルールは、Claudeの組み込みのファイル操作と、cat のようにClaude Codeが読み取りと認識できるコマンドには効きました。一方、.env を開くPythonスクリプトの実行は、denyでは止まりませんでした。止めていたのは、Manualモードの実行確認だけです。

Read(./.env)をdenyにした検証用フォルダで、.envを開くPythonスクリプト(python3 read_env.py)の実行を頼んだ画面。denyでは止まらず、Bashコマンドの実行確認(Do you want to proceed?)が出ている(Claude Code v2.1.301・2026年10月16日撮影)
Read(./.env) をdenyにしたまま、python3 read_env.py の実行を頼んだ画面(2026年10月16日撮影)。denyでは止まらず、通常のコマンドと同じ実行確認が出ました。2番目の「Yes, and don’t ask again for: python3 *」を選ぶと、以後は python3 で始まるコマンドが確認なしで通ります。
確認画面でYesを選んだ結果、Pythonスクリプト経由で.envの中身(TEST_TOKEN=test)が表示された画面(2026年10月16日撮影)
確認画面で「Yes」を選んだ結果。スクリプトを経由して .env の中身(検証用の TEST_TOKEN=test)が会話に表示されました。

これは公式ドキュメントの「別のプログラムを経由した読み書きには効かない」という説明どおりの動きです。確認画面の内容が python3 read_env.py だけなので、スクリプトの中身を知らなければ、.env を読むことに気づけません。確認画面で「今後確認しない」を選んで python3 * を許可していた場合は、確認なしで中身が会話に入ります(非対話の -p で実際にそうなりました)。

なお、同じ会話で先に cat .env が拒否されていたときは、Claudeが迂回を控えました。ただしこれはモデルのその場の判断で、設定による制限ではありません。新しい会話では、そのまま実行の確認が出ました。

サンドボックスは、必要なものが無いと動かないまま使えてしまう

サンドボックスを有効にする設定を入れても、Linuxで socat が入っていない状態では、サンドボックスは動きませんでした。非対話の実行では「Sandbox disabled: sandbox is enabled but dependencies are missing: socat not installed」「Commands will run WITHOUT sandboxing.」という警告が出ましたが、対話の画面ではそのまま普段どおりに使え、Pythonスクリプトは .env を読めました。

/sandboxのDependenciesタブ。bubblewrapはinstalled、socatはnot installedと表示されている(Linux・Claude Code v2.1.301・2026年10月16日撮影)
Claude Code内で /sandbox を開き、Dependenciesタブを選んだ画面(2026年10月16日撮影)。bubblewrapは入っていますが、socatが「not installed」です。この状態では、サンドボックスを有効にする設定を入れても、コマンドはサンドボックスなしで動きました。

socatを用意してサンドボックスが動く状態にすると、同じスクリプトは読み取りを拒否されました。公式の説明どおり、Readのdenyルールがサンドボックスの読み取り制限にも加わり、Pythonのような別のプログラムにもOSのレベルで効いたことになります。

サンドボックスが動く状態で同じPythonスクリプトを実行した画面。PermissionError: [Errno 13] Permission denied: '.env' で読み取りが拒否された(2026年10月16日撮影)
サンドボックスが動く状態で、同じ python3 read_env.py を実行した結果(2026年10月16日撮影)。PermissionError で .env を読めませんでした。

サンドボックスを使うなら、有効にした後に /sandbox のDependenciesタブで不足が無いかを確かめます。また、作業フォルダの外のファイルは credentials に書くまで読めたので、守りたい認証情報は1つずつ書き出します。

autoモードでも、askルールは確認画面を出した

autoモードでも、Bash(npm install *) のaskルールを入れておくと、npm install は自動では通らず、確認画面が出ました。上の「依存パッケージの乗っ取り」で紹介した設定は、autoモードで使う場合にも効きます。

autoモードでnpm installを頼んだ画面。Ask rule Bash(npm install *) overrides auto mode for this command と表示され、確認画面が出ている(2026年10月16日撮影)
autoモードで npm install left-pad を頼んだ画面(2026年10月16日撮影)。「Ask rule Bash(npm install *) overrides auto mode for this command.」と表示され、確認が求められました。ここでは「No」にあたる操作で止め、インストールはしていません。

実際の脅威への備え:公開された脆弱性・依存パッケージ・プロンプトインジェクション・MCP

プロンプトインジェクションは、コードのコメントや外部のファイル、Webページなどに悪意のある文を紛れ込ませ、AIの指示を上書きしようとする手口です。Claude Codeでは、知らないリポジトリそのものにも、設定ファイルやMCPサーバーの指定が入っている場合があります。

実際に公開された脆弱性:知らないリポジトリから始まるものが多い

Anthropicは、Claude Codeの脆弱性をGitHubのセキュリティアドバイザリで公開しています(anthropics/claude-code のSecurity Advisories、2026年10月21日時点で35件。Claude Desktopの分を含みます)。そのうち、この記事の対策と関係が深いものを抜き出しました。

識別番号(公開日)内容(公式の説明の要約)修正された版
CVE-2026-33068(2026年3月)悪意のあるリポジトリが .claude/settings.json で defaultMode を bypassPermissions にすると、初回に信頼ダイアログが出ないまま、確認を省くモードになった2.1.53
CVE-2026-21852(2026年1月)リポジトリの設定ファイルが ANTHROPIC_BASE_URL を攻撃者のサーバーに向けると、信頼の確認より前にAPIへの要求が送られ、APIキーが漏れうる状態だった2.0.65
CVE-2026-55607(2026年6月)Gitのworktreeの扱いを悪用し、サンドボックスの外でコードを実行できた(悪意のあるリポジトリを取り込み、そこで動かすことが条件)2.1.163
CVE-2026-39861(2026年4月)サンドボックスの中で作ったシンボリックリンクをたどって、作業フォルダの外へ書き込めた2.1.64
CVE-2026-25724(2026年2月)シンボリックリンク経由で、denyルールで禁止したファイルを読めた2.1.7
CVE-2026-24887(2026年2月)findコマンドの解析の誤りで、確認画面を通さずにコマンドを実行させられた2.0.72
CVE-2026-54316(2026年6月)WebFetchで事前に許可されていた huggingface.co を使い、確認なしの取得でデータを外へ持ち出す経路があった2.1.163
CVE-2026-103012(2026年9月)保存済みのAPIキーが優先され、組織のサーバー管理設定(denyルールなど)が適用されないままセッションが始まることがあった2.1.260

公式の説明から読み取れる点は3つです。1つ目は、多くが「悪意のあるリポジトリを開く」「信頼できない内容をClaudeに読ませる」ことを条件にしている点です。知らないリポジトリを安易に信頼しない、という基本が効きます。2つ目は、denyルールやサンドボックスにも抜け道が見つかってきた点です。1つの仕組みに頼らず重ねるのはこのためです。3つ目は、どれも修正済みで、公式は「自動更新の利用者には修正が届いている。手動で更新している場合は最新版にするように」と案内している点です。更新を長く止めること自体がリスクになります。手元の版は claude --version で確認できます。

依存パッケージの乗っ取り:2026年3月のaxiosの例

Claude自身の不具合とは別に、Claudeが実行する npm install などで、乗っ取られたパッケージを入れてしまう危険もあります。2026年3月31日、GitHubのアドバイザリデータベースは、JavaScriptで広く使われる通信ライブラリ axios の 1.14.1 と 0.30.4 にマルウェアが含まれていたとして警告(GHSA-fw8c-xr5c-95f9「Malware in axios」)を公開しました。警告は、入れたコンピューターを「完全に乗っ取られたもの」とみなし、そこに保存していた秘密情報と鍵を別のコンピューターから直ちに変更するよう求めています。

被害を小さくする設定は2つです(どちらも公式の設定です)。

  • Bash(npm install *) などをaskルールに入れ、パッケージの追加は毎回自分で確認する(autoモードでも効きます。実際の画面。npm i のような別の書き方を使う場合はそれも足します)
  • サンドボックスを有効にし、credentials で認証情報を拒否し、通信先を allowedDomains に絞る(制限は、インストール時のスクリプトにも及びます)
{
  "permissions": {
    "ask": [
      "Bash(npm install *)",
      "Bash(pnpm add *)",
      "Bash(pip install *)"
    ]
  }
}

許可した通信先(パッケージの配布元など)の中で起きる乗っ取りまでは、サンドボックスでは見分けられません。依存パッケージの確認は、CIの既存のスキャナーでも行います。

パッケージ側の対策として、公開から日が浅い版を入れない設定もあります。npm公式の設定 min-release-age は、指定した日数より前に公開された版だけをインストールの対象にします(既定は未設定です。たとえば .npmrc に min-release-age=7 と書くと、公開から7日以内の版は入りません)。ただし、条件に合う版が無いとインストールはエラーになり、npm audit fix は修正版が公開から日が浅いと入れられず、脆弱な版のまま警告を出して終わります(npm Docs: config)。

プロンプトインジェクションへの公式の備えと、MCPサーバー

  • curl・wget など、Webから内容を取ってくるコマンドは既定で自動承認されません。
  • WebFetchでは、多くの場合、ページをそのままClaudeに渡さず、別のモデルの呼び出しで要約した答えを渡します。
  • 内容を解析しきれないコマンドは確認が出て、どのルールにも当てはまらないコマンドも既定で確認が必要です(Manualモード)。

あわせて公式は、信頼できない内容を扱うときの注意として、「承認する前に提案されたコマンドを確認する」「信頼できない内容をClaudeに直接パイプしない」「重要なファイルへの変更を確かめる」「外部のWebサービスとやり取りするときは仮想マシンで動かす」「怪しい動きは /feedback で報告する」の5つを挙げています。そのうえで、これらの保護はリスクを大きく下げるが、すべての攻撃を防げるわけではない、と明記しています。

MCPサーバーの監査の責任は、利用する側にあります。

プロジェクトで使うMCPサーバーは .mcp.json に書き、ソース管理に入れられます。ただし、ほかの範囲の設定やclaude.aiのコネクタ、プラグインが追加するサーバーもあるため、.mcp.json を見るだけでは、セッションが読み込むサーバーのすべては分かりません。Anthropicはディレクトリに載せるコネクタを掲載基準に照らして確認しますが、個々のMCPサーバーのセキュリティ監査や管理は行いません。自作か信頼できる提供元のものだけを使い、組織では管理設定で使えるサーバーを制限します。MCPの基本はClaude CodeのMCPの解説で説明しています。

プラグイン・スキル経由で入る危険:入れる前に中身を読む

プラグインは、フック・MCPサーバー・スキルなどをまとめて配る仕組みです。公式の Plugin security and trust(2026年10月20日確認)は、「インストールしたプラグインは、利用者の権限で任意のコードを実行できる」と明記しています。Claude Codeの権限ルールとサンドボックスが守るのは「Claudeが行うツール呼び出し」で、プラグインが自分で動かすコードは対象外です。

プラグインが持てるもの何が起きるか(公式の説明)
フック(hooks)Claude Codeの処理の節目で、シェルコマンドとして実行される。サンドボックスの外で動く
モニター・MCP・LSPサーバーセッション開始時などにバックグラウンドで起動される。stdioのMCPサーバーは、この端末で動くプロセスになる
bin/ フォルダ有効なプラグインの bin/ が、Bashツールの PATH に追加される
スキル・コマンド・エージェントClaudeの文脈に「指示」として入り、Claudeが使えるツールの使い方に影響する(プロンプトインジェクションの入口になりうる)
更新マーケットプレイスの自動更新がオンだと、確認したファイルが後から書き換わりうる

入れる前の確認は、公式が次の順を示しています。

  1. claude plugin marketplace list で、マーケットプレイスの取得元(GitHubのリポジトリなど)を確かめます。
  2. セッションで /plugin を開き、詳細の「Will install」で、追加されるコマンド・エージェント・スキル・フック・MCPやLSPサーバーを確かめます。
  3. ただし「Will install」は、フックが「ある」ことは示しても「何を実行するか」は示しません。取得元のリポジトリで、hooks/hooks.json・.mcp.json・bin/ を読みます。
  4. 信頼できなくなったら、シェルで claude plugin uninstall <plugin> を実行します。取得元ごと外すなら、マーケットプレイスも削除します。

公式のマーケットプレイスの名前は予約されていて、github.com/anthropics/ 以外の取得元はその名前を名乗れません。ただし公式は、名前は「誰が公開しているか」を示すだけで、中のプラグインが何をするかは示さない、と注意しています。どのマーケットプレイスのものでも、入れる前に読みます。スキル単体(SKILL.md)も、命令文を含むファイルなので、知らない人が書いたものは中身を読んでから置きます。

非対話(-p)で知らないリポジトリを動かすときの注意

claude -p での実行や Agent SDK では、信頼ダイアログが出ません。公式の表によると、そのフォルダを信頼していなくても、次のものは使われます。

  • プロジェクトの設定ファイルにあるフック、env の設定、apiKeyHelper などの補助コマンド
  • .mcp.json にあるMCPサーバー(承認の有無にかかわらず、確認なしで接続されます)

一方、プロジェクトの permissions.allow のルールは使われません。自分が書いていないリポジトリで -p を使う前には、公式が挙げる次の方法で、読み込むものを絞ります。

  • --setting-sources user を付けて、プロジェクトの設定ファイルと .mcp.json を読まないようにする
  • --bare で起動し、プロジェクトのフック・スキル・サブエージェント・プラグイン・MCPサーバーを読まないようにする(env の設定などは残ります)
  • --settings '{"disableAllHooks": true}' で、その実行だけフックを止める(ユーザー設定に書くだけでは、プロジェクト設定で戻されることがあります)

Windowsでの注意:WebDAV

Windowsで使う場合、公式はWebDAVを有効にすることや、\\* のようなWebDAVのサブフォルダを含みうるパスへのアクセスを許すことを勧めていません。WebDAVはMicrosoftが非推奨にしており、有効にするとClaude Codeが外部のホストへ通信し、権限の仕組みを迂回する経路になりうるためです。

コードやプロンプトの送信先・保存期間・学習への利用(公式の記載)

Claude Codeは手元で動きますが、モデルとやり取りするために、入力したプロンプトとモデルの出力をネットワーク経由で送ります(通信はTLS 1.2以上で暗号化)。保存期間と学習への利用は、アカウントの種類で決まります。公式のデータ利用の文書(Data usage)の記載を、種類ごとに表にまとめました。

対象保存期間補足(公式の記載)
Free・Pro・Max(モデル改善への利用を許可)5年将来のClaudeモデルの改善に使われます。設定はいつでも変更できます
Free・Pro・Max(許可しない)30日モデルの学習には使われません
Team・Enterprise・API・他社のクラウド基盤標準30日顧客が自らデータの提供を選ばない限り、Claude Codeに送ったコードやプロンプトで生成モデルを学習しません
ゼロデータリテンションサーバー側に残さない条件を満たした Claude for Enterprise での Claude Code 向け。標準のEnterpriseには含まれず、組織ごとに有効化されます
/feedback・/bug・/share で送った会話5年送るときに、現在のセッションだけか、ほかのセッションも含めるかを選びます
セッション品質の調査で、追加の「Yes」を選んだ場合最長6か月評価だけなら会話は送られません。「Yes」を選んだときだけ会話の記録が送られます(既知のAPIキーの形は伏せられますが、ソースコードはそのまま送られます)
この端末に残る会話の記録既定30日~/.claude/projects/ の下に平文で保存されます。cleanupPeriodDays で期間を変えられます

送る情報を減らしたい場合の設定も、公式に載っています。使用状況の計測は DISABLE_TELEMETRY=1、エラー報告は DISABLE_ERROR_REPORTING=1、/feedback は DISABLE_FEEDBACK_COMMAND=1、アンケートは CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1 で止められます。CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC を設定すると、必須でない通信をまとめて止められます。計測にはコード・プロンプト・ファイルパスは含まれないと公式は説明しています。Amazon Bedrock・Google Cloud の Agent Platform・Microsoft Foundry・Claude Platform on AWS を使う場合、計測・エラー報告・/feedback の送信は既定でオフです。

注意したい点が3つあります。

  1. WebFetchツールは、URLを取得する前に、ホスト名(URL全体ではありません)を安全確認の一覧と照合するため api.anthropic.com へ送ります。この確認は、どのモデル提供元を使っていても動きます。社内のネットワークで api.anthropic.com を遮断していると、WebFetchは失敗します。
  2. 手元の会話の記録は平文で残ります。機密を扱う端末では、保存期間を短くするか、共有の端末で使わない運用を決めておくと安心です。
  3. APIキーやトークンは、macOSではキーチェーン(使える場合)に、Linuxでは所有者だけが読み書きできるファイル(権限0600)に保存されます。

Claude Code・AIエージェントの業務導入をご検討の方は、自社での開発実例を公開しているクリスタルメソッドの無料相談をご利用ください。

企業・チームで導入するときの設定方針

個人の設定は、利用者が自分で変えられます。組織として守りを揃えるには、設定の配り方・監視・更新の管理までを決めておきます。公式が「チームのセキュリティ」として挙げるのは、管理設定で組織の基準を強制する、承認済みの権限設定をバージョン管理で共有する、メンバーを教育する、OpenTelemetryの計測で利用状況を見る、ConfigChange フックでセッション中の設定変更を監査・ブロックする、の5つです。

managed settingsで、利用者が外せない守りを作る

管理者が配る管理設定(managed settings)の権限ルールは、ユーザー設定・プロジェクト設定・起動時の引数のどれでも上書きできません(公式 Deploy managed settings)。配り方は、端末の管理方法に合わせて選びます。

配り方置き場所読み込まれるとき
サーバーで管理claude.ai の管理コンソール起動時に取得し、その後1時間ごとに確認
MDM・OSのポリシーmacOSの構成プロファイル、Windowsのレジストリ(Jamf・Intune・グループポリシーなど)起動時
ファイルmacOS:/Library/Application Support/ClaudeCode/managed-settings.json
Linux・WSL:/etc/claude-code/managed-settings.json
Windows:C:\Program Files\ClaudeCode\managed-settings.json
起動時(ファイルが変わると読み直し)

公式の例は次のとおりです。秘密情報を読ませず、確認をすべて省く bypassPermissions モードを使えなくし、権限ルールの取得元を管理設定だけに限っています。

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./secrets/**)"
    ],
    "disableBypassPermissionsMode": "disable"
  },
  "allowManagedPermissionRulesOnly": true
}

管理設定で sandbox.allowUnsandboxedCommands を false にすると、サンドボックスは「管理者が必須にした」状態になり、リポジトリの設定ファイルでサンドボックスを緩める指定は無視されます。どの設定がどこから効いているかは、各端末の /status で確認できます。

組織でプラグインの取得元まで固定するなら、同じ管理設定に次のキーを足します(公式 Manage Claude Code plugins for your organization、2026年10月20日確認)。次は、公式が示す「公式のマーケットプレイスと自社のものだけを許可する」例から、許可と持ち込みの制限だけを抜いたものです。

{
  "strictKnownMarketplaces": [
    { "source": "github", "repo": "anthropics/claude-plugins-official" },
    { "source": "github", "repo": "your-org/*" },
    { "source": "skills-dir" }
  ],
  "disableSideloadFlags": true
}
キー効果(公式のコントロール表)
strictKnownMarketplacesプラグインの取得元の許可リスト。[] にすると公式を含むすべてが止まる。登録そのものはしない
disableSideloadFlags--plugin-dir・--plugin-url・--agents などでの持ち込みを起動時に拒否する
allowManagedHooksOnly動かせるフックを制限する(利用者が自分で有効にしたプラグインのフックは信頼しない)

実際の画面:/permissions で、配ったルールが効いているかを確かめる

チームで設定を配った後は、各自の環境でルールが効いているかを /permissions で確認してもらいます。どのルールがどの設定ファイルから読み込まれているかが一覧で出ます。

Claude Code内で/permissionsを実行したときの画面。Denyのタブに、プロジェクトのsettings.jsonに書いたRead(./.env)とRead(./.env.*)の2つのルールが並んでいる(2026年10月13日撮影)
/permissions のDenyタブ(2026年10月13日撮影)。プロジェクトの設定に書いたdenyルールが一覧で出ます。タブはほかに Allow・Ask・Workspace などがあります。

dev containerで、さらに分離する

特に機密度の高いリポジトリでは、公式はClaude Code全体をサンドボックスの実行環境やdev container(開発用コンテナ)の中で動かすことを勧めています。dev containerでは、Claudeが実行するコマンドは手元のパソコンではなくコンテナの中で動き、プロジェクトのファイルの変更は手元のリポジトリに反映されます。公式の参考用コンテナには、外への通信を許可した宛先だけに絞るファイアウォールのスクリプト(init-firewall.sh)が入っています。

ただし公式は、コンテナの中で確認を省く --dangerously-skip-permissions を使うと、悪意のあるプロジェクトがコンテナ内のもの(~/.claude にあるClaude Codeの認証情報を含む)を持ち出すのは防げない、と注意しています。信頼できるリポジトリだけで使い、~/.ssh やクラウドの認証情報をコンテナに入れない(リポジトリ単位や短い期限のトークンを使う)ことが勧められています。

Claude Code自体の更新と、サプライチェーンへの備え

Claude Codeは更新の頻度が高いツールです。更新のしかたは入れ方によって違います(公式 Advanced setup)。手元の版は claude --version、更新の状態は claude doctor で確認できます。

入れ方更新
ネイティブ(推奨のインストーラー)バックグラウンドで自動更新。すぐ反映したいときは claude update
Homebrew自動更新なし。brew upgrade claude-code(latestは claude-code@latest)
WinGet自動更新なし。winget upgrade Anthropic.ClaudeCode
apt・dnf・apksudo apt update && sudo apt upgrade claude-code、sudo dnf upgrade claude-code、apk update && apk upgrade claude-code
npmnpm install -g @anthropic-ai/claude-code@latest(npm update -g は新しい版に進まないことがあるため公式は避けるよう案内)。sudo npm install -g も避ける

古い版に戻らないよう下限を決めたいときは、設定に minimumVersion を書きます。管理設定に書くと組織の下限になり、さらに requiredMinimumVersion と requiredMaximumVersion を管理設定に書くと、範囲の外では起動しなくなります。autoUpdatesChannel を "stable" にすると、おおむね1週間前の版を使います(既定は "latest")。

{
  "autoUpdatesChannel": "stable",
  "minimumVersion": "2.1.100"
}

利用状況の監視と、設定変更の監査

  • OpenTelemetry:CLAUDE_CODE_ENABLE_TELEMETRY=1 を設定すると、利用状況の計測を自社の収集基盤へ送れます。プロンプトの中身の記録は既定でオフで、OTEL_LOG_USER_PROMPTS=1 を設定したときだけ記録されます。
  • ConfigChange フック:セッション中に設定ファイル・管理設定のファイル・スキルのファイルが変わったときに動き、変更の記録やブロックに使えます。
  • PreToolUse フック:ツールが実行される前に動き、危険なコマンドを止めるなど独自の確認を足せます。使い方はClaude Codeのフックの解説で説明しています。

クラウド実行(Claude Code on the web)とRemote Control

ブラウザから使う Claude Code on the web で、Anthropicが用意する環境を使う場合、公式が挙げる守りの要点は3つです(組織が自社の環境で動かす場合、分離・通信・Gitの認証情報は自社の責任です)。

  • 分離された仮想マシン:セッションごとに、Anthropicが管理する独立した仮想マシンで動き、通信は既定で制限されます
  • 認証情報の保護:GitHubの認証情報は暗号化してAnthropicのサーバーに保存され、仮想マシンには入りません
  • 監査ログ:クラウドのセッション内のすべての操作が記録されます

一方、Remote Control(Webの画面から手元のClaude Codeにつなぐ形)は仕組みが違い、コードの実行とファイルの操作は手元に留まり、クラウドの仮想マシンやサンドボックスは使われません。つないでいる間は会話の記録が端末間で同期するためAnthropicのサーバーに保存されます。Webでの使い方はClaude Code on the webの解説で説明しています。

企業導入前のチェックリスト

上の個人向けチェックリストとは別に、組織として決めておく項目です。

確認すること関連する仕組み
個人任せにせず、管理設定で組織の権限の基準を強制しているかmanaged settings
確認をすべて省くモードを使えなくしているかdisableBypassPermissionsMode
使ってよいMCPサーバーを決め、追加のときに社内で確認しているか管理設定のMCP制限、.mcp.json
外部へ送信しうるコマンド(curl・wgetなど)を個別に判断しているかpermissions.deny
サンドボックスを有効にし、認証情報のファイルを拒否しているかsandbox.credentials
セッション中の設定変更を記録・ブロックできるかConfigChange フック
機密度の高いリポジトリを、さらに分離しているかdev container
利用状況を計測しているかOpenTelemetry
更新のチャンネルを揃えているかautoUpdatesChannel
保存した許可ルールを定期的に見直しているか/permissions

Claude Code自体に脆弱性を見つけたときの報告

公式が定める手順は、公開の場で開示せず、HackerOneのプログラムから詳しい再現手順を添えて報告し、公開前にAnthropicが対処する時間をとることです。社内でClaude Codeを使う開発者にも、この流れを伝えておきます。

Claude Codeのセキュリティの限界と導入判断の考え方

ここまでの設定を入れても、次の限界は残ります。導入を判断するときは、これを前提にします。

  • denyルールは書かれた文字列で一致を調べ、サンドボックスはシェルコマンドだけを包みます:別の書き方やスクリプト経由の操作、組み込みのファイルツール・フック・手元のMCPサーバーは止められない場合があります。両方を組み合わせ、サンドボックスが実際に動いているかを確かめます。
  • プロンプトインジェクションは完全には防げず、確認の責任は利用者にあります:公式も、どんな仕組みもすべての攻撃を防げるわけではないと明記しています。Claudeに渡す内容を必要な範囲に絞り、重要な変更は人のレビューを残します。
  • 更新が速い:新しい機能が、新しい考慮点を生むことがあります。組織では更新のチャンネルや更新前の確認の流れを決めておきます。

公式に公表された事例:Claude Codeが悪用された攻撃キャンペーン

Anthropicは2025年11月13日、中国の国家が支援するとみられるグループがClaude Codeを悪用し、世界の約30の組織への侵入を試みた事例を公表しました(出典:Disrupting the first reported AI-orchestrated cyber espionage campaign)。攻撃者は作業を無害に見える小さな依頼に分け、防御側のセキュリティ会社の社員だと偽ってClaudeの安全策を回避し、作業の8〜9割をAIが担ったと推定されています。Anthropicは、アカウントの停止と被害を受けた組織への通知、検知の強化で対応しました。

これは利用者が設定を誤った事例ではなく、AIエージェントが攻撃に使われる側の事例です。この記事の設定で防げるのは、自分の環境でClaude Codeが意図しない操作をしないことまでですが、権限の最小化・認証情報を平文で置かない・更新を止めないといった基本は、被害を小さくする土台になります。

編集の前に自動でバックアップを取るフックの例

設定の中で実用的なのが、Claudeがファイルを書き換える前に、元のファイルを自動で控えておくPreToolUseフックです。権限ルールが「やってよいか」を決めるのに対し、このフックは「やった後に戻せるか」を担保します。次は、Edit・Writeの直前に動かす例です(登録の書式は公式のhooksガイドと同じで、スクリプトは自作の例です。jq が必要です)。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/backup-before-edit.sh"
          }
        ]
      }
    ]
  }
}

スクリプトは .claude/hooks/backup-before-edit.sh に保存し、chmod +x します。入力のJSONから編集対象のパスを取り出し、ファイルがあれば日付つきのフォルダへ時刻を付けて複製します。新規作成でファイルがまだ無いときは何もしません。

#!/bin/bash
INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

if [ -n "$FILE_PATH" ] && [ -f "$FILE_PATH" ]; then
  DEST="$HOME/.claude/backups/$(date +%Y-%m-%d)"
  mkdir -p "$DEST"
  cp "$FILE_PATH" "$DEST/$(basename "$FILE_PATH").backup-$(date +%H%M%S)"
fi

exit 0

スクリプト単体の動き(保存先に複製される、存在しないパスでは何もしない)は手元で確かめましたが、Claude Codeに組み込んだ状態での実行は、この記事では検証していません。バックアップは同じ端末の中に残るだけなので、重要なリポジトリはGitでも管理します。

なお、CLAUDE.mdの指示はClaudeの動きを方向づけるもので、Claude Codeが許可する範囲を変えるものではありません(上の「守りは3つの層で考える」のとおり)。守りたいことは、権限ルールやフックといった「仕組み」に落とし込みます。

よくある質問

Q. Claude Codeの初期設定では、どの操作に確認が出ますか?
A. v2.1.283以降、ターミナルとVS Codeの拡張機能では、autoモード(別の分類器モデルが操作を確認し、危険と判断したものを止める)が組み込みの開始モードです。すべての操作を自分で確認したい場合は、claude –permission-mode manual で起動するか、~/.claude/settings.json の permissions.defaultMode を “default”(Manualモード)にします。Manualモードは読み取りだけで始まり、編集やコマンドの実行の前に確認が出ます。

Q. .claudeignoreで読ませたくないファイルを除外できますか?
A. 公式ドキュメントによると、.claudeignore ファイルを置いても効果はありません。読ませたくないファイルは、settings.json の permissions.deny に Read(./.env) のようなルールで指定します。Readのdenyルールは同じパスへの編集・書き込みも止めますが、別のプログラムを経由した読み書きには効かないため、必要に応じてサンドボックスを併用します。

Q. Readのdenyルールに.envを入れれば、.envは絶対に読まれませんか?
A. いいえ。2026年10月16日にClaude Code v2.1.301で試したところ、Readツールと cat .env は拒否されましたが、.env を開くPythonスクリプトの実行はdenyでは止まらず、実行の確認画面で「Yes」を選ぶと中身が表示されました。サンドボックスが動く状態にすると、同じスクリプトは PermissionError で読めませんでした。denyルールとサンドボックスを組み合わせ、Linuxでは socat などが入っていてサンドボックスが実際に動いているかを /sandbox で確かめます。

Q. サンドボックスを有効にすれば、~/.ssh などの認証情報も守られますか?
A. いいえ。公式によると、サンドボックスの中のコマンドは、既定でパソコンのほぼ全体を読み取れ、~/.ssh や ~/.aws/credentials も含まれます。組み込みの拒否リストは無いため、sandbox.credentials に守りたいファイルと環境変数を書いて拒否します。

Q. Team・Enterpriseプランなど商用利用時、コードはモデルの学習に使われますか?
A. 公式のデータ利用の文書によると、Team・Enterpriseプラン、API、他社のクラウド基盤などの商用利用では、顧客が自らデータの提供を選ばない限り、送ったコードやプロンプトは生成モデルの学習に使われません。保存期間は標準で30日です。

Q. 知らないフォルダでClaude Codeを起動したとき、「Yes, I trust this folder」は押してよいですか?
A. 自分で作ったプロジェクト、よく知られたオープンソース、チームのコードなど、中身を知っているフォルダだけ「Yes」を選びます。プロジェクトの設定ファイルにある許可ルールは、信頼するまで使われません。非対話の -p で起動した場合はこの確認自体が出ず、プロジェクトのフックや .mcp.json のサーバーが使われる点に注意が必要です。

Q. Claude Code Security(Claude Security)と /security-review は何が違いますか?
A. /security-review は、現在のブランチの変更を1回だけセキュリティの観点で確認するコマンドです。Claude Security は、リポジトリ全体や差分を複数のエージェントで調べ、検証済みの指摘と修正案を出す機能で、Claude.ai のアプリ(Enterprise向けパブリックベータ)と、Claude Code用のプラグイン(ベータ)があります。作業中に自動で確認させる security-guidance プラグインもあります。

Q. Claude Code自体に脆弱性が見つかったことはありますか?
A. あります。Anthropicは GitHub の anthropics/claude-code のセキュリティアドバイザリで脆弱性を公開しており、2026年10月21日時点で35件(Claude Desktopの分を含む)が載っています。信頼ダイアログを飛ばされるもの、サンドボックスの外へ書き込めるもの、denyルールをシンボリックリンクで回避できるものなどがあり、いずれも修正済みです。自動更新を止めず、手動で更新している場合は最新版にすることが勧められています。


まとめ:今日やること・導入前に決めること

個人で使う場合は、まず「起動時の権限モードの確認」「.envなど秘密情報のファイルをReadのdenyで読ませない」「知らないリポジトリやMCPサーバーを安易に信頼しない」の3つから始めるとよいです。そのうえで、確認画面で保存した許可ルールを /permissions で見直し、サンドボックスを有効にして認証情報のファイルを拒否します。実際に試したとおり、denyだけではスクリプト経由の読み取りは止まらず、サンドボックスは必要なものが無いと動かないまま使えてしまうので、/sandbox で動いていることまで確かめてください。

企業として管理する場合は、技術の設定・契約・組織の運用の3つで対策を考えます。技術の設定では、管理設定で権限の基準と bypassPermissions の禁止を強制し、サンドボックスと必要に応じてdev containerで分離します。契約では、商用規約での学習への非利用と保存期間を、法務・情報セキュリティの部門が確認します。運用では、利用ポリシー、計測(OpenTelemetry)と設定変更の監査、更新のチャンネル、脆弱性の報告の流れを決めておきます。書かれたコードの脆弱性は、権限の設定とは別に、/security-review や security-guidance プラグイン、Claude Security で段階的に確認します。Claude Codeの全体像はClaude Codeとはをあわせて参照してください。

参考文献

公式ドキュメント・製品ページ・GitHubのアドバイザリは、2026年10月21日に再確認しました(個別に日付を付けた項目を除く)。

関連記事

Claude Code・AIエージェントの業務活用をご検討の方へ

クリスタルメソッドは、Claude Codeを実務で使い込んでいる経験をもとに、AIエージェント・社員AIの導入と開発効率化を支援しています。自社サイトの表示速度をAI社員(Claude Code)で12.89秒→2.03秒に短縮した実例も事例記事として公開しています。「自社の開発・業務にAIをどう組み込むか」といったご相談を承っています。

AIブログ購読

 
クリスタルメソッドがお届けする
AIブログの更新通知を受け取る

監修

河合 継(クリスタルメソッド株式会社 代表取締役)

AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番組でのAI解説実績を持つAI研究者として、AIの研究開発を主導している。
運営会社について | 編集方針

Read next

あわせて読みたい

  • 対話・チャットLLMのイメージ

    Claude Code 権限設定|allow/deny・最小権限【2026】

    Claude Codeの権限設定は、エージェントにどのツールやコマンドの実行を許可/拒否するかを制御する、安全に使ううえで最初に押さえるべき仕組みです。本記事で...

  • Claude Code sandboxサンドボックスモードの安全な使い方と設定完全ガイドのイメージ

    Claude Code Sandbox(サンドボックス)モードの安全な使い方【6つの隔離方式徹底比較・2026】

    Claude Code を本番環境や重要なリポジトリで使い始めると、すぐに「どこまでエージェントに自律実行させるか」という問いにぶつかります。ファイルを読むだけ...

  • 対話・チャットLLMのイメージ

    claude 学習させない 設定|プラン別の正しい設定と見落としポイント

    claude 学習させない 設定:プラン別の前提がまず逆になる 「ClaudeにコードやプロンプトをAI学習させない設定はどこにあるか」という問いに対する正確な...

View more