本文へスキップ
Edition · Tokyo

AIエージェントに秘密情報を読ませない — .gitignore・権限・sandboxの実務

鍵やトークンをAIエージェントとログから守る方法を、読ませない・コミットさせない・残さないの3層で解説します。

codeagent.jp編集部 情報確認 約5分
Tags
情報確認
参考リンク
2件
更新性
長く使える
読了目安
約5分
更新管理

仕様・料金・提供範囲が変わりやすいテーマは、公開日・更新日・情報確認日を分けて管理します。 導入前には必ず記事末尾の一次情報と公式ドキュメントで最新状況を確認してください。

AIエージェントに秘密情報を読ませない — .gitignore・権限・sandboxの実務 の16:9共有用サマリー画像。 秘密情報は読ませない・コミットさせない・ログに残さないの3層で守る 1. 読ませない: .gitignoreで.envや鍵ファイルを除外する、エージェントの権限設定で機密パスの読み取りを拒否、sandboxでファイルとネットワークの境界を絞る 2. コミットさせない: 秘密はチャット・コミット・メモリに書かない、PR差分とログに鍵が混ざらないか確認する 3. 残さない・直す: MCPや外部サービスへは最小権限で渡す、漏れたら鍵を即ローテーションする、事故前提で検知と再発行の手順を用意する
AIエージェントに秘密情報を読ませない — .gitignore・権限・sandboxの実務 資料 26-1YRL 2026.06.30 運用Tips・トラブルシュート

結論

AIエージェントから秘密情報を守る基本は、技術ではなく順序です。「読ませない・コミットさせない・ログに残さない」の3層で考えます。鍵やトークンはリポジトリに平文で置かず環境変数やシークレットマネージャに分離し、エージェントには最小権限とsandboxで境界を与え、それでも事故は起きる前提でローテーション手順を用意しておきます。1つの設定に依存せず、層を重ねることが要点です。

AIエージェントは、文脈を増やすほど賢く動きます。そのため放っておくと、リポジトリ全体や環境変数、外部サービスの認証情報まで読みにいきます。便利さと引き換えに、秘密情報が会話・コミット・ログへ流れ込む経路が一気に増えるということです。

1層
読ませない
.gitignore・権限拒否・sandboxで境界を作る
2層
コミットさせない
チャット・コミット・メモリ・PRに混ぜない
3層
残さない・直す
最小権限で渡し、漏れたら即ローテーション
単一の設定ではなく、独立した3層を重ねて初めて実用的な防御になる。

そもそも何が危険なのか?

守るべき対象を具体化すると、対策の優先順位が決まります。AIエージェント運用で実際に漏れやすいのは、次のような値です。

  • .env や設定ファイルに置いた API キー・DB パスワード
  • クラウドの認証情報(アクセスキー、サービスアカウントの鍵ファイル)
  • Git 認証用のトークンや SSH 秘密鍵
  • 顧客データやログに含まれる個人情報

これらが危険なのは、エージェントが「読んで理解する」だけでなく、その内容を出力・要約・コミットメッセージ・PR の差分に再掲してしまうからです。人間なら無意識に伏せる値も、エージェントは文脈として素直に扱います。だからこそ、人間の注意ではなく仕組みで遮断します。

レイヤ1:どうやって読ませないようにする?

最初の層は、そもそもエージェントの視界に秘密を入れないことです。出発点は .gitignore です。

.gitignore
.env
.env.*
*.pem
*.key
**/secrets/
.aws/credentials

.gitignore はあくまで「Git に追跡させない」設定で、エージェントがファイルを読むこと自体は防げません。そこで、エージェント側の権限設定で機密パスの読み取りを拒否します。Claude Code であれば設定ファイルの権限ルールで deny を使い、特定パスへのアクセスを止められます。

{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./**/*.pem)"
]
}
}

さらに sandbox を併用すると、ファイルシステムとネットワークの到達範囲そのものを絞れます。Claude Code の機能概要では、ファイル・ネットワーク境界を設けて操作範囲を限定する仕組みが整理されています。読み取り遮断と境界制御は別レイヤなので、両方かけるほど安全側に倒れます。

