資格情報プロキシ
エージェントはAPIコールを行います。
しかし、エージェントが鍵を保持すべきではありません。
Clavitor Proxyは、AIエージェントと、それらが呼び出すAPIの間に位置します。資格情報はネットワークレイヤーで注入されるため、エージェントが実際のシークレットを目にしたり、保存したり、ログに記録したりすることはありません。バイナリは1つ。環境変数は1つ。コードの変更はゼロです。
すでに直面している問題
環境変数内のシークレット
エージェントは環境から OPENAI_API_KEY を読み取ります。そのキーは /proc 内、クラッシュダンプ、CIログ、エージェントが呼び出すあらゆるツールの中で可視化されます。ログが1行漏洩するだけで、キーは公開されてしまいます。
エージェントのメモリ内のシークレット
エージェントが実行時にキーを取得したとしても、プロセスが継続している間、それはメモリ内に保持されます。スキルの侵害、プロンプトインジェクション、デバッグダンプなどにより、キーは容易に奪取可能な状態になります。
使用履歴の監査不能
APIキーが文字列として共有される場合、どのエージェントが、いつ、何のためにそれを使用したかの記録が残りません。キーが漏洩した場合、ローテーションして事態が収束することを祈るしかありません。フォレンジックの痕跡は存在しないのです。
発生してほしくない問題
ソースコード内のAPIキー
設定ファイルにハードコードされ、Gitにコミットされ、チーム内のすべての開発者やCIランナーによってクローンされます。公開フォークが1つあるだけで、GitHubのシークレットスキャニングダッシュボードに検知されるか、あるいはもっと悪いことに、検知すらされないまま流出します。
Slack内の資格情報
「Stripeのキーを送ってくれる?」といったやり取りがDMで行われ、永遠に検索可能になり、すべてのコンプライアンスアーカイブにエクスポートされます。Slackは保管庫(Vault)ではありません。メール、Google Docs、モニターに貼られた付箋も同様です。
すべてのノートPCにある .env ファイル
12人の開発者がいれば、ローテーションされないプレーンテキスト形式の本番環境資格情報のコピーが12個存在することになります。ノートPCの盗難、~/.bash_history の漏洩、あるいは親切すぎるバックアップツールによって、午前2時に会社中のすべてのキーをローテーションすることになります。
資格情報をエージェントから完全に切り離します。
プロキシがエージェントとAPIの間に介在します。エージェントは、シークレットが配置されるべき場所として、参照(リファレンス)である clavitor://OpenAI/key を書き込みます。プロキシはそれをローカルで解決し、実際の資格情報をHTTPSリクエストに注入して転送します。エージェントのログにはプレースホルダーが表示されます。APIはキーを受け取ります。その間のどこにも、情報は保存されません。
環境変数は不要です。メモリ内にシークレットも残りません。コマンドラインに資格情報を渡す必要もありません。エージェントはキーを知らず、キーを漏洩させることもできず、キーを明かすように騙されることもありません。
$ export HTTPS_PROXY=http://127.0.0.1:1983
$ curl -H "Authorization: Bearer clavitor://OpenAI/key" \
https://api.openai.com/v1/chat/completions
# プロキシがプレースホルダーを解決しました。エージェントは sk-proj-abc123 を見ていません。
# ログ、クラッシュダンプ、会話履歴にも残っていません。Claude Code、Codex、OpenClaw、CrewAI、LangChain、カスタムスクリプトなど、HTTPSコールを行うあらゆるエージェントで使用可能です。環境変数を1つ設定するだけで、エージェントのAPIコールはプロキシを経由します。SDKもプラグインも、コードの変更も必要ありません。
内部の仕組み
リクエストごとにローカルで復号
プロキシはVaultから暗号化された資格情報を取得し、デバイス上で復号します。プレーンテキストは1つのHTTPリクエストの間だけプロセスメモリ内に存在し、その後消去されます。キャッシュは一切行われず、ディスクにも書き込まれません。すべてのリクエストにおいて、その都度新しく復号されます。
フィールドをヘッダーにマッピング
Bearerトークン、APIキー、Basic認証など、プロキシはVaultのフィールドラベルを適切なHTTPヘッダーに自動的にマッピングします。あるいは、エージェントが clavitor:// 参照を使用して特定のフィールドを正確に指定することもできます。いずれにせよ、エージェントが目にすることなく、資格情報は正しい場所に届けられます。
スコープ、レート制限、監査
Vaultはスコープの境界とレート制限を強制します。あまりに多くの異なる資格情報にアクセスしようとするエージェントは、自動的にロックされます。すべてのアクセスはログに記録されます。プレースホルダーにエージェントID(clavitor://agentid@Entry/field)を含めることで、共有プロキシを通じたエージェントごとの監査トレイルとレート制限が可能になります。
デプロイメント
バイナリは1つ。エージェントのサイドカーとして動作。ネットワークインフラの変更は不要です。
シングルエージェント・ホスト
バイナリをダウンロードし、登録トークンを使用して clavitor-proxy init を実行し、エージェントに HTTPS_PROXY を設定します。これだけです。デフォルトでは、プロキシは 127.0.0.1:1983 にバインドされます(単一エージェントのサイドカー)。プライベートネットワーク内で1つのプロキシが複数のエージェントにサービスを提供する場合は、CLAVITOR_PROXY_LISTEN を設定して別の場所にバインドしてください。
マルチエージェント・ホスト
各エージェントに、独自のサイドカー設定ファイルを持つバイナリのコピーが割り当てられます。各コピーは独自のスコープ、独自のレート制限、独自の監査トレイルを持ちます。エージェントAはエージェントBの資格情報を見ることはできません。設計による隔離(Isolation by design)を実現しています。
クラウド上で動作するすべての資格情報プロキシ(自社のものであれ他社のものあれ)は、攻撃の対象となります。プロキシが侵害されれば、すべての顧客の資格情報が奪われます。これは理論上のリスクではなく、「資格情報プロキシ・アズ・ア・サービス」というビジネスモデルそのものが抱えるリスクです。
Clavitorのプロキシは、お客様のインフラ上で動作します。ローカルで復号します。資格情報は1回のリクエストの間だけプロセスメモリ内に存在します。お客様のプレーンテキストのキーを保持するクラウドサービスは存在しません。シークレットを提供するAPIエンドポイントも存在しません。侵害されるべき対象そのものが存在しないのです。
エージェントはすでにAPIコールを行っています。
それらを適切な領域に留めておきましょう。
お客様のVault、お客様のスコープ、お客様の監査トレイル。プロキシは、エージェントへのコード変更を一切行うことなく、ネットワークレイヤーでの強制ポイントを追加します。