Whim on Vim

/ log

Claude Code の安全な使い方

クロードは使い慣れるほど、確認を省いて何でも任せがちになります。そういった場面で起こりやすいインシデントを未然に防ぐために、しっかりとガードレールを設計しておくことが重要です。 最小セットの参考 [ ] Managed設定に disableBypassPermissionsMode: "disable" を入れる [ ] .env / ~/.ssh / ~/.aws の読み取りをdenyする [ ] sandbox.enabled: true にする [ ] claude doctor と /status で読み込まれていることを確認する

Claude Code の安全な使い方

クロードは使い慣れるほど、確認を省いて何でも任せがちになります。そういった場面で起こりやすいインシデントを未然に防ぐために、しっかりとガードレールを設計しておくことが重要です。

"With great power comes great responsibility" — Spider-Man (Amazing Fantasy #15, 1962)

安全の為の階層構造

クロードの挙動を制御するための設定ファイルは、複数のレイヤーに配置することができます。優先順位が強い順に並べると次のようになります。

  1. マネージドスコープ : managed-settings.json
  2. コマンドライン引数
  3. ローカルスコープ: your-project/.claude/settings.local.json
  4. プロジェクトスコープ: your-project/.claude/settings.json
  5. ユーザースコープ: ~/.claude/settings.json

Managed層にある設定ファイルは、OSのシステム設定領域に入っているため、管理者権限でないと編集することができません。一番強力なルールとなります。

その次に強いのが起動時のコマンドライン引数、続いてプロジェクト(特定のフォルダー)ごとに置く設定ファイルです。プロジェクト内では、Gitにコミットしない個人用の settings.local.json が、チームで共有する settings.json より優先されます。

そして意外かもしれませんが、ユーザースコープ(~/.claude/settings.json)は一番弱いレイヤーです。全プロジェクト共通のデフォルトとして機能し、プロジェクト側の設定で上書きされます。

managed-settings.json の参考

{
  "permissions": {
    "disableBypassPermissionsMode": "disable",
    "deny": [
      "Read(./.env)",
      "Bash(su *)"
    ]
  },
  "claudeMd": "業務ポリシー: クライアントの個人情報・認証情報・未公開の見積内容をプロンプトに含めない。本番環境への適用は必ず人間の確認を経る。"
}

disableBypassPermissionsMode を disable にすると --dangerously-skip-permissions(bypassモード)を拒否できます。

deny は allow よりも強いです。また、bypassモードにも有効です。

claudeMd は managed 層に置く settings.json 専用のキーで、ユーザースコープやプロジェクトスコープには使いません。

"ask": [
  "Bash(curl *)",
  "Bash(wget *)"
],
"allow": [
  "Bash(npm run build)"
]

その他にも permissions 内で ask や allow を使って細かく権限の設定をしていくことが可能です。

※ask に入れたコマンドはどのモードでも必ず確認が出る

Sandbox

sandbox をオンにして a/b/c の c で claude を立ち上げた場合、claude は a や b にはアクセスできなくなります。

また、deny はコマンドを走らせる前のゲートキーパーですが、sandbox はOSレベル(macOSはSeatbelt、Linuxはbubblewrap)のゲートキーパーです。

検証コマンド

設定ファイルが読み込まれているか、有効になっているかをテストします。

/status
# セッション内でどのファイルから読み込まれているか確認

/permissions
# 有効になっているパーミッションルールの一覧

claude --dangerously-skip-permissions -p "echo test"
# bypassが止まるかテスト

最小セットの参考

  • [ ] Managed設定に disableBypassPermissionsMode: "disable" を入れる
  • [ ] .env / ~/.ssh / ~/.aws の読み取りをdenyする
  • [ ] sandbox.enabled: true にする
  • [ ] claude doctor/status で読み込まれていることを確認する

参考リソース

Takaaki Yoneda

環境保全、グラフィックデザイン、マーケティングなどプログラミング以外にも幅広い興味を持ったソフトウェアエンジニアです。 最近の趣味は、ボードゲームと登山