安全ベストプラクティス¶
Claude Code は強力な AI プログラミングアシスタントですが、「強力」だからこそ、高いシステム権限が必要です — ファイルの読み書き、コマンドの実行、ネットワークへのアクセス。これは、新人に管理者アカウントを付与するようなものです:非常に高い能力を持っていますが、適切なセキュリティ境界を設定する必要があります。
このドキュメントでは、個人利用からチームコラボレーション、開発環境から CI/CD 自動化まで、完全なセキュリティ防御を構築する方法説明します。AI プログラミングの効率性を享受しながら、セキュリティの問題を回避できるようにします。
Claude Code のセキュリティモデルを理解する¶
Claude Code はローカルターミナルで動作する¶
これは非常に重要であり、すべてのセキュリティ対策を理解するための基盤です:Claude Code はクラウド上のサンドボックスで動作するのではなく、あなたのローカルターミナルで直接動作します。
これは以下を意味します:
- マシン上の任意のファイルを読み取れます(ユーザーの権限がある限り)
- 任意の Shell コマンドを実行できます
- 環境変数にアクセスできます(そこにある可能性のあるキーを含む)
- ネットワークでデータを送受信できます
もちろん、Claude Code にはこれらの能力を制限する組み込みのセキュリティメカニズムがあります。しかし、この基本事実を常に念頭に置いてください:その権限の上限はユーザーの権限です。
権限承認メカニズム¶
Claude Code のコアセキュリティ哲学はヒューマン・イン・ザ・ループ(Human in the Loop)です。デフォルトでは、以下の操作を実行する際に確認を求めます:
- ツールの初回使用時
- Shell コマンドの実行時(特に事前に承認していないもの)
- 新規ファイルの書き込みまたは既存ファイルの変更時
- ネットワークリソースへのアクセス時
表示される権限リクエストは概ね次のようになります:
Claude wants to run: rm -rf node_modules && npm install
Allow?
(y) Yes, allow once
(a) Always allow "npm install" commands
(n) No, deny
重要な原則:ある操作が安全かどうか不明な場合は"No"を選択してください。常に、内容を理解してから承認することができます。
三層の防御¶
Claude Code のセキュリティシステムは三層の防御で構成されています:
第一層:パーミッションモード(グローバルポリシー)
↓
第二層:Allow/Deny ルール(精细制御)
↓
第三層:Hooks(カスタム遮断ロジック)
以下で詳しく説明します。
権限設定¶
四種類のパーミッションモードの比較¶
Claude Code は四種類のパーミッションモードを提供しており、セキュリティレベルは高い方から低い方へ並んでいます:
| モード | ファイル編集 | コマンド実行 | 適用シナリオ | セキュリティレベル |
|---|---|---|---|---|
plan |
禁止 | 禁止(読み取り専用) | コードレビュー、アーキテクチャ分析 | 最高 |
default |
初回確認 | 毎回確認 | 日常開発 | 高 |
acceptEdits |
自動承認 | 毎回確認 | ファイルを頻繁に変更するタスク | 中 |
bypassPermissions |
自動承認 | 自動承認 | CI/CD、信頼できる環境 | 低 |
各モードの詳細:
plan モード:Claude はコードの検索と閲覧만 가능で、何も変更できません。Claude にコードを分析させたいが、什么东西も触ってほしくないシナリオに適しています。Shift+Tabで此のモードに切り替えられます。
default モード:推奨の日常モードです。Claude が初めて某種のツールを使用する際に確認を求め、同類の操作は承認後繰り返し確認しません。Shell コマンドは毎回確認を求めます。
acceptEdits モード:Claude のファイル編集能力を信頼하지만、コマンド実行には警戒を維持します。Claude にコードファイルを大量に修改させたいが、随意にコマンドを実行されたくないシナリオに適しています。
bypassPermissions モード:すべての権限チェックをスキップします。現在のタスクを完全に信頼している場合、または隔離された CI/CD 環境で만使用してください。
/permissions で確認と変更¶
Claude Code でいつでも /permissions を入力すると、現在の権限状態を確認できます:
/permissions
出力には現在のモード、承認されたツール、Allow/Deny ルールなどが表示されます。
settings.json での権限設定¶
権限設定は settings.json に保存され、两个のレベルがあります:
ユーザー級(全プロジェクトに適用):~/.claude/settings.json
プロジェクト級(現在のプロジェクトのみに適用):.claude/settings.json
{
"permissions": {
"defaultMode": "default",
"allow": [
"Bash(npm run lint)",
"Bash(npm run test:*)",
"Bash(git status)",
"Bash(git add:*)",
"Bash(git diff:*)",
"Bash(git log:*)",
"Bash(node:*)",
"Bash(python:*)"
],
"deny": [
"Bash(rm -rf:*)",
"Bash(git push --force:*)",
"Bash(curl:*)",
"Bash(wget:*)",
"Read(.env)",
"Read(.env.*)",
"Read(secrets/**)"
]
}
}
ルール構文の説明:
| 構文 | 意味 | 例 |
|---|---|---|
Bash(cmd) |
コマンドの完全一致 | Bash(npm run lint) |
Bash(cmd:*) |
コマンドプレフィクスの一致 | Bash(git log:*) は git log で始まるすべてのコマンドに一致 |
Read(path) |
ファイル読み取りの一致 | Read(.env) |
Write(path) |
ファイル書き込みの一致 | Write(src/**) |
** |
複数レベルのディレクトリワイルドカード | Read(secrets/**) は secrets 以下の全レベルのファイルに一致 |
* |
単層ワイルドカード | Read(.env.*) は .env.local、.env.production などに一致 |
重要:Deny ルールの優先度は Allow ルールより高いです。たとえ Allow で某个操作を承認しても、同時に Deny ルールに一致する場合は仍然拒绝されます。
機密ファイルの保護¶
.claudeignore で機密ディレクトリを除外¶
.claudeignore ファイルの構文は .gitignore と同じで、列入された文件和ディレクトリは Claude Code に対して完全に不可視になります:
プロジェクトルートディレクトリに .claudeignore を作成します:
# 環境変数とキー
.env
.env.*
secrets/
*.pem
*.key
*credentials*
# 機密設定
config/production.yml
config/secrets.yml
# 個人データ
data/users/
*.sqlite
*.db
# その他の機密ディレクトリ
.aws/
.ssh/
.gnupg/
注意:.claudeignore を使用すると、Claude はこれらのファイルを完全に認知できなくなります — これらのファイルが存在することすらわかりません。これは Deny ルールよりもさらに彻底的です。
Hooks を使用して機密ファイルへの変更を遮断¶
特定のファイルを Claude に読み取らせたいが変更はさせたくない場合、Hooks を使用して精细な制御を実現できます:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "python3 -c \"\nimport sys, json, os\ntool_input = json.loads(os.environ.get('TOOL_INPUT', '{}'))\npath = tool_input.get('file_path', '') or tool_input.get('path', '')\nprotected = ['.env', 'credentials', 'secret', '.pem', '.key']\nfor p in protected:\n if p in path.lower():\n print(f'BLOCKED: {p} を含むファイルの変更は許可されていません', file=sys.stderr)\n sys.exit(2)\n\""
}
]
}
]
}
}
この Hook は、Claude がファイルの書き込みまたは編集を試みる前にファイルパスをチェックし、パスに機密キーワードが含まれている場合は操作を遮断します(exit code 2 は遮断を示します)。
設定テンプレートを守る¶
チームプロジェクトの場合、リポジトリに保存する標準のセキュリティ設定ファイルを作成することをお勧めします:
// .claude/settings.json(Git にコミット)
{
"permissions": {
"deny": [
"Read(.env)",
"Read(.env.*)",
"Read(secrets/**)",
"Read(**/*.pem)",
"Read(**/*.key)",
"Write(.git/**)",
"Bash(rm -rf:*)",
"Bash(git push --force:*)",
"Bash(git reset --hard:*)",
"Bash(chmod 777:*)",
"Bash(curl|wget:*)"
]
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$TOOL_INPUT\" | python3 -c \"import sys,json; cmd=json.load(sys.stdin).get('command',''); blocked=['DROP TABLE','DELETE FROM','TRUNCATE','password','token','secret']; [sys.exit(2) for b in blocked if b.lower() in cmd.lower()]\""
}
]
}
]
}
}
コマンド実行のセキュリティ¶
Bash ツールの動作を理解する¶
Claude Code は Bash ツールを通じて Shell コマンドを実行します。デフォルトでは、事前承認されたコマンド除き,每次実行마다確認を求められます。
注意すべき動作:
- コマンドは現在の Shell 環境で実行されます
- 環境変数はコマンドから参照可能です
- コマンドはファイルシステムを修改できます
- コマンドはソフトウェアをインストールできます
- コマンドはネットワークにアクセスできます
自動承認されるコマンド¶
settings.json の allow リストに某个コマンドパターンを追加すると、一致するコマンドは自動的に実行され、確認を求めなくなります。
推奨の自動承認安全コマンド:
{
"permissions": {
"allow": [
"Bash(git status)",
"Bash(git diff:*)",
"Bash(git log:*)",
"Bash(git branch:*)",
"Bash(ls:*)",
"Bash(cat:*)",
"Bash(head:*)",
"Bash(tail:*)",
"Bash(wc:*)",
"Bash(find:*)",
"Bash(grep:*)",
"Bash(npm run lint:*)",
"Bash(npm run test:*)",
"Bash(python -m pytest:*)"
]
}
}
危険なコマンドの遮断¶
以下のコマンドは常に Deny リストに入れ、自动実行を許可しないでください:
{
"permissions": {
"deny": [
"Bash(rm -rf:*)",
"Bash(rm -r /:*)",
"Bash(git push --force:*)",
"Bash(git push -f:*)",
"Bash(git reset --hard:*)",
"Bash(git checkout -- .:*)",
"Bash(git clean -f:*)",
"Bash(chmod 777:*)",
"Bash(chown:*)",
"Bash(dd:*)",
"Bash(mkfs:*)",
"Bash(shutdown:*)",
"Bash(reboot:*)"
]
}
}
Hooks でのカスタムコマンド遮断¶
より複雑な遮断ロジックには、Hooks を使用します:
例 1:すべてのネットワークリクエストコマンドを遮断
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$TOOL_INPUT\" | python3 -c \"\nimport sys, json\ncmd = json.load(sys.stdin).get('command', '')\nnet_cmds = ['curl', 'wget', 'nc ', 'netcat', 'ssh ', 'scp ', 'rsync']\nfor nc in net_cmds:\n if nc in cmd:\n print(f'BLOCKED: ネットワークコマンド ({nc}) の実行は許可されていません', file=sys.stderr)\n sys.exit(2)\n\""
}
]
}
]
}
}
例 2:すべてのコマンドを監査ログに記録
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$(date '+%Y-%m-%d %H:%M:%S') [Bash] $TOOL_INPUT\" >> ~/.claude/audit.log"
}
]
}
],
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "echo \"$(date '+%Y-%m-%d %H:%M:%S') [FileChange] $TOOL_INPUT\" >> ~/.claude/audit.log"
}
]
}
]
}
}
これで完全な操作監査ログが取得でき、いつでも Claude Code が何をしたかを確認できます。
API キーのセキュリティ¶
CLAUDE.md に API キーをハードコードしない¶
これが最も一般的なセキュリティエラーです。CLAUDE.md ファイルは通常 Git リポジトリにコミットされ、Claude Code は每次起動時にこれを読み取ります。もし API キーが含まれている場合:
- キーは Git 履歴にコミットされます(後から削除しても)
- キーは Claude Code から参照可能で、ログや分析結果に表示される可能性があります
- チームの他のメンバーがこのキーを確認できます
誤った方法:
<!-- CLAUDE.md -->
## API 設定
データベース接続:postgresql://admin:P@ssw0rd@localhost:5432/mydb
OpenAI キー:sk-xxxxxxxxxxxxxxxxxxxx
正しい方法:
<!-- CLAUDE.md -->
## API 設定
- データベース接続と API キーは .env ファイルで管理
- .env ファイルは Git にコミットしない(.gitignore に含まれる)
- 新規開発者は .env.example をコピーして自分の認証情報を入力
環境変数でキーを管理¶
推奨のキー管理方法:
# .env(Git にコミットしない)
DATABASE_URL=postgresql://admin:P@ssw0rd@localhost:5432/mydb
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
REDIS_URL=redis://localhost:6379
# .env.example(Git にコミット、实际の値なし)
DATABASE_URL=postgresql://user:password@localhost:5432/dbname
OPENAI_API_KEY=sk-your-key-here
REDIS_URL=redis://localhost:6379
.env が .gitignore と .claudeignore にあることを確認します:
# .gitignore
.env
.env.local
.env.production
# .claudeignore(.env を Claude に読み取らせたくない場合)
.env
.env.*
API キーが漏れた場合の対処手順¶
API キーが漏れた疑いがある場合(誤って Git にコミットしてしまったなど)、直ちに以下の手順を実行してください:
1. 即座にキーをローテーション
- 該当サービスのコンソールで新しい API キーを生成
- 当該キーを使用するすべての環境変数を更新
2. Git 履歴から削除
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch .env" \
--prune-empty --tag-name-filter cat -- --all
またはより安全な BFG Repo-Cleaner を使用:
bfg --delete-files .env
git reflog expire --expire=now --all
git gc --prune=now --aggressive
3. 清理後の履歴を強制プッシュ
git push --force --all
4. 異常使用を確認
- API 使用ログを確認し、異常な呼び出しがないかをチェック
- 請求記録を確認し、異常な請求がないかをチェック
5. チームに通知
- すべての開発者にリポジトリを再クローンするよう告知
- すべてのデプロイ環境のキーを更新
チームセキュリティ規範¶
共有 settings.json テンプレート¶
チーム用の統一セキュリティベースライン設定を作成し、プロジェクトリポジトリの .claude/settings.json にコミットします:
{
"permissions": {
"defaultMode": "default",
"allow": [
"Bash(npm run:*)",
"Bash(git status)",
"Bash(git diff:*)",
"Bash(git log:*)",
"Bash(python -m pytest:*)"
],
"deny": [
"Read(.env)",
"Read(.env.*)",
"Read(secrets/**)",
"Read(**/*.pem)",
"Read(**/*.key)",
"Read(**/*credential*)",
"Write(.git/**)",
"Bash(rm -rf:*)",
"Bash(git push --force:*)",
"Bash(git reset --hard:*)",
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(ssh:*)",
"Bash(scp:*)"
]
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$(date -Iseconds) TOOL_USE: $TOOL_INPUT\" >> .claude/audit.log"
}
]
}
]
}
}
チームメンバーは ~/.claude/settings.json(ユーザー級)で個人設定を追加できますが、项目級の Deny ルールは上書きできません。
CI/CD でのセキュリティ設定¶
CI/CD 環境(Headless モード)で Claude Code を使用する場合、セキュリティ設定は特に重要です:
# GitHub Actions の例
name: AI Code Review
on: [pull_request]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Claude Code Review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
claude --print --dangerously-skip-permissions \
"本次 PR のコード変更をレビューし、セキュリティとコード品質の評俩を提供してください" \
< /dev/null
CI/CD セキュリティ注意事項:
| 注意事項 | 説明 |
|---|---|
| API キー管理 | CI/CD プラットフォームの Secrets 管理を使用(GitHub Secrets など)、ハードコード禁止 |
| 最小権限 | CI 環境での Claude Code は読み取り専用権限のみを持ち、コードを変更しない |
| ネットワーク隔離 | CI 環境のアウトバウンドネットワークアクセスを制限 |
| タイムアウト設定 | 異常な長時間実行を防ぐため、適切な実行時間上限を設定 |
| ログ清理 | CI ログに機密情報が含まれないことを確認 |
Headless モードのセキュリティ注意事項¶
Headless モード(--print または -p)は非対話型シナリオ用で、ヒューマン・イン・ザ・ループによる操作確認がありません。使用時は特に注意が必要です:
# 안전한 Headless 使用法 — 読み取り専用操作
claude --print "src/ ディレクトリのコード構造を分析"
# 書き込み操作が必要な場合、具体的にファイルを限定
claude --print "src/utils.py の型エラーを修正"
# --dangerously-skip-permissions 使用時はリスクをよく理解していること
claude --print --dangerously-skip-permissions "npm test を実行"
--dangerously-skip-permissions この引数名がこんなに長いのは、あなたに警告ためです:権限チェックをスキップすることは危険です。入力プロンプトを完全に制御しており、考えられる操作を完全に理解している場合に만使用してください。
エンタープライズセキュリティ¶
ネットワークアクセス制御¶
厳格なネットワークセキュリティポリシーがある場合、以下の方法で Claude Code のネットワークアクセスを制御できます:
1. プロキシ設定
環境変数で HTTP プロキシを設定すると、すべてのネットワークリクエストがプロキシを経由し、監査と制御が容易になります:
# .bashrc または .zshrc に設定
export HTTP_PROXY=http://proxy.company.com:8080
export HTTPS_PROXY=http://proxy.company.com:8080
export NO_PROXY=localhost,127.0.0.1,.company.com
2. ファイアウォールルール
企業ファイアウォールでは、Claude Code に必要なドメインのみを許可できます:
# 必須許可ドメイン
api.anthropic.com # Anthropic API
*.claude.ai # Claude サービス
# オプション許可(使用する機能による)
registry.npmjs.org # npm パッケージインストール
pypi.org # Python パッケージインストール
github.com # Git 操作
3. settings.json でネットワークコマンドを禁止
追加のセキュリティレイヤーとして、Deny ルールで一般的なネットワークツールを禁止します:
{
"permissions": {
"deny": [
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(nc:*)",
"Bash(ssh:*)",
"Bash(scp:*)",
"Bash(rsync:*)",
"Bash(ftp:*)",
"Bash(telnet:*)"
]
}
}
ログ監査¶
コンプライアンス要件が高い企業では、完全な監査ログシステムを構築することをお勧めします:
1. 操作ログ
Hooks ですべてのツール呼び出しを記録します:
{
"hooks": {
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "python3 -c \"\nimport json, os, datetime\nlog_entry = {\n 'timestamp': datetime.datetime.now().isoformat(),\n 'user': os.environ.get('USER', 'unknown'),\n 'tool': os.environ.get('TOOL_NAME', 'unknown'),\n 'input': os.environ.get('TOOL_INPUT', '')[:500]\n}\nwith open(os.path.expanduser('~/.claude/audit.jsonl'), 'a') as f:\n f.write(json.dumps(log_entry, ensure_ascii=False) + '\\n')\n\""
}
]
}
]
}
}
2. セッションログ
Claude Code 自体がセッション履歴を保持し、~/.claude/ ディレクトリに保存されます。企業はこれらのログを定期的にバックアップできます。
3. 変更追跡
Git と組み合わせると、すべてのファイル変更に完全な追跡記録があります。Claude Code による変更は每次独立ブランチで実行し、PR フローでマージすることをお勧めします。
コンプライアンスの考慮事項¶
AI プログラミングツールの使用は以下のコンプライアンス問題に関わる可能性があります:
データセキュリティ
| リスク | 対策 |
|---|---|
| コードのクラウドアップロード | Claude Code は API リクエストのコンテキスト除き、コードを Anthropic サーバーにアップロードしません |
| 機密データの漏えい | .claudeignore を使用して機密ファイルを排除;Deny ルールで .env とキーファイルの読み取りを遮断 |
| API リクエスト内の機密情報 | パスワード、Token などの機密情報を会話に貼り付けない |
知的財産権
- Claude Code の出力(生成されたコード)は使用者所有
- Claude が生成したコードが著作権で保護された內容を含まないか確認注意
- 重要なビジネスコードは、使用前に手動レビューをお勧めします
業界コンプライアンス
- 金融、医療などの規制業界では、AI 使用に追加の制限がある可能性があります
- あなたの組織に AI ツールの使用に関するポリシーがあるか確認
- コンプライアンス監査のニーズに応えるため監査ログを維持
セキュリティ設定早見表¶
最後になりましたが、セキュリティ設定のクイックリファレンスです:
個人開発者の最低セキュリティ設定¶
{
"permissions": {
"deny": [
"Read(.env)",
"Read(.env.*)",
"Bash(rm -rf:*)",
"Bash(git push --force:*)"
]
}
}
チームプロジェクト推奨設定¶
{
"permissions": {
"defaultMode": "default",
"allow": [
"Bash(npm run:*)",
"Bash(git status)",
"Bash(git diff:*)",
"Bash(git log:*)"
],
"deny": [
"Read(.env)",
"Read(.env.*)",
"Read(secrets/**)",
"Read(**/*.pem)",
"Write(.git/**)",
"Bash(rm -rf:*)",
"Bash(git push --force:*)",
"Bash(git reset --hard:*)",
"Bash(curl:*)",
"Bash(wget:*)"
]
}
}
高セキュリティエンタープライズ設定¶
{
"permissions": {
"defaultMode": "default",
"allow": [
"Bash(npm run lint)",
"Bash(npm run test)",
"Bash(git status)",
"Bash(git diff)"
],
"deny": [
"Read(.env)",
"Read(.env.*)",
"Read(secrets/**)",
"Read(**/*.pem)",
"Read(**/*.key)",
"Read(**/*credential*)",
"Read(**/*password*)",
"Write(.git/**)",
"Write(.github/**)",
"Bash(rm:*)",
"Bash(git push:*)",
"Bash(git reset:*)",
"Bash(git checkout -- :*)",
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(ssh:*)",
"Bash(scp:*)",
"Bash(nc:*)",
"Bash(python -c:*)",
"Bash(node -e:*)",
"Bash(eval:*)",
"Bash(exec:*)",
"Bash(sudo:*)",
"Bash(chmod:*)",
"Bash(chown:*)"
]
},
"hooks": {
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "python3 -c \"import json,os,datetime; f=open(os.path.expanduser('~/.claude/audit.jsonl'),'a'); f.write(json.dumps({'ts':datetime.datetime.now().isoformat(),'user':os.environ.get('USER','?'),'tool':os.environ.get('TOOL_NAME','?'),'input':os.environ.get('TOOL_INPUT','')[:500]},ensure_ascii=False)+'\\n'); f.close()\""
}
]
}
]
}
}
よくある質問¶
Q:Claude Code はコードを Anthropic のサーバーに送信しますか?
A:Claude Code は Anthropic と API 経由で通信しており、会话コンテキスト(あなたが引用したコード断片を含む)は API リクエストの一部として送信されます。しかし、Anthropic は API を通じて提出されたデータをモデルのトレーニングに使用しません(Anthropic の利用規約に従います)。QCode などのリレーサービスを使用している場合は、当該サービスのプライバシーポリシーをご確認ください。
Q:settings.json の Deny ルールは Claude によってバイパスできますか?
A:正常使用下ではできません。Deny ルールはシステムレベルで強制執行되며、Claude はプロンプトエンジニアリングやその他の方法でバイパスできません。ただし、bypassPermissions モードを手動で選択したり、--dangerously-skip-permissions パラメータを使用した場合、これらのルールはもはや有効ではありません。
Q:.claudeignore と Deny ルールの違いは何ですか?
A:.claudeignore は Claude がファイルの存在を完全に認知できなくします(Git にとっての .gitignore のようなもの)。一方、Deny ルールは Claude がアクセスを試みた時点で拒否します。Claude に特定のファイルが存在することすら知られたくない場合は .claudeignore を使用し、単に変更されたくない場合は Deny ルールを使用します。
Q:複数人コラボレーション時、それぞれの設定が異なる場合はどうすればいいですか?
A:プロジェクト級の .claude/settings.json を Git にコミットし、チームが統一されたセキュリティベースラインを共有できるようにします。個人の ~/.claude/settings.json で追加設定できますが、项目級の Deny ルールは上書きできません。
Q:Docker コンテナで Claude Code を使用するとより安全になりますか?
A:はい。Docker は追加の隔離レイヤーを提供し、Claude Code が予期しない操作を実行しても、影響はコンテナ内に制限されます。コンテナでは以下を推奨します:ソースコードディレクトリを読み取り専用でマウント、ネットワークアクセスを制限、非 root ユーザーで実行。