本記事はエンジニア向けです。
Claude Codeを使い始める前に。最初にやっておきたいセキュリティ設定7つが非エンジニアにもわかりやすいです。
上記事に加えてすると良さそうな設定や、私の設定を以下に共有します。
ブラウザ版Claudeの設定:モデルトレーニングをオフにする(追加)
デフォルトでは、チャットデータは5年保持され、モデルのトレーニングに使われる設定になってます。
そのため、基本的にはオフしたほうが良いと思います。
モデルのトレーニングにデータを使用することを許可していただける場合、データ保持期間を5年に延長いたします。この更新された保持期間は、新規または再開されたチャットおよびコーディングセッションにのみ適用され、モデル開発と安全性の向上をより効果的にサポートできるようになります。クロードとの会話を削除した場合、そのデータは今後のモデルトレーニングには使用されません。モデルトレーニングにデータを提供しない場合は、既存の30日間のデータ保持期間が継続されます。
https://www.anthropic.com/news/updates-to-our-consumer-terms
PC全体のデフォルト設定(~/.claude/settings.json)
deny/ask/allowルール
Claude Codeのパーミッションには deny・ask・allow の3種類があり、優先順位は deny > ask > allow です。
Rules are evaluated in order: deny -> ask -> allow. The first matching rule wins, so deny rules always take precedence.
参考:Configure permissions - Claude Code Docs
取り返しのつかない操作を deny で事前にブロックしておくのが良いと思います。
私の設定例を記載します。(GitHub|福永 - dotfiles|./claude/settings.json)
{
"permissions": {
"allow": [
"Read(**/.env.sample)",
"Read(**/.env.example)",
"Bash(npm run *)",
"Bash(npm test *)",
"Bash(npx prettier *)",
"Bash(npx eslint *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(ls *)",
"Bash(cat *)",
"Bash(grep *)"
],
"deny": [
"Read(**/.env*)"
"Read(~/.ssh/**)",
"Read(~/.gnupg/**)",
"Read(~/.aws/**)",
"Read(~/.azure/**)",
"Read(~/.kube/**)",
"Read(~/.npmrc)",
"Read(~/.git-credentials)",
"Read(~/.config/gh/**)",
"Edit(**/.bashrc)",
"Edit(**/.bash_profile)",
"Edit(**/.zshrc)",
"Edit(**/.config/fish/**)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(nc *)",
"Bash(ssh *)",
"Bash(git push *)",
]
}
}
ただし、以下のことに注意してください。
読み取りおよび編集の拒否ルールは、Claude の組み込みファイルツールに適用され、Bash のサブプロセスには適用されません。読み取り (./.env) の拒否ルールは Read ツールをブロックしますが、Bash での cat .env の実行は妨げません。すべてのプロセスがパスにアクセスできないように OS レベルで強制するには、サンドボックスを有効にしてください。
permissions#read-and-edit - Claude Code DocsをGoogle翻訳
サンドボックスを有効にする(補足)
Sandboxは、主にプロジェクトごとの設定です。
事前にClaude Codeがアクセスできるディレクトリとネットワークホストを設定できます。
Permissionsはあくまで「Claudeに確認する」レイヤーですが、Sandboxはその下にあるOSレベルの制御です。プロンプトインジェクション攻撃でClaudeが騙されても、OSがブロックします。
設定方法
Claude|Sandboxing - getting-started
Linuxの場合は先に以下インストールが必要
sudo apt-get install bubblewrap socat
このbubblewrapを使ってシステムレベルでアクセス制御をする。
/sandbox
上コマンドを実行する以外にもプロジェクトのsetting.jsonで設定してしまう方法もあります。
設定例 (project/.claude/setting.json)
{
"sandbox": {
"enabled": true, // サンドボックスの有効化
"autoAllowBashIfSandboxed": false, // サンドボックスの有効時にBashコマンドを自動承認。デフォルトはtrue
"allowUnsandboxedCommands": false // サンドボックス外でのコマンド実行(エスケープハッチ)の有効/無効
}
}
※ 参考:『実践Claude Code入門』西見公宏,吉田真吾,大嶋勇樹, 技術評論社
PC全体の設定例 (~/.claude/setting.json)
{
"sandbox": {
"failIfUnavailable": true, // 下で解説
"allowUnsandboxedCommands": false
}
}
failIfUnavailableとは
サンドボックス設定 - ClaudeCodeをGoogle翻訳
sandbox.enabledが true であるにもかかわらずサンドボックスが起動できない場合 (依存関係の不足またはサポートされていないプラットフォーム)、起動時にエラーで終了します。 false (デフォルト) の場合、警告が表示され、コマンドはサンドボックス化されずに実行されます。
.claudeignore:読ませたくないファイルを除外する
.gitignore と同じ書式で、Claudeに読ませたくないファイル・ディレクトリをプロジェクトごとに指定できます。
プロジェクトルートに .claudeignore を作成:
# 環境変数・シークレット
.env
.env.*
*.pem
*.key
可能であればDevContainer(開発用コンテナ)内で実行する
上記の設定はすべて重要ですが、開発環境全体をコンテナ化し、ホストとは分離された環境でClaudeCodeを実行することが、ホストマシンを守るには効果的だと考えます。
たとえClaudeが騙されても、被害がコンテナの中に閉じ込められます。
DevContainer内で作業する場合は、コンテナが隔離環境となるため、Sandboxは省略し --dangerously-skip-permissions(全確認スキップフラグ)で作業効率を上げるのが良いと考えます。
パーミッションモード # 利用可能なモード - Claude Code Docsでも、bypassPermissions (--dangerously-skip-permissionsと同じ)は、隔離されたコンテナと VM のみに最適だと、との記載があります。
手順
開発コンテナに Claude Code を追加する - Claude Code Docs
