Claude Codeのセキュリティ設定を定期的に見直している話

Claude Codeを使い続けていると、設定は少しずつ積み重なっていく。最初から全部完璧にするのは難しいし、Claude Code自体の仕様も変わる。だから僕は定期的に設定を棚卸しして、見直すようにしている。

今回やった棚卸しの内容をまとめておく。

Claude Codeのセキュリティ設定の仕組み

Claude Codeは2種類の設定ファイルを持つ。

| ファイル | 場所 | 用途 |

|---------|------|------|

| `~/.claude/settings.json` | グローバル(全プロジェクト共通) | モデル・権限・MCPサーバーの基本設定 |

| `.claude/settings.local.json` | プロジェクト内 | プロジェクト固有の追加権限 |

権限は allow(許可)と deny(禁止)のリストで管理する。denyallow より優先される。

設定している基本的なdenyルール

"deny": [
  "Bash(curl *)",
  "Bash(rm -rf *)",
  "Read(.env)",
  "Read(.env.*)",
  "Read(**/secrets/**)"
]

- curl を禁止 → AIが勝手に外部にデータを送れない

- rm -rf を禁止 → ファイルの一括削除を防ぐ

- .env の読み取りを禁止 → 環境変数ファイルをAIに渡さない

bypassPermissions は設定していない。都度確認が入る運用にしている。

MCPサーバーの認証情報の扱い

MCPサーバー(KintoneやLeonardo.aiなど)の接続設定には認証情報が必要になる。

stdioタイプのMCP(Kintoneなど) は、Windowsのシステム環境変数に値を逃がすことができる。settings.jsonには認証情報を書かず、OSレベルで管理する構成にしている。

# 環境変数として登録
[System.Environment]::SetEnvironmentVariable("KINTONE_API_TOKEN", "xxxx", "User")

HTTPタイプのMCP はヘッダーに認証情報が必要な仕様になっている。この場合はファイルをgit管理外に置き、gitignoreで除外する運用で対応している。

# .gitignore
.mcp.json
.claude/settings.local.json

gitに乗らない場所に置いておけば、コードと一緒に公開されるリスクは避けられる。

Readスコープの管理

allowRead を追加するとき、スコープを必要最小限に絞るようにしている。

// プロジェクトフォルダのみに限定
"Read(//c/Users/user/Desktop/Claudefolder/**)"

広いスコープを設定すると便利ではあるが、定期的に棚卸しして実際に必要な範囲に整理する。

Google Cloud VMで動かすメリット

僕はGoogle Cloud上のVMでもClaude Codeを動かしている。

- ローカルPCへの影響ゼロ — VMのファイル操作がローカルに影響しない

- スナップショットで即復元 — 何かあっても巻き戻せる

- ネットワーク分離 — ファイアウォールで通信を制限できる

本番に近い作業はVMで、日常的な開発はローカルで、という使い分けをしている。

定期棚卸しのチェックリスト

半年に一度くらいのペースで見直している項目:

- [  ] Read の許可スコープが必要最小限になっているか

- [  ] deny に基本ルールが含まれているか

- [  ] bypassPermissions: true になっていないか

- [  ] .mcp.jsonsettings.local.json.gitignore に入っているか

- [  ] MCPサーバーは使っているものだけか

- [  ] 認証情報がgit管理ファイルに混入していないか(git log で確認)

まとめ

完璧な設定を最初から作るのは難しい。Claude Code自体の仕様変更もあるし、使い方も変わっていく。だから「一度作って終わり」ではなく、定期的に棚卸しして現状に合わせていく運用の方が現実的だと思っている。

*検証環境: Windows 11 + Claude Code + Google Cloud VM / 2026年7月時点の設定をベースに記述*