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:

  • エージェントごとに専用のロールを用意する。
  • 探索にはリードレプリカを使用する。
  • 行レベルセキュリティを実装する。
  • ステートメントタイムアウトを設定する。
  • すべてのトラフィックをコントロールプレーン経由でルーティングする。
  • デフォルト拒否ポリシーを使用する。
  • 高リスクなタスクには人間の承認を必須とする。
  • 改ざん不可能な監査ログを保持する。

静的な制御はそれぞれの役割を果たします。コントロールプレーンが残りの部分を担います。両方が必要です。

Source: https://dev.to/maxime_dalessandro_28171d/how-to-give-an-ai-agent-safe-access-to-your-production-database-1ami

Optional learning community: https://t.me/GyaanSetuAi