AI エージェントに鍵を渡しても大丈夫か — 除外設定
5 分で読む
Claude Code や Codex などの AI エージェントは、手元のファイルを読み、コマンドを動かします。そこに API キーを渡しても大丈夫か。5 つの道具の文書と、報告されている事例で確かめました。
まず、言葉をそろえる
| 言葉 | 意味 |
|---|---|
| AI エージェント | 指示を受けて、自分でファイルを読み、コマンドを動かして作業を進める AI。Claude Code・Codex・Gemini CLI・GitHub Copilot・Cursor など |
| 除外設定 | AI に読ませたくないファイルを並べておく設定 |
| シェル・コマンド | パソコンに文字で命令する画面(シェル)と、そこに打つ命令(コマンド)。AI エージェントもこれで作業する |
| スクリプト | コマンドをまとめて書いた、小さなプログラム |
| 環境変数 | プログラムを動かすときに、外から渡しておく設定の値。API キーを入れることが多い |
| .env | 環境変数に入れる値を書いておくファイル。API キーやパスワードが入る |
| MCP | AI に外のサービスや道具をつなぐための決まり |
| OAuth | 固定の鍵の代わりに、期限と範囲を決めて許可を出す仕組み |
除外設定は、どこまで効くか
除外設定がそのまま効くのは、AI の道具に組み込まれた「ファイルを読む」機能です。Claude Code は、cat のようにファイル名を名指しするコマンドも止めます。 出典を開く確認 2026-10-04 出典を開く確認 2026-10-04Claude Code Docs(Configure permissions)原文
Read and Edit deny rules apply to Claude’s built-in file tools, to file commands Claude Code recognizes in Bash, such as cat, head, tail, sed, and tee
Claude Code Docs(Configure permissions)原文
They don’t apply to a command that reads files without naming them
| 道具 | どこに・どう書くか | 効かないところ |
|---|---|---|
| Claude Code | 設定ファイル(settings.json)の拒否の規則に Read(./.env) と書く Claude Code Docs(Configure permissions)原文To block Claude’s file tools from reading a file or directory, add a Read deny rule for its path, such as Read(./.env) or Read(./secrets/**)出典を開く確認 2026-10-04 Claude Code Docs(Configure permissions)原文The dialog lists all permission rules and the settings.json file each rule comes from.出典を開く確認 2026-10-04 |
ファイルを自分で開くスクリプトなど Claude Code Docs(Configure permissions)原文or to arbitrary subprocesses that read or write files indirectly, like a Python or Node script that opens files itself.出典を開く確認 2026-10-04 |
| Cursor | プロジェクトの一番上に .cursorignore を作る。.env は初めから除外される Cursor Docs(無視ファイル)原文Cursor は .gitignore 内のファイルと、以下のデフォルトの ignore リストに含まれるファイルを自動的に無視します。出典を開く確認 2026-10-04 |
エージェントがコマンドを打つ画面(端末)と、MCP の道具 Cursor Docs(無視ファイル)原文Agent が使用する Terminal および MCP サーバーツールでは、.cursorignore で指定されたコードへのアクセスをブロックできません。出典を開く確認 2026-10-04 |
| Gemini CLI | プロジェクトの一番上に .geminiignore を作る Gemini CLI Docs(Ignoring files)原文Create a file named .geminiignore in the root of your project directory.出典を開く確認 2026-10-04 |
この設定に対応していない道具 Gemini CLI Docs(Ignoring files)原文file will exclude them from tools that support this feature, although they will still be visible to other services出典を開く確認 2026-10-04 |
| GitHub Copilot | リポジトリの設定の Content exclusion に、除外するパスを書く。GitHub Docs(Excluding content from GitHub Copilot)原文enter the paths to files from which Copilot should be excluded.出典を開く確認 2026-10-04 GitHub Docs(Excluding content from GitHub Copilot)原文Organizations with a Copilot Business or Copilot Enterprise plan.出典を開く確認 2026-10-04 |
コマンドで使う版(CLI)と、編集ソフト(IDE)のエージェントモード GitHub Docs(Excluding content from GitHub Copilot)原文GitHub Copilot CLI and Agent mode in Copilot Chat in IDEs do not support content exclusion.出典を開く確認 2026-10-04 |
| Codex | ファイルではなく、コマンドに渡す環境変数を絞る設定 OpenAI Codex Docs(Advanced configuration)原文shell_environment_policy controls which environment variables Codex passes to spawned commands.出典を開く確認 2026-10-04 |
初期設定では、KEY・SECRET・TOKEN を含む変数を消さない OpenAI Codex Docs(Advanced configuration)原文so Codex doesn’t automatically remove variable names containing出典を開く確認 2026-10-04 |
除外設定は、うっかり読むのを減らすためのものです。すべてのプログラムから読ませないようにするには、サンドボックスを使います(最後の節)。
鍵が会話に入ると、手元の記録に残る
| 道具 | 会話の記録 | 知っておくこと |
|---|---|---|
| Claude Code | 手元に、暗号化しない文字のまま保存する Claude Code Docs(Data usage)原文Claude Code clients store session transcripts locally in plaintext under出典を開く確認 2026-10-04 |
AI が呼び出した別のプログラムに鍵を渡さない設定は、自分で有効にしたときだけ働く Claude Code Docs(Environment variables)原文Set to 1 to strip credentials from the environments of the subprocesses Claude Code starts, such as Bash commands, hooks, and stdio MCP servers.出典を開く確認 2026-10-04 |
| Codex | 手元に保存する OpenAI Codex Docs(Advanced configuration)原文By default, Codex saves local session transcripts under出典を開く確認 2026-10-04 |
鍵らしい名前の環境変数も、初期設定では渡したまま(前の表) |
鍵を会話に貼ったり、AI に .env を表示させたりすると、その鍵は会話の記録に残ります。記録のファイルが漏れれば、鍵も一緒に漏れます。
文章に仕込まれた指示で、鍵が外に送られた
| 対象 | 起きたこと | 種類 |
|---|---|---|
| Claude Code | 確認を飛ばしてファイルを読み、中身をネットワークに送れた GitHub Advisory Database(GHSA-x5gv-jw7f-j6xj・CVE-2025-55284)原文it was possible to bypass the Claude Code confirmation prompts to read a file and then send file contents over the network without user confirmation.出典を開く確認 2026-10-04 |
研究者の実証 |
| Gemini CLI | 環境変数がまるごと攻撃者のサーバーに送られた Tracebit(2025-07-28)原文all their environment variables have been sent to the attacker's server出典を開く確認 2026-10-04 |
研究者の実証 |
| GitHub Copilot Chat | リポジトリ全体から鍵の名前を探させ、外に出せた Legit Security(2025-10-08)原文I also managed to get Copilot to search the victim's entire codebase for the keyword出典を開く確認 2026-10-04 |
研究者の実証 |
| npm(JavaScript の部品の置き場)の部品(s1ngularity) | 入り込んだ悪意のあるコードが、利用者の AI の道具を危険なオプション付きで動かした Wiz(2025-08-27)原文Notably, the campaign weaponized installed AI CLI tools by prompting them with dangerous flags出典を開く確認 2026-10-04 |
実際の攻撃 |
AI は、読んだ文章の中の指示に従ってしまうことがあります(プロンプトインジェクション)。鍵が AI の手の届く所にあれば、指示ひとつで外に出ます。
AI に書かせると、鍵は漏れやすくなるのか
| 調べたもの | 結果 |
|---|---|
| 公開されている GitHub のコミット(コードの変更の記録) | Claude Code を使ったコミットで鍵が混ざる割合は 3.2%、全体は 1.5% GitGuardian(The State of Secrets Sprawl 2026・2026-03-17)原文Claude Code-assisted commits showed a 3.2% secret-leak rate, versus a 1.5% baseline across all public GitHub commits.出典を開く確認 2026-10-04 |
| AI エージェントが作った変更の依頼 | 漏れた本物の鍵の 67.6% は、人が入れていた Sakib et al.「Trust but Verify?」(arXiv 2607.12428・2026-07-14)原文human collaborators are responsible for introducing 67.6% of genuine leaked secrets within these agent-assisted workflows出典を開く確認 2026-10-04 |
差はありますが、AI が原因とは言えません。報告した本人たちも、道具の欠陥と単純に読むべきではないと書いています。 出典を開く確認 2026-10-04GitGuardian(The State of Secrets Sprawl 2026・2026-03-17)原文
That gap is meaningful, but it should not be read as a simple tool failure.
MCP で鍵を渡すときは、鍵の権限で決まる
| 何を | どうなっているか |
|---|---|
| 公開されている MCP サーバー | 53% が期限の長い固定の鍵を使い、Astrix Security(State of MCP Server Security 2025・2025-10-15)原文Over half (53%) rely on static API keys or Personal Access Tokens (PATs), which are long-lived and rarely rotated.出典を開く確認 2026-10-04 Astrix Security(State of MCP Server Security 2025・2025-10-15)原文Only 8.5% use OAuth, the modern, preferred method for secure delegation.出典を開く確認 2026-10-04 |
| MCP の仕様 | 手元で動かす MCP サーバーは、鍵を環境から読む Model Context Protocol 仕様(Authorization・2025-06-18)原文Implementations using an STDIO transport SHOULD NOT follow this specification, and instead retrieve credentials from the environment.出典を開く確認 2026-10-04 |
| freee | 公式の MCP サーバーがあり freee会計 MCP 対応 、API の認可は OAuth(期限のある許可) freee会計 API の認証方式 |
| マネーフォワードの公式 MCP | API キーは、発行した人の権限の範囲でしか使えない マネーフォワード クラウド(MCPサーバーの認証・認可)原文APIキーを発行したユーザー自身がマネーフォワード クラウドの各サービスで付与されている権限でアクセス可能なデータのみにアクセスできます。出典を開く確認 2026-10-04 |
| kintone の公式 MCP | API トークンかパスワードで認証する。本番では、その権限を必要最小限にするようサイボウズ自身が書いている cybozu developer network(kintone MCPサーバーのクイックスタート)原文本番環境で利用する場合は、対象アプリのAPIトークンの権限や「パスワード認証」時のユーザー権限を必要最小限に設定し、AIがアクセスできる範囲を適切に制限してください。出典を開く確認 2026-10-04 |
AI が指示に乗せられても、鍵にできることが少なければ被害も小さくなります。
渡すなら、この順で
まず会話に入れないこと、次に権限を絞ることです。OWASP も、AI の拡張機能には OAuth と最小限の権限を使うよう勧めています。 出典を開く確認 2026-10-04 出典を開く確認 2026-10-04 出典を開く確認 2026-10-04OWASP Top 10 for LLM Applications 2025(LLM06 Excessive Agency)原文
an LLM extension that reads a user’s code repo should require the user to authenticate via OAuth and with the minimum scope required.
Model Context Protocol 仕様(Authorization・2025-06-18)原文
short-lived access tokens to reduce the impact of leaked tokens
Claude Code Docs(Configure permissions)原文
For OS-level enforcement that blocks all processes from accessing a path, enable the sandbox.
- 漏れたときに誰が止めるかは シークレットスキャンとは — 漏れた鍵は誰が止めるか にまとめてあります
- 権限をどこまで絞れるかは 読み取りと書き込み — API 連携のスコープを絞れるか にあります
- MCP サーバーを追加する前の確かめ方は MCP サーバーを追加する前に、何を確かめるか にあります
ここから先は調査の詳細です(約 1 分)。上のカードだけで決められます。調べた 1 件ずつの記録は IT連携マップ に、出典 URL と調査日つきで公開しています。
調査の詳細
2026 年 10 月 4 日に、Claude Code・Codex・Gemini CLI・GitHub Copilot・Cursor の公開文書(権限・設定・データの扱い・環境変数・サンドボックス・除外設定)と、事例の報告(GitHub のアドバイザリー、各研究者と各社の報告)、GitGuardian・Astrix Security の調査、MCP の仕様、freee・マネーフォワード・サイボウズの公式 MCP の文書を読みました。表の言い方は各文書の文から取り、原文は[原文・出典]に置いています。
言えないこと
- 文書に書かれている設定と動きを並べたもので、5 つの道具を同じ条件で動かして比べたわけではありません
- 第 3 節の事例は、報告した人の実証と報告です。私たちは再現していません
- 第 4 節の割合は、報告した会社の数え方によるもので、AI を使った場合と使わない場合を条件を揃えて比べたものではありません
- 公開されている MCP サーバーの割合は、Astrix Security が GitHub で集めた範囲のものです
- Gemini CLI の文書には、環境変数の中の鍵らしい値を伏せる働きの説明がありますが、同じ文書の設定一覧ではその設定の初期値が無効になっており、どちらが今の動きかは確かめていません