ターミナルで Claude Code を業務利用するときに、企業の機密情報(認証情報・ソースコード・社外秘データ)が外部に漏れないようにするための必須設定と、それぞれの設定が「何を・なぜ」防ぐのかの解説。
permissions.deny で秘匿ファイルの読み取り拒否 — .env・秘密鍵・クラウド認証情報を Claude の目に入れないCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 — テレメトリ等、会話以外の外部送信を全停止そもそもデータが Anthropic のモデル訓練に使われるかどうかは契約プランで決まる。ここが全設定の前提になる。
| プラン | 学習利用 | データ保持 |
|---|---|---|
| Pro / Max(個人) | 設定次第(要オプトアウト) | オプトイン時 5年 / オプトアウト時 30日 |
| Team / Enterprise | 使われない(商用規約) | 標準 30日 |
| API 経由 | 使われない(商用規約) | 標準 30日(ZDR 契約なら保持ゼロ) |
Claude Code に .claudeignore のような除外ファイルは存在しない。公式の推奨手段は ~/.claude/settings.json の permissions.deny に Read 拒否ルールを書くこと。
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./**/secrets/**)",
"Read(**/*.pem)",
"Read(**/*.key)",
"Read(~/.ssh/**)",
"Read(~/.aws/**)"
]
}
}
| ルール | 守っている情報と、漏れた場合のリスク |
|---|---|
Read(./.env)Read(./.env.*) | APIキー・DB接続文字列・決済キーなどの環境変数ファイル。会話コンテキストに入ると Anthropic のサーバーに送信され、保持ポリシーの対象になる。.env.local や .env.production などの変種もカバーするために2行に分けている。 |
Read(./**/secrets/**) | プロジェクト内の secrets ディレクトリ全般。深い階層にあっても **(ディレクトリ横断グロブ)で捕捉する。 |
Read(**/*.pem)Read(**/*.key) | 秘密鍵・証明書。漏れるとサーバーへのなりすましやTLSの解読につながるため、拡張子ベースで場所を問わず遮断する。 |
Read(~/.ssh/**) | SSH秘密鍵と接続履歴(known_hosts)。漏れると社内サーバー・Gitリポジトリへの侵入経路になる。プロジェクト外だが、Claude はホームディレクトリも読めるため明示的に塞ぐ。 |
Read(~/.aws/**) | AWSアクセスキー。漏れるとクラウドインフラ全体(S3のデータ、本番環境)へのアクセスを許すことになる。被害範囲が最も大きい部類。 |
./=プロジェクト基準、~/=ホーム、//=ファイルシステム絶対パス。
Bash(cat .env) のようなシェル経由の読み取りは対象外。シェル側も塞ぎたい場合はサンドボックス(07章)の credentials 設定を併用する。
{
"env": {
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
}
}
| 個別変数 | 止まるもの/なぜ止めるか |
|---|---|
DISABLE_TELEMETRY | 利用状況メトリクス(レイテンシ・信頼性データ)の送信。機密性は低いが、社外送信を最小化する方針なら止める。 |
DISABLE_ERROR_REPORTING | エラー発生時のスタックトレース送信。ファイルパスやコード断片が混入し得るのが止める理由。既知パターンの秘匿情報は送信前に自動リダクトされるが、ゼロにするならオフが確実。 |
DISABLE_FEEDBACK_COMMAND | /feedback /bug /share コマンド自体を無効化。詳細は次章。 |
CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY | セッション品質アンケートの表示。評価のみの送信だが、うっかり「会話も送る」を選ぶ事故の芽を摘む。 |
DISABLE_FEEDBACK_COMMAND=1(マスタースイッチに含まれる)でコマンド自体を封じておけば事故が起きない。
MCPサーバーは Claude に外部ツールを与える仕組みだが、裏を返せば会話コンテキスト(=開いているコードや秘匿情報)が第三者のサーバーに渡る経路にもなる。
.mcp.json に他人が追加したサーバーは、承認プロンプトで接続先と提供ツールを確認してから許可する。出所不明の npm パッケージ型 MCP は入れない。
設定で強制する場合は deniedMcpServers / allowedMcpServers による許可リスト方式も使える(denyが常に優先)。
"permissions": { "deny": ["Artifact"] } で無効化できるmacOS は OS 組み込みの Seatbelt ベースのサンドボックスが利用できる(v2.1.187+)。02章の deny が塞げない「シェル経由のアクセス」と「ネットワーク経路」をここで塞ぐ。
{
"sandbox": {
"enabled": true,
"network": {
"allowedDomains": ["github.com", "*.npmjs.org", "api.anthropic.com"]
},
"credentials": {
"files": [
{ "path": "~/.ssh", "mode": "deny" },
{ "path": "~/.aws/credentials", "mode": "deny" }
],
"envVars": [
{ "name": "GITHUB_TOKEN", "mode": "mask", "injectHosts": ["api.github.com"] }
]
}
}
}
| 設定 | 意図 |
|---|---|
network.allowedDomains | Claude が実行するコマンドの接続先を許可リスト方式にする。万一プロンプトインジェクションで「このデータを外部に送れ」と指示されても、未許可ドメインへの送信は物理的に失敗する。データ持ち出し(exfiltration)への最終防衛線。 |
credentials.files(deny) | 02章の deny と違い、シェルコマンド(cat 等)からもファイルを見えなくする。OSレベルの遮断。 |
credentials.envVars(mask) | トークンをダミー値に置き換え、injectHosts に指定した正規の接続先への通信時だけ本物を注入する。Claude にもログにも実トークンが一切現れないため、漏れようがない状態を作れる(v2.1.199+、tlsTerminate 併用)。 |
CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1 | 手軽版。Anthropic・クラウド系の認証環境変数を全サブプロセスから除去する。サンドボックスを組む前の第一歩として有効。 |
/Library/Application Support/ClaudeCode/managed-settings.json(macOS)を MDM 等で配布する。managed 設定はユーザー・プロジェクト設定より常に優先され、上書き不可。allowManagedPermissionRulesOnly や allowManagedMcpServersOnly を併用すると、ユーザーによる許可ルール・MCPサーバーの追加自体を禁止できる。Team/Enterprise なら管理コンソールからのサーバー配信(Server-Managed Settings)も利用可。
~/.claude/settings.json に秘匿ファイルの Read deny ルールCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1/feedback /bug /share は使わない(無効化済みなら安心)