AIエージェントの秘密情報管理—APIキーを本文に置かない


AIエージェントの秘密情報管理—APIキーを本文に置かない

AIエージェントは外部サービスへ接続するため、多くの秘密情報を扱います。問題は、APIキーを一度設定することより、会話、ログ、Git、バックアップ、スクリーンショットへ複製されることです。

秘密情報に含まれるもの

  • APIキー、client secret、Bot token
  • OAuth access token、refresh token、認可コード
  • アプリパスワード
  • Webhook URL
  • セッションcookie
  • 秘密情報を含む設定ファイル
  • 推測されにくいが権限を持つ共有URL

IDは必ずしも秘密ではありませんが、他の情報と組み合わせると対象を特定できます。公開ブログでは事業所ID、Data Source ID、録音IDなどもダミー化します。

保存場所を分ける

ソースコードには変数名だけを書き、実値は秘密情報ストア、OSのKeychain、権限を絞った環境ファイルなどへ保存します。

“`text
NOTION_ACCESS_TOKEN=YOUR_NOTION_TOKEN
DISCORD_BOT_TOKEN=YOUR_DISCORD_TOKEN
FREEE_CLIENT_SECRET=YOUR_FREEE_SECRET
“`

`.env.example`にはダミー値だけを置き、実際の`.env`はGit管理から除外します。ファイル権限を所有者だけへ絞り、バックアップ先の暗号化も確認します。

エージェントへ必要な秘密だけを渡す

MCP子プロセスへ親の全環境変数を引き継ぐと、無関係なServerまで秘密を読めます。Serverごとに必要な変数だけを渡します。Hermes Agentの公式SecurityもMCP credential filteringを防御層の一つに挙げています。

読み取り用と書き込み用の権限を分けられるサービスでは、まず読み取りだけを付与します。OAuthのscopeと対象ワークスペースも確認します。

ログと例外を点検する

HTTPエラーをそのまま出力すると、Authorization headerやURLクエリへ秘密が含まれる場合があります。ログへ出す前に、token、secret、password、cookie、Authorizationを伏せます。

監査ログは「いつ、どの操作が、成功したか」を残し、秘密や本文の複製先にしません。

漏れた時の対応を先に決める

1. キーやトークンを失効・再発行する
2. 関連セッションを終了する
3. Git履歴、チャット、ログ、バックアップの複製範囲を確認する
4. 不正利用と監査ログを確認する
5. 原因を直してから新しい秘密を設定する

ファイルを削除するだけではGit履歴や外部サービスの会話から消えません。失効が最優先です。

まとめ

秘密情報管理の基本は、保存場所を分け、必要なプロセスに必要な権限だけを渡し、漏れたらすぐ失効できることです。エージェントの賢さではなく、OSとサービスの権限で守ります。

参考にした一次情報

  • [Hermes Agent Security](https://hermes-agent.nousresearch.com/docs/user-guide/security/)
  • [OWASP Secrets Management Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html)
  • [OAuth 2.0 Security Best Current Practice—RFC 9700](https://www.rfc-editor.org/rfc/rfc9700.html)

Back to top