テック技報最新号へ →
セキュリティ

.env を AI コーディングエージェントに読ませない(hooks・deny ルール)

.gitignore に入れていても Cursor や Claude Code は .env を普通に読む。エージェント側の deny ルールや PreToolUse フックで読み取り自体を遮断する。

@_watany · 2026-10-09
#secrets#ai-agent#claude-code#codex#env

何を解決するか

  • エージェントが .env を読む → 会話ログ・プロバイダのサーバー・プロンプトインジェクション経由の外部送信に平文のシークレットが流れる。

手順

  1. Claude Code の permissions で deny(.claude/settings.json):
    json
    { "permissions": { "deny": ["Read(./.env)", "Read(./.env.*)", "Read(**/*.env)"] } }
  2. PreToolUse フックでブロック: Bash 経由の cat .env 等も止めたい場合はフックで判定する。ptuf init claude-code でフック設定が一発で入るツールもある(@_watany の紹介)。
  3. 専用ツール: brew install amulet でエージェントからシークレットを守るツール Amulet(@tsukasaartcom)。
  4. Codex の permission profiles: OS 強制のファイル読み書き拒否ルール(**/*.env も可)を、ドメイン単位のネットワーク許可や Unix ソケットと組み合わせ、継承可能なプロファイルとして再利用できる(@thsottiaux)。
  5. そもそも平文 .env を置かない: 1Password Environments のマウントや実行時注入(別記事)に移行するのが根本対策。worktree を多用するなら .env コピー運用自体をやめる動機にもなる(@MLBear2)。

注意点

  • deny ルールはツールごとに書式が違い、Bash 経由の迂回(grep, base64 等)を完全には防げない。OS レベルのサンドボックスやシークレットを置かない構成と併用する。
  • 「近い将来みんな hooks と言う」(@awakia)ほどフックが主流になりつつある。

出典

X の元の投稿を開く