更新: 2026年8月4日 / 個人運営のAI技術ブログ
NexaLink AI Blog
AI Field Notes
AI開発ツール

【やってみた】Hermes AgentをNovitaサンドボックスに常駐させてみた(後編・セキュリティと総評)——“鍵をどう安全に持たせるか”の正直な話

前編では、Novitaのサンドボックスに“育つAI”Hermes Agentを常駐させ、「1時間で消える」「接続先のURLが毎回変わる」という2つの壁を、最新版を焼いた自作テンプレと“一時停止(pause)”のしくみで越えられた、というところまで書きました。土台としては、これがとても良い、と。

ただ、前編の最後に書いたとおり、ここからが本当の難所です。Hermesのように広い権限を持つAIに、外部サービスのAPIキー(今回は、AIモデルを呼ぶためのOpenRouterのAPIキー)を、どうやって安全に持たせるか。APIキーは、盗まれれば勝手に使われて課金が膨らんだり、他人に悪用されたりします。だから今回は、最初から守りを固める前提で進めました。念のため、使ったOpenRouterのAPIキーは無料枠(free tier)のモデルに限定し、利用上限(ガードレール)もごく小さく(0.01ドル)設定しています。それでも、APIキーそのものの扱いは油断できません。

まず、公式の“シークレット注入”機能に頼ろうとした——それが動かなかった

最初は、素直に公式のしくみに頼ろうとしました。Novitaには、シークレット(APIキーなどの秘密の値)を、値そのものを露出させずにサンドボックスへ注入するための機能(シークレット注入)が用意されています。「これを使えば、APIキーを安全に渡せるはず」と考えたのです。

ところが、実際に使ってみると、うまくいきませんでした。この機能を有効にすると、許可したはずの通信先へのTLS(暗号化通信)が軒並みエラーになり、しかも肝心の「秘密の値を正しく差し込む」動作も、こちらで確認したかぎりでは起きませんでした。つまり、APIキーを守るどころか、通信そのものが成り立たなくなってしまったのです。

念のため、複数のやり方で何度も確かめ、別のAIにも独立に検証してもらいましたが、結果は変わりませんでした。私の設定ミスの可能性も残しつつ——本稿執筆の時点では、期待どおりには動かなかった、というのが正直なところです。この件は、すでにNovitaのサポートへ具体的に報告しています(本稿執筆時点で、返信はまだ届いていません。回答をいただけたら、内容を反映・訂正します)。

じつは、鍵をどう渡すのがよいか迷って、Novita公式の「NovitaClaw」というサービス(サンドボックスの中でエージェントを動かすしくみ)が、鍵をどう扱っているかを参考に見てみました。同じような構成の先行例なので、とても参考になります。すると、そのしくみでは、設定ファイルにAPIキーをそのまま(平文で)書き込む形になっていました。「公式の実装でも、この“シークレットを安全に渡す”ところは、まだ手当てしきれていないのかもしれない」——そんな印象を持ちました。

仕方ないので、自分で守りを二重に固めた

公式機能に頼れないなら、自分で守るしかありません。素人なりに、2つの手当てをしました。

ひとつめ:APIキーを環境変数で渡し、ディスク(ファイル)には書かない。 APIキーは、ファイルとして保存すると、ふとしたきっかけで一緒に持ち出されてしまいます(実際、前の日には、バックアップのファイルの中にAPIキーごと入り込んでいたことがありました)。そこで今回は、APIキーをファイル(.env)には一切書かず、起動時に環境変数として渡すだけにしました。

ふたつめ:外向き通信(egress)を、必要な宛先だけに絞る。 サンドボックスから外へ出ていける宛先を許可リストで管理し、AIモデルを呼ぶための1か所以外は全部ふさぐ設定にしました。こうしておけば、万が一なにかがおかしくなっても、鍵やデータが知らないところへ送られる経路を、あらかじめ塞げます。実際に、許可した宛先だけは通り、それ以外(GitHubなど)はきちんと遮断されることを確認しました。

このあたり、通信の許可・遮断を細かく設定できるのは、Novitaのサンドボックスの良いところだと感じました。順番にも気を配って、「APIキーを入れる前のきれいな状態をスナップショットで保存してから、通信を塞ぐのとAPIキーを渡すのを“同時”に行う」ことで、APIキーがあるのに通信が開いている一瞬すら作らないようにしています。

それでも残った“抜け道”——ここは正直に書きます

……と、ここまで守りを固めても、抜け道は残りました。都合の悪いことこそ書き残しておきたいので、3つ、正直に挙げます。

① 同じサンドボックスの中からは、APIキーが覗けてしまう。 Hermesは気を利かせて、AI(が使う道具)からはAPIキーを直接見えないように隠してくれます。ところが、APIキーは結局「同じサンドボックスの中で動いているHermes本体」が握っています。だから、少し回り道をして——具体的には、動いているプロセスの情報が見える /proc というLinuxのしくみから、Hermes本体の環境変数を(Claude Codeに教わりながら)覗くと——APIキーは読み取れてしまいました。「外からは守れても、同じサンドボックスの中にいる者からは、原理的に隠しきれない」ということです。

