1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeの許可設定から秘密情報を公開しないために

1
Last updated at Posted at 2026-11-11

Claude Codeの許可設定から秘密情報を公開しないために

2026年11月、セキュリティ企業Apiiroが、AIコーディングエージェントの設定ファイルや会話ログなどから、2,539件の秘密情報が公開GitHub上で見つかったと報告しました。1,994リポジトリにまたがる調査結果で、11月9日には国内でも報じられています。 Apiiroの調査原文(11月5日公開、11月8日追記)

今回取り上げるのは、その調査で報告されたClaude Codeの許可設定です。「今後は確認しない」を選んだコマンドにAPIキーやDBのパスワードが含まれていると、その値が設定に残ることがあります。そのファイルをコミットして公開リポジトリへpushすると、秘密情報も公開されてしまいます。

なお、2,539件はGit履歴や共有設定、会話ログなどを含む調査全体の数字です。すべてがClaude Codeの個人用設定ファイルから見つかったわけではなく、認証情報が実際に使えるかも検証されていません。

Claude CodeにAPIの疎通確認やDBの調査を頼んでいる方は、アプリのコードに加えて .claude/ の中も確認してみましょう。この記事では、設定ファイルがGitの管理対象になっていないかを調べ、秘密情報が見つかった場合の対処まで扱います。

実行を許可したコマンドが、設定ファイルに残る

Anthropic公式では、Bashコマンドで「Yes, and don’t ask again」を選び、永続的な許可を保存すると、.claude/settings.local.json にルールを書き込むと説明しています。毎回の確認を省くために、次回以降も参照する設定です。 公式の許可設定ドキュメント

Apiiroが報告したのは、秘密情報を含むコマンドがそのまま許可ルールとして保存されるケースです。許可の選択肢が npm test * のようなパターンなのか、秘密情報まで含む具体的なコマンドなのかで、保存される内容が変わります。

報告された経路を図にすると、次のようになります。設定への保存と、GitHubへの公開は別の段階です。

出典: Apiiroの報告。すべての承認で秘密情報が保存される、という図ではありません。

まず、設定ファイルがGitの管理対象かを確認する

調べるファイルは、少なくとも次の2つです。

ファイル 用途 確認すること
.claude/settings.local.json そのプロジェクトで使う個人用設定 Gitの追跡対象になっていないか、許可ルールに秘密情報がないか
.claude/settings.json チームで共有する設定 共有してよい値だけが入っているか

公式ドキュメントでは、Claude Codeが個人用ファイルを初めて書くとき、端末のグローバルなGit除外設定に追加すると説明しています。ただし、自分で作ったファイルには除外設定が必要です。共有用の settings.json はコミットして使う設計なので、こちらも中身を確認します。 設定ファイルの用途と保存先

Gitでは、すでに追跡しているファイルに .gitignore の除外指定は効きません。「localという名前だから」「除外設定があるから」だけでは判断できないので、追跡状態を確認してみましょう。 Git公式:gitignore

以下はリポジトリのルートで実行する例です。本文や秘密情報を表示せず、まずファイル名だけを調べます。

git ls-files -- .claude/settings.local.json .claude/settings.json

settings.local.json が表示されたら、現在のGitのインデックスに入っています。まだコミットしていない追加も含むため、この結果だけで「公開済み」とは判断しません。 Git公式:git ls-files

過去にコミットされた形跡も確認します。

git log --all --format='%h %ad' --date=short --name-only -- .claude/settings.local.json .claude/settings.json

出力があれば、そのコミットで設定ファイルが変更されています。手元にある履歴を調べるコマンドなので、浅いクローンや未取得のブランチ、別のクローンなどは網羅できません。出力がない場合も、過去の公開がなかった証明には使わず、GitHub側のブランチや履歴も確認してください。 Git公式:git log

ファイルが存在する場合はローカルのエディターで開き、permissions.allow にパスワード、トークン、認証情報付きの接続URLがないか確認します。共有設定では env など、許可ルール以外の値も確認対象です。見つけた値を、調査依頼のチャットやIssueへそのまま貼らないようにしてください。

公開していたら、先に認証情報を失効させる

秘密情報を含む設定が公開されていた場合、最初に行うのは、その認証情報の失効・再発行です。利用しているアプリやCIにも新しい値を反映し、古い値でアクセスできない状態にします。GitHubも、履歴の削除に取りかかる前に認証情報を失効・ローテーションするよう案内しています。 GitHub公式:機密データの削除

その後、現在の設定から秘密情報を含むルールを取り除きます。過去のコミットやフォーク、他の人のクローンに残った値は、現在のファイルを編集しただけでは消えません。履歴の書き換えが必要なら、共同作業者と手順を合わせて進めます。同じGitHub公式ページに、コミットIDが変わる影響や、古いクローンから秘密情報が再混入する注意点がまとまっています。

まだ外部へ共有していない場合も、秘密情報入りの設定を次のコミットに含めないよう、以下の追跡状態を整えましょう。

個人用の設定を追跡対象から外す

プロジェクトの .gitignore に、次の指定を追加します。すでに同じ指定がある場合は追加不要です。

**/.claude/settings.local.json

前の確認で settings.local.json が追跡対象だった場合だけ、次を実行します。

git rm --cached -- .claude/settings.local.json

--cached は、手元のファイルを残してインデックスから外す指定です。変更が競合してエラーになったら、表示された理由を確認してください。強制削除で進める必要はありません。 Git公式:git rm

最後に、この2つを確認します。

git ls-files -- .claude/settings.local.json
git check-ignore -v -- .claude/settings.local.json

1つ目が何も表示せず、2つ目で意図した .gitignore の除外ルールが表示されれば、個人用設定が追跡されず、除外ルールも適用されています。! で始まる否定パターンが出る場合は、除外が打ち消されていないか見直します。 Git公式:git check-ignore

.gitignore の追加と追跡解除の差分を確認してコミットします。これは今後の混入を防ぐ作業であり、過去の履歴から消す操作ではありません。チームで共有する .claude/settings.json は、秘密情報を取り除いたうえで必要な設定を残します。

次からは、承認するコマンドの「値」まで見る

APIキーを使う処理なら、キーをコマンドに直接書かず、実行環境から受け取る形にできないか確認しましょう。たとえば、自作のAPI確認スクリプトが API_TOKEN を環境変数から読み込むなら、Claude Codeに実行させるコマンドは次の形にできます。

python scripts/check_api.py

これは設計例です。スクリプト側で必要な変数がなければエラーにし、認証ヘッダーやトークンをログに出さないようにします。環境変数に移すだけで、AIや子プロセスから秘密情報が見えなくなるわけではありません。コマンド文字列に実値を埋め込まないことと、その実値へのアクセスを制限することは、それぞれ確認が必要です。

「常に許可」を選ぶ前は、実行内容に加えて、保存されるルールに実値が含まれないかを見ます。確認を減らすために Bash(*) などへ広げると、今度は許可する操作自体が広がってしまいます。必要なコマンドに範囲を絞っておきましょう。 公式のBash許可ルール

おわりに

次のコミット前に、まず git ls-files で .claude/settings.local.json が出てこないか確認してみてください。共有設定をレビューするときも、許可している操作と、そこに書かれた値を一緒に見ると、秘密情報の混入に気づきやすくなります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?