メインコンテンツへスキップ

Claude Code は既定で .env や ~/.aws/credentials の読み取りをブロックしますか?

いいえ。2026 年 10 月時点で、Claude Code のサンドボックスのドキュメントには組み込みの資格情報の拒否リストはないと書かれており、既定の読み取りアクセスでは ~/.aws/credentials や ~/.ssh/ などのファイルも読めます。他の CLI には、ツールごとに自分で書くオプトインの拒否設定があります。 CC Safety Net は、インストールした時点から .env ファイル、SSH 秘密鍵、クラウドの資格情報ストア、コーディングエージェントの認証トークンの読み取りをブロックします。独自の拒否パスも追加できます。 シークレット保護は、資格情報を含む可能性があるファイルの読み書きをブロックします。コマンド解析の前に動作し、すべての安全レベルに適用されます。ブロックすると、一致したルール ID がブロックメッセージと監査ログに記録されます。 登録済みのルールは 138 個あります。大部分は同じ ID パターンを共有する生成ファミリーに属するため、以下の表ではすべての ID ではなく、ファミリーとその ID の形式を示します。13 個のルールからなる Coding CLI 設定階層を除き、すべてのルールが既定で有効です。

動作する場所

シークレット保護は、シェルコマンドと、エージェントの読み取り、書き込み、編集、検索、パッチのツールを検査します。書き込みだけでなく読み取りもブロックするため、cat .env、strings id_rsa、dd if=.env はいずれもブロックされます。

ブロックされたファイルを許可する

保護対象のファイルを許可する方法は 2 つあります。ルール単位のオーバーライドは、1 つのルールをどこでも無効にします。許可パスは、指定したファイルやディレクトリを、コーディング CLI のルール以外のすべての組み込みルールから除外します。例として、パケットキャプチャーを captures/ に置いているプロジェクトを考えます。cat captures/session.pcap は secret.ext.pcap でブロックされます。
1

ルール ID を確認する

ルール ID はブロックメッセージに表示されます。npx -y cc-safety-net explain --json 'cat captures/session.pcap' を実行して ruleId を読み取ることもできます。
2

policy.json を自分で編集する

エージェントは policy.json を変更できないため、エディターかダッシュボードで編集します。ポリシーファイルを編集するを参照してください。ルールを無効にする場合は次のようにします。
1 つのディレクトリを除外する場合は次のようにします。
相対パスの許可パスは、ポリシーで説明しているとおり、設定時の作業ディレクトリを基準に解決されます。"captures/session.pcap" のような特定のファイル 1 つや、"~/code/**/.env.local" のようなフォルダー配下の 1 つのファイル名も指定できます。
3

変更を確認する

同じコマンドに対してもう一度 explain を実行します。許可と表示されれば完了です。
許可パスで、設定済みの拒否パスや secret.cli.* のルールが除外されることはありません。プロジェクトファイルで許可パスを追加したりルールを無効にしたりすると、CC Safety Net はそれを保護の弱化として報告します。オーバーライドの書き方はポリシーを、指定できるエントリはシークレットの許可パスを参照してください。

standard モードが読み取りと見なさないもの

standard モードでは、次の形は組み込みの機密パスの読み取りと見なしません。strict と paranoid では、これらもすべて読み取りとして扱います。どの形でも、設定済みの拒否パスは緩和されません。 こうした参照は、git check-ignore .env && git status --short のように複合コマンドの 1 つのセグメントであってもかまいません。次の場合は読み取りとして扱います。 ファイルの作成、tailscale と openssl の形、データのリテラルで緩和されるのは組み込みのファイル名ルールだけなので、ホームディレクトリやCoding CLI のパスはブロックされたままです。-i の鍵ファイルでは、ホームディレクトリと Coding CLI のルールも緩和されます。ssh、scp、sftp はいずれも鍵を認証にしか使わず、内容を出力しないためです。

一致順序

  • 設定済みの拒否パスを最初に検査し、常にそれが優先されます。
  • ホームディレクトリルールは env テンプレートと公開鍵の除外より優先されるため、~/.ssh/.env.example と ~/.ssh/id_rsa.pub はブロックされたままです。
  • コーディング CLI のルール(secret.cli.*)には許可パスが効きません。

ベース名ルール

9 個のルールが、どのディレクトリでも、ベース名が完全に一致するファイルをブロックします。 これらのルールには 2 つの境界があります。
  • secret.basename.credentials が一致するのは credentials という名前だけです。credentials.json は、このルールにもほかの組み込みルールにも一致しません。
  • id_dsa のベース名ルールはありません。ただし、名前がちょうど id_dsa のファイルは、後述する広範なパターン secret.pattern.ssh-key-basename によってブロックされます。