レイヤ2:出力・コミット・PRに混ぜないには?

第二の層は、秘密がエージェントの「出口」に流れないようにすることです。読ませない設定をしても、人間が会話に貼ったり、エージェントが生成物へ書き込んだりすれば、そこから漏れます。次を運用ルールにします。

  • 秘密値をチャットに貼らない(貼った時点で履歴に残る前提で扱う)
  • コミットメッセージや PR 本文に値そのものを書かせない
  • エージェントのメモリや指示ファイル(CLAUDE.md / AGENTS.md)に鍵を書かない
  • コミット前に差分を必ず確認し、鍵らしき文字列が混ざっていないか見る

機械的なブレーキも有効です。コミット前に秘密検出を走らせる pre-commit フックや、エージェントの編集前後にチェックを挟む仕組みを入れておくと、人間の見落としを補えます。Anthropic のベストプラクティスでも、検証や安全確認を手作業の注意に頼らず工程へ組み込む考え方が示されています。

レイヤ3:外部サービスに渡すときの最小権限とは?

第三の層は、エージェントが外部へ「渡す」ときの権限を絞ることです。MCP サーバーや外部 API を接続すると、エージェントが触れる範囲が一気に広がります。原則は最小権限です。

  • 読み取り専用で足りるなら、書き込み権限を付けない
  • サービスごと・用途ごとにトークンを分け、スコープを最小にする
  • 本番 DB・課金・公開操作など影響の大きいものは承認必須にする
  • 認証情報がログや出力に再掲されない形で渡す

「とりあえず管理者権限」で接続すると、エージェントの誤操作や、攻撃者がプロンプトを乗っ取った際の被害が最大化します。権限を絞るほど、事故が起きても被害が局所化します。MCP の設計判断は別記事で詳しく扱っています。

事故ったときの初動は?

漏れたかもしれないと思った瞬間の正解は、消すことではなく無効化することです。会話履歴やログから値を削除しても、すでにコピーされた可能性は消せません。次の順で動きます。

  1. 漏れた鍵・トークンを即座にローテーション(再発行)し、古い値を無効化する
  2. その認証情報が触れる範囲(DB、クラウド、外部サービス)のアクセス履歴を確認する
  3. 影響範囲を特定し、必要なら関係者へ連絡する
  4. なぜ流出経路に入ったかを振り返り、レイヤ1〜2の設定を補強する

ローテーションを「特別対応」ではなく「いつでもできる定常手順」にしておくことが、実務では最も効きます。鍵をすぐ差し替えられる構成なら、漏洩の致命度は大きく下がります。

よくある質問

Q. AIエージェントに.envを読ませないには? まず .gitignore.env をリポジトリから外し、エージェントの権限設定で読み取りを拒否します。完全な遮断は難しいため、秘密は環境変数やシークレットマネージャに置き、リポジトリに平文で置かないことが土台です。

Q. 秘密情報をチャットに貼ってしまったらどうする? 貼った瞬間に漏れたものとして扱い、その鍵やトークンを即座にローテーション(再発行)します。会話履歴やログから消すより、無効化するほうが確実です。

Q. MCPや外部サービスに鍵を渡すときの注意点は? 最小権限で発行し、読み取り専用で足りるなら書き込み権限を付けないことです。サーバーごとにスコープを分け、認証情報はログに出ない形で渡します。

Q. sandboxを使えば秘密は守れる? sandbox はファイルやネットワークの境界を絞る有効な層ですが単独では不十分です。非コミットと最小権限、ローテーション運用と組み合わせて初めて実用的な防御になります。

関連記事

Primary sources

一次情報・参考リンク

About the author
codeagent.jp編集部

Claude Code / Codex / MCP を個人開発サイト運用と公開MCPサーバー開発で試し、一次情報・検証ログ・失敗例をもとに整理します。

関連して読む