資格情報プロキシ
エージェントはAPI呼び出しを行います。
エージェントが鍵を保持することは決してあってはなりません。
Clavitor Proxyは、AIエージェントと呼び出すAPIの間に配置されます。資格情報はネットワーク層で注入されるため、エージェントが実際のシークレットを確認、保存、またはログに記録することはありません。バイナリは1つ。環境変数は1つ。コードの変更はゼロです。
すでに直面している問題
環境変数内のシークレット
エージェントは環境からOPENAI_API_KEYを読み取ります。その鍵は/proc、クラッシュダンプ、CIログ、およびエージェントが呼び出すすべてのツールで参照可能です。ログの1行が漏洩するだけで、鍵は公開されてしまいます。
エージェントメモリ内のシークレット
エージェントが実行時に鍵を取得する場合でも、プロセスの実行中はメモリに保持されます。スキルが侵害されたり、プロンプトインジェクションやデバッグダンプが発生したりすれば、鍵は簡単に奪取されます。
使用内容の監査不在
APIキーが文字列として共有される場合、どのエージェントが、いつ、何のために使用したかの記録は残りません。鍵が漏洩すれば、ローテーションして祈るだけです。フォレンジック証跡はありません。
直面していないことを願う問題
ソースコード内のAPIキー
設定ファイルにハードコードされ、gitにコミットされ、チームのすべての開発者とCIランナーによってクローンされます。1つでもパブリックフォークされれば、GitHubのシークレットスキャンダッシュボードに表示されます。あるいは、もっと悪いことに、表示されないままになるかもしれません。
Slack内の資格情報
「Stripeの鍵を送ってもらえますか?」DMに貼り付けられ、永続的に検索可能になり、すべてのコンプライアンスアーカイブにエクスポートされます。Slackはボールトではありません。メール、Googleドキュメント、モニターの付箋も同様です。
各ラップトップ上の.envファイル
12人の開発者がいれば、ローテーションされることのないプレーンテキストファイルに本番環境の資格情報のコピーが12つ存在することになります。ラップトップが1台盗まれたり、~/.bash_historyが1回漏洩したり、過度に親切なバックアップツールが1つあれば、午前2時に社内すべての鍵をローテーションする羽目になります。
エージェントから資格情報を完全に切り離します。
プロキシはエージェントとAPIの間に配置されます。エージェントは、シークレットが入るべき場所に参照(clavitor://OpenAI/key)を記述します。プロキシはローカルでそれを解決し、実際の資格情報をHTTPSリクエストに注入して転送します。エージェントのログにはプレースホルダーが表示されます。APIは鍵を受け取ります。その間のどこにも保存されません。
環境変数はありません。エージェントのメモリに秘密情報はありません。コマンドラインに資格情報はありません。実際の鍵がエージェントの環境、メモリ、ログに入ることはないため、エージェントには貼り付けたり、出力したり、説得されて開示したりできるものが何もありません。これは、プロキシ経由でルーティングされる鍵を対象とします。マシンを制御する者は、それでもプロキシを使用するか、root でプロキシのメモリから鍵を読み取ることができ、侵害されたエージェントは与えられたアクセスを悪用できます。スコープ、レート制限、および監査がそれを制限します。
# proxy-auth is the proxy's access token, the file beside the binary
$ export HTTPS_PROXY="http://clavitor:$(cat proxy-auth)@127.0.0.1:1983"
$ curl -H "Authorization: Bearer clavitor://OpenAI/key" \
https://api.openai.com/v1/chat/completions
# The proxy resolved the placeholder. The agent never saw sk-EXAMPLE_not_a_real_key.
# Neither did the logs, the crash dump, or the conversation history.HTTPS呼び出しを行うすべてのエージェント(Claude Code、Codex、OpenClaw、CrewAI、LangChain、カスタムスクリプト)で動作します。環境変数を1つ設定するだけで、エージェントのAPI呼び出しがプロキシを経由します。SDKもプラグインもコードの変更も不要です。
内部の仕組み
リクエストごとのローカル復号
プロキシはボールトから暗号化された資格情報を取得し、デバイス上で復号します。プレーンテキストは1回のHTTPリクエストの間だけプロセスメモリに存在し、その後消去されます。キャッシュもディスクへの書き込みも行われません。すべてのリクエストで新たに復号されます。
フィールドからヘッダーへのマッピング
Bearerトークン、APIキー、Basic認証など、プロキシはボールトのフィールドラベルを適切なHTTPヘッダーに自動的にマッピングします。あるいは、エージェントがclavitor://参照を使用して正確なフィールドを指定することもできます。いずれの場合も、エージェントが資格情報を見ることなく、適切な場所に配置されます。
アクセス範囲、レート制限、監査
ボールトはアクセス範囲の境界とレート制限を強制します。あまりにも多くの異なる資格情報にアクセスするエージェントは自動的にロックされます。すべてのアクセスがログに記録されます。プレースホルダーにエージェントID(clavitor://agentid@Entry/field)を含めることで、共有プロキシ経由でのエージェントごとの監査証跡とレート制限を実現します。
デプロイメント
バイナリは1つ。エージェントのサイドカーとして動作します。ネットワークインフラの変更は不要です。
シングルエージェントホスト
バイナリをダウンロードし、登録blobと鍵を指定してclavitor-proxy initを実行し、エージェントにHTTPS_PROXYを設定します。以上です。プロキシは127.0.0.1:1983にバインドします(1つのエージェントに対するサイドカー)。これ以外のアドレスへ自らバインドすることはありません。このポートは平文のアクセストークンを運ぶため、ループバック以外では、CLAVITOR_PROXY_LISTENにアドレスを設定し、かつバイナリの隣に所有者だけが読み取れるproxy-allow-privateというファイルを作成しない限り、起動を拒否します。その設定を行うのは、そのアドレスが信頼できるプライベートネットワーク(VPNまたはTailscale)である場合だけです。
マルチエージェントホスト
各エージェントは、独自のサイドカー設定ファイルを持つバイナリのコピーを取得します。各コピーには独自のアクセス範囲、独自のレート制限、独自の監査証跡があります。エージェントAはエージェントBの資格情報を見ることはできません。設計による分離です。
クラウドで実行されるすべての資格情報プロキシ(自社製か他社製かにかかわらず)は標的となります。プロキシを侵害すれば、すべての顧客の資格情報を入手できます。これは理論上のリスクではありません。すべてのCredential-Proxy-as-a-Serviceのビジネスモデルそのものです。
Clavitorのプロキシは、お客様のインフラストラクチャ上で動作します。ローカルで復号します。資格情報は、1件のリクエストの処理中に限りプロセスメモリ上に存在します。お客様の平文の鍵を保持するクラウドサービスはありません。お客様の秘密情報を提供するAPIエンドポイントはありません。侵害され得る、お客様の鍵のクラウド上の複製はありません。
エージェントはすでにAPI呼び出しを行っています。
エージェントを適切な範囲内に留めます。
お客様のボールト、お客様のアクセス範囲、お客様の監査証跡。プロキシは、エージェントのコードを一切変更することなく、ネットワーク層の強制ポイントを追加します。