.env ファミリーを広げるパターンルールが 1 つあります。secret.pattern.env-variant は、.env.local、.env.production、.env.template.local など、.env. で始まるすべてのベース名をブロックします。ただし、除外されるテンプレートは対象外です。

ホームディレクトリルール

これらのルールは、ホームディレクトリ配下の場所を保護します。対象はそのディレクトリ自体と、その中のすべてです。 kube-config と docker-config には、名前を変えたバックアップを対象とする関連ルールがそれぞれ 8 個あります。ID の形式は secret.home.<slug>.<suffix> で、末尾は bak、backup、copy、disabled、old、orig、save、tmp のいずれかです。たとえば ~/.kube/config.bak は secret.home.kube-config.bak でブロックされます。

鍵ファイルの派生形ルール

鍵ファイルや資格情報ファイルを名前を変えてコピーしたものには、専用のルールファミリーがあります。id_rsa、id_dsa、id_ed25519、id_ecdsa、credentials の 5 つの保護対象の接頭辞から作られます。各 ID の <slug> は、接頭辞のアンダースコアをダッシュにしたものです(id-rsa、credentials など)。
  • 区切り文字の派生形。 5 個の secret.variant.<slug>.separator ルールは、接頭辞の後ろに - または _ と任意の文字が続く名前をブロックします。id_rsa-old、id_rsa_backup、credentials_prod などです。
  • ドット付きの拡張子の派生形。 50 個の secret.variant.<slug>.<suffix> ルールは、接頭辞の後ろに .bak、.backup、.copy、.disabled、.key、.old、.orig、.pem、.save、.tmp の 10 種類のいずれかが続く名前をブロックします。たとえば id_rsa.bak は secret.variant.id-rsa.bak で、credentials.pem は secret.variant.credentials.pem でブロックされます。
このファミリーは厳密に一致させるため、似た名前は通ります。id_rsafoo には区切り文字がなく、credentials.json の拡張子は一覧にありません。 このファミリーには広範なパターンも 1 つあります。secret.pattern.ssh-key-basename は、deploy_key_rsa や github_ed25519 のように、_rsa、_dsa、_ed25519、_ecdsa で終わる拡張子のないベース名をすべてブロックします。ドットを含む名前は一致しません。

拡張子ルール

secret.ext.<extension> という形式の ID を持つ 21 個のルールが、次の拡張子を持つファイルをすべてブロックします。 .agilekeychain, .asc, .bek, .cscfg, .fve, .gnucash, .jks, .keychain, .kwallet, .mdf, .ovpn, .p12, .pcap, .pem, .pfx, .pkcs12, .psafe3, .rdp, .sdf, .tblk, .tpm 3 個の拡張子パターンルールが、拡張子のファミリーを対象にします。 オーバーライドにはファミリーの ID を使います。secret.ext.keypair ではなく secret.ext-pattern.key です。登録されていない ID は、unknown secret protection rule id "<id>" で拒否されます。

Coding CLI 資格情報階層(既定で有効)

12 個のルールが、対応するコーディングエージェントの資格情報ストアを保護します。既定で有効です。 Antigravity には資格情報のルールがありません。唯一のルールは、次の設定階層にあります。

Coding CLI 設定階層(既定で無効)

13 個のルールが、同じエージェントの設定ファイルと MCP 設定ファイルを対象にします。これらのファイルには資格情報が直接書かれることがある一方で、エージェントが日常の作業として編集するファイルでもあります。そのため、この階層は既定で無効です。ルールを有効にするには secret_protection.overrides で "on" を指定します。有効にすると、<project> のパスはどのリポジトリルートでも一致します。 config.json はよくある名前なので、これに一致するルールはそれぞれ 1 つのディレクトリに限定しています。secret.cli.opencode.config が一致するのは ~/.config/opencode の中だけ、secret.cli.devin.config が一致するのは ~/.config/devin の中だけです。このページに挙げていないディレクトリの config.json は許可されたままです。

拒否パス

secret_protection.deny_paths を使うと、独自の保護対象のファイルやディレクトリを追加できます。一致すると secret.deny-path でブロックされます。オーバーライドでも除外でも緩和されません。無効になるのは、secret_protection.enabled: false でシークレット保護全体を無効にした場合だけです。

除外

上記のルールには 3 つの除外があります。どれも、設定済みの拒否パスを緩和しません。

設定

設定はすべて policy.json で行います。 破壊的コマンド側の許可パスでは、シークレット保護は緩和されません。同じ設定はダッシュボードの UI からも編集できます。
シークレット保護は範囲を限定したパターンの集合であり、読み取り全般の境界ではありません。どのルールも認識しないファイルにある資格情報は保護されません。CC Safety Net が対処できない範囲を参照してください。ログとブロックメッセージから資格情報の値を取り除くシークレットのマスク処理は、別の仕組みです。シークレットのマスク処理を参照してください。
最終更新日 2026年11月9日