Claude Codeで今すぐ実施すべき3つのセキュリティ対策

はじめに
こんにちは。システムサービス本部クラウドソリューショングループのshimizuyです。
突然ですが、Claude Codeを利用されたことはありますか?
Claude Codeは、ターミナルでのコマンド実行やファイルの読み書きができる強力なコーディングエージェントです。しかし、開発効率を大きく向上させる一方で、その能力の高さゆえにセキュリティ対策を怠ると思わぬリスクを招いてしまいます。
社員がAIに機密情報を入力してしまうケースや、プロンプトインジェクションによるデータ窃取など、リスクは身近に存在しており、AI活用ツールを経由した企業の機密データの流出事例も報告されています(参考)。
本記事では、そんなClaude Codeを安全に運用するために 今すぐ設定すべき3つのセキュリティ対策 を紹介していこうと思います。
Claude Codeのセキュリティリスクを知る
まず、Claude Codeがどのような権限を持っているかを簡単に整理します。
| 権限 | 内容 |
|---|---|
| ターミナル実行 | シェルコマンドを直接実行できる |
| ファイル読み取り | プロジェクト内外のファイルを読める |
| ファイル書き込み | ファイルの作成・変更・削除ができる |
| ネットワーク通信 | 外部APIやレジストリへアクセスできる |
これらの権限がデフォルトのまま放置されると、以下のリスクが生じます。
-
意図しないコマンド実行:
rm -rfやsudoなどの破壊的コマンドが実行される -
機密ファイルの読み取り:
.envファイルやSSH鍵、AWSクレデンシャルが読み取られる -
外部へのデータ送信:悪意のあるプロンプトインジェクションにより、機密データが外部サーバーへ送信される
こうしたリスクは「自分には関係ない」と思いがちですが、Claude Codeが持つ権限の広さを考えると、対策なしで使い続けるのは危険です。
以降のセクションでは、上記セキュリティリスクを防ぐための具体的な設定方法を解説します。
対策1:denyルールで危険なコマンド・ファイルアクセスをブロック
Claude Codeには、特定の操作を許可・制限するためのパーミッション設定が用意されています。この設定は .claude/settings.json に記述でき、プロジェクト単位でClaude Codeの振る舞いを制御できます。
中でもdenyルールは、Claude Codeに実行させたくない操作を明示的にブロックするための設定です。
危険コマンドのブロック
まず、Claude Codeに実行させたくないコマンドを選定しましょう。.claude/settings.json に以下のように記述することで、Claude Codeに実行させたくないコマンドを明示的にブロックすることができます。
{
"permissions": {
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)",
"Bash(git push -f *)",
"Bash(chmod 777 *)",
"Bash(curl * | bash)",
"Bash(wget * | bash)"
]
}
}
-
rm -rf:ファイルの再帰的強制削除 -
sudo:管理者権限でのコマンド実行 -
git push -f:リモートリポジトリへの強制プッシュ -
curl | bash/wget | bash:リモートスクリプトの直接実行
これらはいずれも意図せず実行された場合に大きな被害を招くコマンドですので、denyルールに追加することをおすすめします。
⚠ 注意
denyルールはコマンド文字列の前方一致で評価されます。たとえば Bash(rm -rf *) は rm -rf から始まるコマンドをブロックしますが、bash -c "rm -rf *" のように別のコマンド経由で実行された場合はルールをすり抜ける可能性があります。denyルールだけに頼らず、後述のサンドボックスやネットワーク制限と組み合わせて多層的に防御することが大切です。
機密ファイルへのアクセス制限
次に、機密情報を含むファイルへの読み取りをブロックしましょう。
{
"permissions": {
"deny": [
"Read(./.env*)",
"Read(./secrets/**)",
"Read(~/.aws/**)",
"Read(~/.ssh/**)",
"Read(~/.config/gh/**)"
]
}
}
-
.env*:環境変数ファイル(APIキー、DBパスワード等) -
secrets/:シークレット管理ディレクトリ -
~/.aws/:AWSクレデンシャル -
~/.ssh/:SSH鍵 -
~/.config/gh/:GitHub CLIのトークン
これらのファイルにAIがアクセスできる状態は、情報漏洩に直結します。denyルールを設定することで確実にClaude Codeからのアクセスをブロックしましょう。
補足:パーミッションルールの評価順序
Claude Codeのパーミッション設定では、Deny → Ask → Allow の順でルールが評価されます。最初にマッチしたルールが優先されるため、denyルールに設定した内容は他の設定に関わらず確実にブロックされます(参考:公式ドキュメント)。
allowルールで広めに許可しておいて、denyルールでピンポイントにブロックするという使い方が効果的です。
対策2:サンドボックスでプロジェクト外への操作を防ぐ
Claude Codeを使っていると、コマンド実行のたびに承認プロンプトが表示されます。頻繁に表示されると「承認疲れ」が起き、内容を確認せずに許可してしまいがちです。
サンドボックスは、この問題をOSレベルの技術で解決するアプローチです。
サンドボックスを有効化すると、Claude Codeの操作がOS上の隔離された環境内で実行されます。これにより、プロジェクト外のファイルやシステムへの影響を制限でき、承認プロンプトの数も大幅に削減されます。
サンドボックスの有効化
.claude/settings.json に以下を追記することで、サンドボックスを有効化できます。
{
"sandbox": {
"enabled": true
}
}
有効化後は、Claude Codeの操作が隔離された環境内で実行されるようになります。対応OSや詳細な設定オプションについては公式ドキュメントを参照してください。
(任意)Escape Hatchの無効化
サンドボックスでは「Escape Hatch」という仕組みがデフォルトで有効になっています。これは、サンドボックス内で実行できない操作が発生した際に、サンドボックスの外での実行許可を求める仕組みです。
サンドボックスで制限した操作はClaude Codeに実行させない方針であれば、無効化しておきましょう。
{
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false
}
}
allowUnsandboxedCommands を false にすると、サンドボックス外での実行要求が発生しなくなります。完結できない操作はブロックされるため、より厳密なセキュリティを確保できます。
対策3:ネットワークのアクセス制限
サンドボックスのネットワーク制御を使うと、Claude Codeが通信できるドメインをホワイトリスト方式で制限できます。
意図しない外部サーバーへのデータ送信の防止やパッケージのダウンロード先を制限するために、許可するドメインを必要最小限に絞ります。
{
"sandbox": {
"network": {
"allowedDomains": [
"github.com",
"*.githubusercontent.com",
"*.npmjs.org",
"registry.yarnpkg.com",
"pypi.org"
]
}
}
}
上記の例では、以下のドメインのみ通信を許可しています。
-
github.com/*.githubusercontent.com:GitHubへのアクセス -
*.npmjs.org/registry.yarnpkg.com:npmパッケージのインストール -
pypi.org:Pythonパッケージのインストール
プロジェクトで利用するサービスに応じて、許可ドメインを適宜追加してください。ホワイトリストに含まれないドメインへの通信はブロックされるため、万が一プロンプトインジェクションを受けた場合でも、外部へのデータ送信リスクを大幅に低減できます。
まとめ
Claude Codeは強力なコーディングエージェントだからこそ、人間側で適切にハンドリングすることが大事です。
本記事で紹介した3つのセキュリティ設定を振り返ります。
| 対策 | 防げるリスク |
|---|---|
| denyルール | 破壊的コマンドの誤実行 機密ファイルの読み取り・漏洩 |
| サンドボックス | プロジェクト外への意図しない操作 |
| ネットワーク制限 | 意図しない外部サーバーへのデータ送受信 |
どれもすぐに設定できる内容ですので、Claude Codeを使い始める際は、まずこの3つを設定しておくことをお勧めします。
最後に、本記事で紹介した設定をまとめた .claude/settings.json の全体像を載せておきます。
プロジェクトの要件に応じて、denyルールや許可ドメインを適宜カスタマイズすることを推奨します。
{
"permissions": {
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)",
"Bash(git push -f *)",
"Bash(chmod 777 *)",
"Bash(curl * | bash)",
"Bash(wget * | bash)",
"Read(./.env*)",
"Read(./secrets/**)",
"Read(~/.aws/**)",
"Read(~/.ssh/**)",
"Read(~/.config/gh/**)"
]
},
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false,
"network": {
"allowedDomains": [
"github.com",
"*.githubusercontent.com",
"*.npmjs.org",
"registry.yarnpkg.com",
"pypi.org"
]
}
}
}









