Deno Sandbox: API キーはプレースホルダーで渡し、許可した宛先への通信のときだけ本物に差し替える
Deno Sandbox では秘密情報がサンドボックスの環境変数に入らない。中のコードに見えるのは DENO_SECRET_PLACEHOLDER_... という置き換え用の文字列で、指定したホストへ送るときだけ外側のプロキシが本物の値に差し替える。プロンプトインジェクションで鍵を外に送らせても、届くのは役に立たない文字列だけになる。
どんな時に使う?
- エージェントが書いたコードを、レビュー前にすぐ実行したい
- サンドボックスの中で
claude -pや OpenAI API を呼ばせたいが、鍵を読まれたくない
手順(TypeScript SDK @deno/sandbox)
@deno/sandbox)ts
import { Sandbox } from "@deno/sandbox";
await using sandbox = await Sandbox.create({
allowNet: ["api.anthropic.com"],
secrets: {
ANTHROPIC_API_KEY: {
hosts: ["api.anthropic.com"],
value: process.env.ANTHROPIC_API_KEY!,
},
},
});
await sandbox.sh`echo $ANTHROPIC_API_KEY`; // プレースホルダーが表示されるsecretsのhostsが差し替え先。allowNetで通信先そのものも絞るallowNetはexample.com・example.com:443・*.example.com・IP アドレスを書ける- Python SDK(
deno-sandbox)と REST API もある
注意点
allowNetを省くと外向き通信は全部許可になる。プレースホルダーは「許可したホストへなら送れる」ので、allowNetと組み合わせて初めて閉じる- Deno Deploy 上のクラウドサービス(利用には Deno Deploy のアカウントが要る)
- 同じ考え方は手元でも真似できる。鍵をエージェントの環境に置かず、外側のプロキシで付け足す
出典
- @techfeedapp · 2026-02-04
- 公式ドキュメント(Security): docs.deno.com
- 公式ブログ: deno.com
- 関連: エージェントを隔離して動かす選択肢(nono / Docker Sandboxes / agentos / VPS)