② APIキーを“探させた”だけで、その記録がディスクに残ってしまった。 これは私の反省点です。「APIキーが見えるか試してみて」と(サンドボックスの中の)AIに頼んだところ、AIはその確認のやりとりを会話ログ(データベース)に保存しました。そして、その中に、APIキーが平文のまま残ってしまったのです。せっかく「APIキーはファイルに書かない」と決めていたのに、AIに一度探させただけで、別の場所にこぼれた。エージェント運用の難しさを、身をもって知りました。

③ 通信を塞いでも、DNS(名前解決)という細い管だけは開いていた。 外への通信をほぼ全部ふさいでも、ドメイン名からIPアドレスを引く**DNS(名前解決)**という小さな通り道だけは、開いたままでした。ここを悪用して、データを少しずつ外へ持ち出す、という高度な手口も理論上はあり得ます。ここは、Novita側で塞げるとより安心だな、と感じた点です。

これらは「Novitaが悪い」という話ばかりではなく、“隔離”そのものの原理的な限界や、AIに秘密を扱わせることの難しさでもあります。ただ、③のDNSのように、改善してほしい点も確かにありました。

余談:使ったAIは、自分の環境について平気で“作り話”をした

本筋から少し外れますが、面白かったので触れておきます。今回サンドボックスの中で動かしたAIモデル(無料で使えるNemotronというモデル)は、自分が置かれている環境について、しばしば“作り話”をしました

たとえば「いま外とどうつながっている?」と尋ねると、自分で実行したはずの結果と正反対の説明を、もっともらしい表にまとめて自信たっぷりに返してきました。極めつけは、「必ず実際にコマンドを実行してから答えて」と念を押したのに、実行せずに、それらしい数字(しかも年まで間違っていた)をでっち上げたことです。

念のため補足すると、これは**Novitaのサンドボックスの問題ではなく、使ったAIモデルのクセ(いわゆるハルシネーション)**です。モデルを変えれば結果も変わるはずで、今回はたまたま無料の軽いモデルを使ったから、とも言えます。

むしろ私がここから学んだのは、**「AIの“自己申告”は、そのままでは証拠にならない」**ということでした。だから今回の検証では、AIの言葉を鵜呑みにせず、私(と、伴走役のClaude Code)が別の経路から、実際のファイルや通信を直接確かめるようにしました。この記事に書いた“事実”は、そうやって裏を取ったものです。……この「モデルを変えたらどう変わるか」自体が面白い実験なので、いつか別モデルで試して、後日談として書いてみたいと思っています。

(余談をもうひとつ。この検証を手伝ってもらったClaude Codeも、作業の途中で安全機構が働き、Opus 5からOpus 4.8へ自動で切り替わりました。自分のAPIキーが漏れないかを自分で調べる——というセキュリティ寄りの作業は、こうした安全装置に触れることがあるようです。ちなみにこれは“拒否”ではなく“より慎重なモデルに切り替える”という穏やかな挙動で、公式にも「正当なコーディングやセキュリティの作業を、まれにフラグすることがある」と説明がありました。同じことを試す人には、地味に役立つ豆知識かもしれません。)

総評:Hermesを“載せる場”として、Novitaのサンドボックスはどうか

長くなったので、正直な総評でしめます。今回はHermes本体を使い込んだわけではないので、**あくまで「Hermesを載せて常駐させる“場所”として、Novitaのサンドボックスはどうか」**という視点です。批判ではなく、良い点と改善点を率直に。

良い点(ここは本当に良い)

  • 一時停止・再開のしくみが優秀。一晩置いても消えず、同じURLで、寝ている間は課金されない。
  • 外への通信を細かく制御できる。守りを自分で設計できる。
  • 最新版を焼いた自作テンプレで、起動が速く、版ズレに悩まされない。
  • 無料の範囲で、実費ゼロでここまで試せた。

改善してほしい点(正直に)

  • 公式の“シークレット注入”機能が、こちらの環境では動かなかった(報告済み・返信待ち)。
  • 公式が用意したHermes入りのテンプレートが大きく古く、しかも「最新」と表示していた。
  • 公式サンプルのコードが、そのままでは動かなかった。
  • 通信を塞いでも、DNSだけは素通りだった。

保留

  • Hermes Agent本体の実力そのものは、まだ判断を保留します(使い込み不足)。ただ、「自分の環境について作話する」という上の挙動は、事実として書き留めておきます。

NexaLink Labsとしての結論を、ひとことで。「常駐エージェントの“土台”としては、Novitaのサンドボックスはとても良い。ただし、APIキーのような秘密情報の扱いは、公式機能任せにせず、自分で相当気をつける必要がある」。有償のAPIを本格的に載せるのは、正直まだ少し不安が残ります。だからこそ今回は、無料枠と小さな上限で自衛しました。ここが安心して任せられるようになったら、常駐AIエージェントは、個人や小さなチームにとって、かなり心強い相棒になるはずです。

(本稿でも、安全のため、サンドボックスの固有ID・接続URL・パスワード・APIキーなどは伏せています。また“シークレット注入”機能の不具合については、Novitaからの回答があり次第、内容を反映・訂正します。)

参考情報