Claude Code 2.1.221では、LinuxおよびWSL2のユーザーが、サンドボックス化されたコマンドが読み取る前に認証情報ファイルをマスキングできるようになりました。この機能は、コマンドに対して無害なセンチネル(番兵)コピーを提供し、許可されたリクエストがプロキシを通過する場合にのみ、実際のシークレットと入れ替えます。
マスキングフローの仕組み
- センチネル(番兵)コピー – ファイルがマスキング対象としてマークされると、Claude Codeは実際のシークレットの代わりにプレースホルダー文字列を含む複製を作成します。
- プロキシによる入れ替え – サンドボックスはTLS終端プロキシの背後で実行されます。サンドボックスが
injectHostsリストのエントリに一致するリクエストを発行した場合、プロキシはリクエストがマシンを離れる前に、プレースホルダーを実際のトークンに置き換えます。 - エラーハンドリング – 抽出用の正規表現がシークレットを見つけられなかった場合、サンドボックスは元のファイルが露出したまま処理を続行するのではなく、中断することができます。
このアプローチはLinuxおよびWSL2でのみ動作します。macOSでは現在、デフォルトで「ハード・デナイ(拒否)」となっており、サンドボックスはファイルを全く読み取ることができません。
安全なロールアウトのためのチェックリスト
バージョンの確認
- Claude Code 2.1.221以降を実行していることを確認してください。ターミナルに表示されるバージョン文字列が唯一の信頼できる方法です。パッケージのロックファイルは誤解を招く可能性があります。
使い捨てのトークンを使用する
- メインのGitHubやクラウドの認証情報で実験を行わないでください。無害な「カナリア」エンドポイントを指す短寿命のトークンを作成し、問題が発生した場合は即座に無効化してください。
適切なマスキングモードを選択する
| モード | 使用場面 |
|---|---|
| File Deny | 強制ブロック。読み取りの試行はすべて失敗します。 |
| Whole-File Mask | ファイルに単一のシークレット(例:プレーンテキストのAPIキー)が含まれている場合。 |
| Structured Mask | ファイルにシークレットと他のデータ(JSON、YAML、.netrc)が混在している場合。extractモードを使用し、シークレットをグループ1でキャプチャする正規表現を使用してください。これにより、クライアントプログラムにとって周囲の構文が有効なまま保たれます。 |
厳格なエラールールを設定する
onExtractNoMatchをerrorに設定してください。正規表現が一致しない場合、サンドボックスは停止します。デフォルトのwarnのままにしておくと、元のファイルが気づかれないうちに露出してしまう可能性があります。
TLS終端を有効にする
- 入れ替えを実行するには、プロキシがTLSを終端する必要があります。TLS終端がないと、プロキシはリクエストのペイロードを確認できず、置換が行われません。
ホストの範囲を絞り込む
injectHostsには、allowedDomainsから明示的なホスト名を指定してください。*.example.comのようなワイルドカードは避けてください。広範なパターンは攻撃対象領域(アタックサーフェス)を広げ、マスキングの目的を損ないます。
結果を確認する
- ログ、プロセスの引数、エラーメッセージをスキャンして、実際のトークンが表示されていないか確認してください。それらのアーティファクトに現れる値は、センチネルのみである必要があります。
注意すべき制限事項
マスキングは、サンドボックス化されたコマンドのファイルシステムからの視点に対してのみトークンを保護します。コマンドによる任意のネットワークコールを阻止するものではなく、特権アクセスを持つ可能性のあるClaudeの組み込みツールからも保護するものではありません。
まとめ
Claude Code 2.1.221の認証情報マスキング機能は、LinuxおよびWSL2の開発者に対し、サンドボックス化されたプロセスからシークレットを排除するための実用的な手段を提供します。
