How to Give AI Agents Safe Database Access
AIエージェントに本番データベースへのアクセス権限を与えることは、極めて大きなリスクを伴います。読み取り専用ユーザーにするだけでは不十分です。エージェントは意図やデータの機密性を判断できません。書き込み権限を与えると、プロンプトインジェクションによって、役立つエージェントが破壊的な存在へと変貌してしまう可能性があります。
データを安全に保つには、2つの保護レイヤーが必要です。
Layer 1: Static Database Controls これらはデータベースエンジン内の基本的な設定です。まずこれらを実施してください:
- Least-privilege roles: エージェント専用のロールを作成してください。管理者アカウントは決して使用しないでください。
- Read replicas: 分析用エージェントにはレプリカを使用し、本番環境のパフォーマンスを低下させないようにします。
- Row-level security: ポリシーを使用して、エージェントが閲覧できるデータを制限します。
- Statement timeouts: 暴走したクエリによってサーバーがダウンするのを防ぎます。
- Allowlists: 接続できるホストを特定のホストに制限します。
Layer 2: The Runtime Control Plane 静的な制御はアイデンティティ(身元)を確認するだけです。エージェントによるデータの持ち出しや、悪意のある指示に従う行為を止めることはできません。エージェントとデータベースの間に介在するコントロールプレーンが必要です。
このレイヤーは、以下の4つの役割を果たす必要があります:
- Classify: すべてのクエリを読み取り、書き込み、またはスキーマ変更としてラベル付けします。
- Enforce default-deny: 明示的に許可したもの以外はすべてブロックします。
- Gate risky actions: 一括削除やスキーマ変更には、人間による承認を必須にします。
- Record everything: すべての操作とすべての承認について、改ざん不可能なログを保持します。
Why this matters: プロンプトの中にルールを記述しても、エージェントはそれを無視できてしまいます。コントロールプレーンはエージェントのコンテキストの外側に存在します。それはエージェントの「計画」ではなく、実際の「クエリ」を監視します。これにより、プロンプトインジェクションから保護されます。
Use this checklist for safe access:
- エージェントごとに専用のロールを用意する。
- 探索にはリードレプリカを使用する。
- 行レベルセキュリティを実装する。
- ステートメントタイムアウトを設定する。
- すべてのトラフィックをコントロールプレーン経由でルーティングする。
- デフォルト拒否ポリシーを使用する。
- 高リスクなタスクには人間の承認を必須とする。
- 改ざん不可能な監査ログを保持する。
静的な制御はそれぞれの役割を果たします。コントロールプレーンが残りの部分を担います。両方が必要です。
Optional learning community: https://t.me/GyaanSetuAi
