
2026/01/15 4:06
**Ask HN:LLM(大規模言語モデル)に安全にSSH/データベースアクセスを許可するにはどうすればよいですか?**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
主要メッセージ:
LLM(大規模言語モデル)を一般ユーザーとして扱い、必要最低限の細粒度認証情報のみ付与し、ツールと監査でハードコーディングされた制限を強化し、セキュリティのためにプロンプトだけに頼らないようにする。
重要性:
細粒度権限・プロキシ層・決定論的検証(パーサーまたは事前承認済みスクリプト)と不変状態ストアが、偶発的または悪意ある操作を防ぐ。コマンド許可リストがあっても、データベース、SSHシェル、root権限への直接アクセスは依然として濫用され得る。
主な実践項目:
- PostgreSQL の読み取り専用ユーザーなどの組み込み DB ロールを使用するか、別途エージェントアカウントを作成し、SQL クエリの正規表現フィルタリングは避ける。
- SSH では低権限ユーザーを作成するか ForceCommand / authorized_keys 制限を利用し、doas/sudo を用いて細かな制御を行う。
- 生のシェルアクセスよりも Ansible や Terraform のような自動化フレームワークを使用し、LLM が監査下でこれらのツールを変更できるようにする。
- ローカル開発データベースやバージョン管理コピー(DoltDB など)を優先し、レビュー済みの変更のみ本番環境へマージする。
- immudb や Datomic のような不変状態ソリューションを使用して、意図しない変更をロールバックできるようにする。
- Microsoft Presidio のような法的/プライバシーコンプライアンスとレダクションツールを通じて、本番データや PII への直接読み取りアクセスを検証する。
将来の展望:
組織は LLM 用の認証モデルを強化し、監査ログを統合、迂回策をモニタリングし、変更を本番に適用する前にローカル/開発環境でテストする。これにより侵害リスクを低減し、規制遵守を確保し、業界全体のセキュリティガイドラインと LLM の細粒度アクセス制御への道を切り開くことを目指す。
(元の表現を保持したい場合は、このバージョンに置き換えてください。これで主要ポイントが反映され、新たな推論は導入されません。)
本文
私はこの質問に対して非常に情熱を抱いています——それは昨日、ブログ記事を書いたほどです!
LLM(大規模言語モデル)には「許可したい行動だけ」を許可し、「許可したくない行動」は禁止するような、極めて細かい権限設定を与えることをお勧めします。
データベースの設定だけでこれを実現できる場合は少なく、難しいか不可能なケースも多々あります。その際にはプロキシを使って、LLM/エージェントが持つ権限と実際にDBへ送られる権限を分離します。プロキシ側で許可/ブロックのルールを強制できます。
SSH はさらに難しいです。コマンドはセッション中に流れるバイトストリーム内の他のデータと混在するため、許可リストを適用することが極めて複雑になるからです。実際に「コマンドのホワイトリスト化」がどれほど難しいかについて書いた別の記事もあります:
https://www.joinformal.com/blog/allowlisting-some-bash-comma…
多くの開発者向け CLI ツールは、悪意あるユーザーが任意のフラグを追加して実行することを想定して設計されていません。Simon W. の執筆も非常に参考になりました。
免責事項: 私は Formal という会社で働いており、組織が「最小権限」を達成するためにプロキシを利用するのを支援しています。
ブログ記事を書いていただきありがとうございます—とても情報量豊富です!
私も同じような経験があります。多くのツールを自由に使えるエージェントを動かすことは可能ですが、デフォルトでは適切にプロンプトが設定されていないため、行き詰まりや愚かな操作に陥りがちです。パンドラの箱を開ける前に「最小権限」の原則とその意味を十分理解しておくべきです。それは現在、式のすべての層に適用されます。
あなたの記事は簡潔にまとめると「エージェントとそれがアクセスできる機密情報の間には必ず決定論的な検証レイヤーを設けるべき」ということです。
当社の解決策:
- エージェントがローカル開発データベースで作業し、スクリプトを出力させる。
- そのスクリプトをバージョン管理にチェックイン(監査可能かつレビュー済み)。
- それから本番環境へ実行する。
反復は遅くなりますが、当社にとっては妥当なトレードオフです。
LLM に PII(個人を特定できる情報)への読み取り権限さえ与えるのは、大きな「ノー」です。PII を扱う場合、本番で抽出されたデータを処理する必要があるなら、https://github.com/microsoft/presidio は PII を除去する優れたツールです。ただし、最初のパスとしては監査が必要ですが、非常に効果的です。
LLM があなたの DB・サーバーなどから読み取るすべての情報は、LLM プロバイダーへ送られます。自前でローカル実行している LLM 以外では、本番データへのアクセスを許可する前に、法務やプライバシーポリシー・コンプライアンス要件を十分に検証してください。
絶対にしないこと:
AI が制限を迂回してしまうケースは頻繁に報告されています。ツールの欠点を埋めるために代替手段を作り出すことで、実際には「本来アクセスできない」リソースへもアクセスできてしまいます。次の AI によるデータベース破壊事件にならないよう注意してください。
LLM ベースのアプリが動くアカウントは、人間ユーザーと同様に保護すべきです。人を雇う際に「全権限」を与えてただし触ってはいけないものだけといった管理はありません。必要最低限の権限のみ付与します。同じ方針で AI も扱います。
「やめる」
「より多くの自律性を持たせるのを止める」のか、「サーバー/DB にアクセスさせない」のか? 確かに慎重になりたいですが、手作業で全て行うことも現実的ではありません。
既存ツール(Ansible, Salt, Chef, Puppet, Bcfg2, Cfengine など)はスケールしたシステム管理のために設計されています。
「他にあるツールを使わずに新しいものを導入する必要がある?」という疑問はありますが、エージェントはまだ流行かもしれませんし、長期的な存在になる可能性もあります。試してみて、どこで使えるか・使えないかを理解する価値は十分にあります。
つまり:
- 本番リソースへのアクセスは絶対に許可しない
- シンプルなサンドボックス(コマンドパターンなど)だけではデータベース削除などの危険を防げない
PostgreSQL など多くの DB は堅牢な権限機構を備えています。SQL クエリに対して正規表現で制御するより、エージェント専用の PostgreSQL ユーザーを作り、特定テーブルへの読み取りだけを許可する方が安全です。
DB アクセスの提供
-
RDS:AWS/EC2 環境内から接続。つまり、
を実行できるサーバーに SSH でアクセスさせるか、トンネルを作る必要があります。psql
複数アプリ・DB がある場合は同じ設定を何度も行うことになるため、エージェントだけを設定して済ませる方が楽です。 -
読み取り専用ユーザー:本番には読み取り専用、ステージングとローカル開発 DB にはフル R/W を付与。たとえ外部へ出てしまっても何も起きません。
SSH
個人的な環境なのでそのままにしています。Claude や Codex はあなたの環境を極端に変更する可能性があるので、
sudo のパスワード保護を行っています。本番では適切な読み取り専用ロールを使用し、時折自分のロールを使わせますが、最終的には
kubectl create pod << YAML などを即座に作成してしまうケースがあります。それは失敗したりプロンプトされるだけなので問題ありません。
PII と認証
LLM に PII を含むフィールドへの読み取り権限を与えることに抵抗があるか? 認証関連はどうでしょうか? これらはホワイトリストまたはブラックリストで管理すべきです。
単に LLM を「ユーザー」として扱い、SQL コマンドを解析(パース)し、許可されたサブセットのみ実行するようなパーサーを作ることが有効です。
例:https://simonwillison.net/2025/Feb/3/a-computer-can-never-be…
Immudb や Datomic などのツールが注目される可能性があります。状態を以前のイミュータブルなスナップショットにロールバックできる機能は、LLM 時代においてさらに重要です。
実践的コントロール
- DB:必要なアクセスレベルのアカウントを使用。
- SSH:AI 用に専用アカウントを作成しアクセスを制限。
のsshd_config
(またはForceCommand
のauthorized_keys
)で、許可したい単一コマンドだけを実行できるようにします。柔軟性は落ちますが、制御は保てます。command= - 自動化:サーバーへ SSH する代わりに Ansible, Terraform などのオートメーションシステムで管理。AI に対してオートメーションを変更させ、コミット前にレビューします。ログはシステムへのアクセスなしにクエリできる場所に集約します。
バージョン管理されたデータベース
DoltsDB を構築し、SQL データベースをバージョン管理しています。AI に本番 DB のブランチ/コピーを与え、変更がレビュー済みであればマージする仕組みです。MySQL/PostgreSQL ではなく Dolt/Doltgres を使用します(無料・オープンソース)。
TL;DR
- LLM に SSH アクセスを絶対に許可しない。
- 個別実行権限を持つツールのみを与える。
- プロキシ、読み取り専用アカウント、自動化システム、バージョン管理を併用する。
- スクリプトや変更は本番に反映する前に必ずレビューする。
AI を「細かい権限を持つユーザー」として扱うことで、制御を保ちつつその能力を最大限に活用できます。