概要
Claude Code および Agent SDK のデプロイ時に、分離、認証情報管理、ネットワーク制御を用いてセキュリティを確保するためのガイド。プロンプトインジェクションやモデルエラーによる意図しないアクションを防御する。
仕様
脅威モデル
- エージェントはプロンプトインジェクション(処理するコンテンツに埋め込まれた命令)やモデルエラーにより意図しないアクションを取りうる
- Claude モデルはこれに対する耐性を持つが、多層防御が推奨される
組み込みセキュリティ機能
| 機能 | 説明 |
|---|---|
| パーミッションシステム | ツール・bashコマンドごとに allow / block / prompt を設定可能。glob パターン対応 |
| コマンドパース | bash コマンドを AST にパースしてパーミッションルールと照合。パースできないコマンドや eval は常に承認が必要 |
| Web 検索サマリー | 検索結果はコンテキストに直接渡さず要約される |
| Sandbox モード | bash コマンドをサンドボックス内で実行し、ファイルシステム・ネットワークアクセスを制限 |
セキュリティ原則
- セキュリティ境界: 信頼レベルの異なるコンポーネントを分離する。認証情報をエージェント環境の外に置く
- 最小権限: エージェントをタスクに必要な機能のみに制限する
- 多層防御: コンテナ分離、ネットワーク制限、ファイルシステム制御、プロキシでのリクエスト検証を組み合わせる
最小権限で制限できるリソース
| リソース | 制限方法 |
|---|---|
| ファイルシステム | 必要なディレクトリのみマウント、可能なら読み取り専用 |
| ネットワーク | プロキシ経由で特定エンドポイントのみ許可 |
| 認証情報 | 直接公開せずプロキシ経由で注入 |
| システムケーパビリティ | コンテナ内で Linux capabilities を削除 |
分離技術
| 技術 | 分離強度 | パフォーマンスオーバーヘッド | 複雑さ |
|---|---|---|---|
| Sandbox runtime | Good(安全なデフォルト) | 非常に低い | 低 |
| Containers (Docker) | セットアップ依存 | 低 | 中 |
| gVisor | Excellent(正しいセットアップ時) | 中〜高 | 中 |
| VMs (Firecracker, QEMU) | Excellent(正しいセットアップ時) | 高 | 中〜高 |
すべての構成で Claude Code(または Agent SDK アプリケーション)は分離境界の内部で動作する。
Sandbox runtime
- sandbox-runtime を使用
- ファイルシステム: OS プリミティブ(Linux:
bubblewrap、macOS:sandbox-exec)で読み書きアクセスを制限 - ネットワーク: ネットワーク名前空間の削除(Linux)または Seatbelt プロファイル(macOS)でトラフィックを組み込みプロキシ経由にルーティング
- 設定: JSON ベースのドメイン・ファイルシステムパスの許可リスト
- 制限事項: ホストカーネルを共有するため、カーネル脆弱性でエスケープの可能性あり。プロキシは TLS を終端しないため、ドメインフロンティング等で許可リスト外のホストへ到達する可能性あり
コンテナ (Docker)
セキュリティ強化コンテナ設定のオプション:
| オプション | 目的 |
|---|---|
--cap-drop ALL | NET_ADMIN、SYS_ADMIN 等の Linux capabilities を削除 |
--security-opt no-new-privileges | setuid バイナリによる権限昇格を防止 |
--security-opt seccomp=... | 利用可能な syscall を制限 |
--read-only | コンテナのルートファイルシステムを不変にする |
--network none | すべてのネットワークインターフェースを削除 |
--memory 2g | メモリ使用量を制限 |
--pids-limit 100 | プロセス数を制限(フォークボム対策) |
--user 1000:1000 | 非 root ユーザーで実行 |
--network noneの場合、Unix ソケット経由でホスト上のプロキシのみと通信可能~/.ssh、~/.aws、~/.config等の機密ホストディレクトリのマウントを避ける
追加の強化オプション:
| オプション | 目的 |
|---|---|
--userns-remap | コンテナの root をホストの非特権ユーザーにマッピング |
--ipc private | プロセス間通信を分離 |
gVisor
- システムコールをユーザースペースでインターセプトし、ホストカーネルへの攻撃面を削減
- Docker 用
runscランタイムとして利用:docker run --runtime=runsc agent-image - パフォーマンスオーバーヘッド:
- CPU バウンド: 約 0%
- 単純な syscall: 約 2 倍遅い
- ファイル I/O 多用: open/close パターンで最大 10〜200 倍遅い
VM (Firecracker)
- ハードウェアレベルの分離(CPU 仮想化拡張機能)
- Firecracker: 125ms 未満で VM 起動、メモリオーバーヘッド 5 MiB 未満
vsock(仮想ソケット)経由でホスト上のプロキシと通信
クラウドデプロイメント
- プライベートサブネットでエージェントコンテナを実行(インターネットゲートウェイなし)
- クラウドファイアウォールルール(AWS Security Groups、GCP VPC firewall)でプロキシ以外への egress をブロック
- プロキシ(例: Envoy
credential_injectorフィルタ)でリクエスト検証、ドメイン許可リスト、認証情報注入、転送 - エージェントのサービスアカウントに最小限の IAM 権限を割り当て
- プロキシで全トラフィックを監査ログ
認証情報管理
プロキシパターン(推奨)
- エージェントのセキュリティ境界の外部でプロキシを実行し、送信リクエストに認証情報を注入
- エージェントは認証情報を直接参照しない
- プロキシで許可エンドポイントの制限、リクエストの監査ログが可能
Claude Code でのプロキシ設定
| 方法 | 環境変数 | スコープ |
|---|---|---|
ANTHROPIC_BASE_URL | http://localhost:8080 | サンプリング API リクエストのみ |
HTTP_PROXY / HTTPS_PROXY | http://localhost:8080 | システム全体の HTTP トラフィック |
ANTHROPIC_BASE_URL: プロキシがプレーンテキスト HTTP を受信し、認証情報を注入して転送HTTPS_PROXY: CONNECT トンネルを作成。TLS インターセプションなしではリクエスト内容の変更不可
利用可能なプロキシ実装
- Envoy Proxy:
credential_injectorフィルタ - mitmproxy: TLS 終端プロキシ
- Squid: キャッシングプロキシ
- LiteLLM: LLM ゲートウェイ
他サービスへの認証
- カスタムツール: MCP サーバーまたはカスタムツール経由でリクエストをセキュリティ境界外のサービスにルーティング
- トラフィック転送: TLS 終端プロキシで HTTPS トラフィックを復号・変更・再暗号化。プロキシの CA 証明書をエージェントの信頼ストアにインストールが必要
HTTP_PROXY/HTTPS_PROXYを尊重しないプログラムもある(Node.jsfetch()はデフォルトで無視。Node 24+ ではNODE_USE_ENV_PROXY=1で有効化可能)- proxychains やiptables でのリダイレクトでカバー可能
ファイルシステム設定
- 読み取り専用マウント:
docker run -v /path/to/code:/workspace:ro - 除外すべき機密ファイル:
.env、~/.git-credentials、~/.aws/credentials、~/.config/gcloud/application_default_credentials.json、~/.azure/、~/.docker/config.json、~/.kube/config、.npmrc、.pypirc、*-service-account.json、*.pem、*.key - 一時的なワークスペース:
tmpfsマウント(コンテナ停止時にクリア) - 変更のレビュー: オーバーレイファイルシステムで変更を別レイヤーに保存し、確認後に適用・破棄
制約・注意点
- Sandbox runtime はホストカーネルを共有するため、カーネル脆弱性でエスケープの可能性がある
- Sandbox runtime のプロキシは TLS を終端しないため、ドメインフロンティング等で許可リスト外のホストへ到達する可能性がある
- 読み取り専用アクセスであっても、コードディレクトリに含まれる認証情報(
.env、~/.aws/credentials等)が漏洩するリスクがある HTTP_PROXY/HTTPS_PROXYはすべてのプログラムが尊重するわけではない
関連
facts/claude-code/agent-sdk-permissions.md