1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

エージェントに鍵を見せずにAPIを叩かせる:Claude Managed Agentsの「Vaults」を読む

1
Posted at

エージェントにAPIキーを渡す、という怖さ

自律的に動くエージェントに、外部サービスのAPIキーを持たせたことはあるだろうか。

筆者は先日、まさにこれで痛い目を見た。スケジュール実行するZennの下書き生成エージェントにQiita投稿用のトークンを持たせようとして、設定ファイルに生の値を書いてしまい、公開リポジトリに露出させかけたことがある。修正はできたが、「モデルにキーの中身を見せる」設計そのものが危うい、という教訓が残った。

Anthropicも同じ課題に直面していたようだ。2026年6月9日、Claude Managed Agentsに「Vaults」の環境変数対応と、cronベースのスケジュール実行機能が追加された。エージェントに認証情報を持たせる部分を、プラットフォーム側の機能として切り出した格好だ。

結論から言うと

  • Vaultsは、APIキーを環境変数名と許可ドメインの組として登録する仕組み。2026年6月9日にパブリックベータ入り
  • エージェントのサンドボックスにはプレースホルダーしか渡らない。実キーは、許可ドメインへのリクエストが出た瞬間にネットワーク境界で注入される
  • モデル自身は一度も本物のキーを見ない。プロンプトインジェクションでキーそのものを抜かれるリスクを構造的に減らす設計
  • 同時に**スケジュール実行(cron)**も追加され、エージェントを自前でスケジューラを組まずに定期起動できる
  • Notion・Browserbase・Sentryなど、HTTPヘッダーでキーを送るCLIであれば概ね対応

本記事は、Anthropic公式ブログとドキュメント、および関連メディアの記事をもとにした解説です。機能はまだパブリックベータであり、対応範囲や挙動は今後変わる可能性があります。

Vaultsの仕組み:キーを「見せずに使わせる」

一般的なやり方だと、エージェントに外部APIを叩かせるには、環境変数かプロンプトのどこかにキーを埋め込む必要がある。この場合、モデルの文脈にキーの文字列そのものが乗る。ログに残る、プロンプトインジェクションで抜かれる、うっかりコミットするなど、漏洩経路は複数ある。

Vaultsのアプローチは違う。

1. ユーザーがAPIキーを登録する
   → 環境変数名(例: SENTRY_API_KEY)+ アクセス許可ドメイン(例: sentry.io)
2. エージェントのサンドボックスには「プレースホルダー」だけが渡る
   → モデルが読めるのは変数名だけで、値の中身は見えない
3. サンドボックス内のCLIがそのAPIへリクエストを送る
4. リクエストが許可ドメインに向かっている場合のみ、
   ネットワーク境界(サンドボックスの外側)で本物のキーが注入される

つまり、キーの実体はモデルのコンテキストにも、サンドボックスのメモリにも载らない。乗るのはリクエストが実際に送信される瞬間、かつ許可済みドメイン宛てのときだけだ。ドメインを絞っているので、仮にエージェントが騙されて意図しないリクエストを組み立てても、キーが漏れる先は登録済みドメインに限られる。

対応しているのは「キーをHTTPリクエストのヘッダーやクエリで送る」タイプのCLIで、Browserbase・KERNEL・Notion・Ramp・Sentryなどが挙げられている。

もう一つの目玉:スケジュール実行(Cron)

同時に発表されたのが、Managed Agentsのcronスケジュール機能だ。エージェントに定期実行のスケジュールを設定すると、発火のたびに新しいセッションが立ち上がってタスクをこなす。自前でスケジューラを構築・ホストする必要がない。

筆者はこの記事群を書くために、launchdで自前の日次エージェントを組んだ。zshrcからトークンを読ませるためのzsh -iラップや、実行ログのローテーション、失敗時の通知など、地味な配線が地味に面倒だった。Managed AgentsのVaults+Cronは、その配線部分をプラットフォームの機能として肩代わりするという提案に見える。

実例:Notion・Milanaのユースケース

公式ブログが挙げる例は具体的だ。

  • Notion:CLIをMCPツールと並行して展開し、APIトークンをモデルに一切渡さないままファイルアップロード機能をエージェントに持たせている
  • Milana:AI「プロダクトエンジニア」を顧客のコードベースに安全に接続する際に、Vaultsの環境変数を使っている

どちらも「エージェントに強い権限を持たせたいが、キーそのものは渡したくない」という同じ緊張関係への回答だ。

手放しで安全、ではない

誠実に見ておくべき論点もある。

  • 対応CLIが限定的:キーをHTTPリクエストで送る設計のツールでないと機能しない。独自の認証フローを持つツールは対象外
  • ドメイン許可リストの運用:許可ドメインの設定を誤れば、意図しない宛先にリクエストが飛ぶ余地は残る。境界の信頼はAnthropicのサンドボックス実装に依存する
  • まだパブリックベータ:仕様・対応範囲は変わりうる。本番のクリティカルパスに今すぐ乗せる判断は慎重に

「モデルがキーを見ない」ことは、「サンドボックスから何も漏れない」ことを保証しない。許可ドメインの設定は最小限にし、Managed Agentsに与える権限そのものも必要最小限にとどめるべきです。

まとめ

観点 従来(環境変数を直接渡す) Vaults
モデルがキーを見るか 見える 見えない(プレースホルダーのみ)
キー漏洩の主な経路 プロンプト・ログ・コミット ネットワーク境界の設定ミスに限定
アクセス範囲の制御 アプリ側の実装次第 登録時にドメイン単位で制限
スケジュール実行 自前で構築 Cronとしてプラットフォームが提供

エージェントに何を持たせ、何を持たせないか——この設計判断は、今後のエージェント運用で一番地味で一番重要な部分になっていくはずだ。Vaultsは「キーを渡さずに使わせる」という発想を、プラットフォームの標準機能に押し上げた一例として見ておきたい。

この記事が役に立ったら、いいねと保存をお願いします!

あなたのエージェントは、APIキーをどう扱っていますか?自前のワークアラウンドがあれば、コメントで教えてください。

参考リンク

New in Claude Managed Agents: run agents on a schedule and store environment variables in vaults - Anthropic

Authenticate with vaults - Claude Platform Docs

Claude Managed Agents Add Cron Schedules and Credential Vaults - Tech Times

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?