Codex / Claude Code / セキュリティ
Claude Code / Codexを安全に動かすためのmacOSでのローカルVM基盤
Claude CodeやCodexのようなAIエージェントを開発に使う機会が増えてきた。コード修正、コマンド実行、Terraform確認、AWS CLI操作を自然言語で依頼できる便利さの一方で、ローカルマシン上で自由にコマンドを実行させることにはリスクが伴う。本記事ではLimaを使ったmacOS上のローカルVMでAIエージェントの実行環境を分離する方法を紹介する。
なぜローカルVMに分離するのか
AIエージェントは開発者の代わりにコマンドを実行できる。これは強力だが、開発者が持つ権限をそのままAIエージェントに渡すことでもある。
ホストのホームディレクトリ全体を見える状態にしておくと、エージェントが意図せず以下にアクセスできてしまう:
- 他プロジェクトのソースコード
- ローカルに置いた設定ファイル
- シェル履歴や認証情報
- ホストの
~/.aws経由のクラウドリソース - Terraformのapply権限
AIエージェントを便利に使うためには、「エージェントがどこまで触ってよいか」を先に決めておく必要がある。
全体構成
macOS Host
├── agent-infra repository
├── ~/agent-workspace/home # VMにマウントする専用領域
└── Lima VM: agent-infra
├── Ubuntu 24.04
├── Claude Code / Codex / Gemini CLI
├── AWS CLI / Terraform
└── mise(ツールバージョン管理)
ホストからVMに共有するのは原則として ~/agent-workspace/home だけ。エージェントの作業はこのディレクトリ配下で完結させる。
Lima VMの設定
VM定義は lima.yaml に記述。Apple Silicon Macを前提にUbuntu 24.04 ARM64イメージを使用する。
vmType: "vz"
cpus: 4
memory: "8GiB"
disk: "60GiB"
mounts:
- location: "~/agent-workspace/home"
writable: true
マウント設定でエージェント専用ワークスペースだけを共有し、ホストのホームディレクトリ全体にはアクセスさせない。
AWS認証情報はホストと分離
この構成では、ホスト側の ~/.aws をVMにマウントしない。AWS認証情報はVM内で独立して設定する。
AIエージェントに渡すAWS権限は、開発者本人の権限とは分ける。特にTerraformを扱う場合、エージェントには基本的に読み取り権限を渡し、terraform plan までを担当させる。apply は人間がレビューした上で実行する境界を置く。
Git認証もVM専用SSH鍵で分離
GitHubへのアクセスではVM専用のSSH鍵を作成する。ホスト側のSSH秘密鍵をVMにコピーせず、エージェント用の鍵として分けることで、既存のSSH設定と切り離せる。
ssh-keygen -t ed25519 -N "" -f "$HOME/.ssh/id_ed25519_lima"
理想はAIエージェント専用のボットアカウントを用意し、そのアカウントに公開鍵を登録すること。初期検証では開発者アカウントに登録する場合も、VM用の鍵として分けておけば後から無効化しやすい。
ツール管理はmiseで再現可能に
VM内のNode.js、AWS CLI、Terraform、tflint、uv、yqなどのCLIツールは mise で管理する。これにより開発者間のバージョン差異を防ぎ、VMを作り直しても同じツールセットを再現できる。
まとめ
AIエージェントを安全に使うには、プロンプトや運用ルールだけでなく、実行環境そのものの設計が重要。今回の構成のポイント:
- AIエージェント専用のVMを作る
- ホストと共有するディレクトリを限定する
- ホストの
~/.awsを共有しない - VM内のツールはmiseで再現可能にする
- エージェントの作業ディレクトリを専用ワークスペースに固定
- AWSやTerraformの権限境界を明確にする
AIエージェントを便利な開発者として使う前に、まず「どこまで触ってよいか」をインフラとして定義する。このアプローチは、CodexやClaude Codeを本格的に開発フローに組み込む際の参考になる。


