AI生成アプリケーションにも、他のアプリケーションと同じバックエンド制御が必要です。サーバー側のシークレット、認可、テナント分離、安全な書き込み、migration、予算、オブザーバビリティ、復旧を用意します。動作するUIとAPIコードを生成できても、これらの制御が存在する証明にはなりません。
最も早いレビュー方法は、2人目のユーザーテストです。2人のユーザー、2つのテナント、2つのレコードを作成し、最初のユーザー向けデモでは試さなかったすべての境界を越えられるか確認します。
動作するデモが証明するのは一つの経路だけ
コーディングエージェントは通常、目の前にある受け入れテストに合わせて最適化します。タスクが「メモアプリを作る」なら、メモを追加して一覧表示するフォームで条件を満たすかもしれません。しかし、あるユーザーが別ユーザーのメモIDをリクエストできるか、タイムアウトした挿入が繰り返されるか、ブラウザーバンドルに管理キーが含まれるかは、タスクで問われない可能性があります。
これは仕様とインフラの両方の問題です。レビューでは、不足している制約を実行可能なテストにする必要があります。
シークレットはサーバーから出さない
生成されたJavaScript、source map、モバイルbundle、commit済み環境ファイル、ログ、エラーレスポンスから、プロバイダーと管理用の認証情報を検索します。公開クライアントには、公開利用を前提に設計された認証情報か、現在のユーザーとアクションに限定した短期トークンだけを渡します。
OWASP API Security Top 10では、オブジェクトレベルの認可不備と認証不備を別のリスクとして扱っています。認証は呼び出し元が誰かを証明し、認可はその呼び出し元が対象オブジェクトへアクセスできるかを判断します。
エージェントセキュリティガイドでは、エージェントの構築用認証情報をデプロイ済みアプリケーションのIDから分ける方法を説明しています。
すべてのデータ経路でテナントを分離する
一つのテーブルにtenant_idを追加するだけでは不十分です。読み取り、更新、削除、ファイル検索、キャッシュキー、バックグラウンドjob、検索インデックス、Realtime channel、exportのすべてで、同じテナント境界を維持する必要があります。
オブジェクトへの直接参照をテストします。
- テナントAとしてログインし、レコードを作成する。
- テナントBとしてログインする。
- すべての公開API経路から、テナントAのレコードをIDでリクエストする。
- 更新、削除、export、ファイル、subscriptionのエンドポイントでもテストを繰り返す。
- 適切な箇所では、存在しないレコードと認可されていないレコードに、情報を開示しない同じ結果をサーバーが返すことを確認する。
マルチテナントのエージェントインフラでは、データベース、quota、共有状態の境界をまとめて扱っています。
書き込みにはリプレイ防止が必要
ネットワーク障害は結果不明の状態を生みます。サーバーが書き込みをcommitした後、クライアントがレスポンスを受け取れない場合があります。エージェントやブラウザーが冪等性キーなしで再試行すると、1回のクリックから注文、メッセージ、デプロイ、請求が2件作られる可能性があります。
各書き込みについて論理操作IDを定義し、最初の結果を保存し、競合する再利用を拒否し、保持期間を文書化します。エージェントの再試行とチェックポイントの復旧フローでは、最初の試行が完了したか呼び出し元に分からない場合を扱います。
migrationには復旧経路が必要
生成されたmigrationは、既存の全行を変更できるにもかかわらず、生成されたアプリケーションコードよりレビューが手薄になりがちです。適用前に次を行います。
- ORMコマンドだけでなく、生成されたSQLを調査する。
- lock、テーブルの書き換え、破壊的な句を特定する。
- 本番と同じ形のデータコピーに対して実行する。
- 移行中に旧版と新版のアプリケーションをテストする。
- 部分的なデプロイに対するrollbackまたは前方修復を定義する。
コーディングエージェント自身がmigrationを書いたという理由で、本番DDLへの無制限アクセスを与えてはいけません。SupabaseのMCPセキュリティガイダンスは、開発プロジェクト、プロジェクトへのスコープ設定、本番データの回避を明示的に推奨しています。どのバックエンドツールにも同じルールを適用してください。
コストにはサーバー側で強制する上限が必要
モデル呼び出し、有料ツール、データベースリクエスト、バックグラウンド処理、ストレージ、ランタイムを、テナント単位かつワークフロー単位で制限します。エージェントにコストを抑えるよう求めるプロンプトは、制限を強制できません。
完了成果あたりのコストには、失敗した実行と再試行の費用も含めます。AIエージェントのインフラコストガイドで、計算方法と予算を設定する箇所を説明しています。
インフラ側で安全な経路を直接提供する
バックエンドは、スコープ付き認証情報、構造化されたエラー、冪等な書き込み、状態記録、制限付きサービスアクセスをデフォルトで返すべきです。レビューで一度は制御の欠落を見つけられますが、プラットフォームの契約なら、すべての新規プロジェクトで同じ欠落を防げます。
Cohesivityはコーディングエージェントへ隔離されたテナントと、上流プロバイダーの認証情報を公開しない、対応バックエンドサービスへのサーバー側アクセスを提供します。行単位の認可、承認ルール、安全なスキーマ設計は、引き続きアプリケーションの責任です。
ユーザーを招待する前に2人目のテストを実行する
使い捨て環境で2人のユーザーと2つのテナントを使います。テナントをまたぐID、繰り返す書き込み、失効した認証情報、失敗するmigration、上限超過を試します。各失敗について、正確なリクエストとサーバーの結果を記録してください。
以下のプロンプトは、何も変更する前に、このレビューをファイル単位の監査へ変換します。