SAG / ARCHITECTURE NOTE
RBACとテナント境界:画面の外で権限チェックを完結させる
RBACの定義と必要性、仕組み、SAGアーキテクチャへの適用基準、実務チェックリストを、研究および公式文書を根拠に解説します。
一文で定義
RBACは、役割ごとに許可する操作とデータの所有境界を、サーバーとデータベースで強制する権限モデルです。
要点:ボタンを非表示にするだけでは、APIへの直接呼び出しを防げません。クライアントから送られたtenant IDを信頼すると、他の顧客のデータにアクセスされるおそれがあります。
なぜこの技術が必要なのか?
ボタンを非表示にするだけでは、APIへの直接呼び出しを防げません。クライアントから送られたtenant IDを信頼すると、他の顧客のデータにアクセスされるおそれがあります。
仕組み
サーバーはセッションとmembershipを参照し、リソースのtenantを検証します。データベースのRLSと複合外部キーが、ミスに対する追加の境界となります。
設計時に見るのは精度だけではありません。遅延時間、コスト、データ境界、更新頻度、失敗時の動作をあわせて定義することで、運用時に再現可能な結果が得られます。自動化が値を確信できない場合は、0や成功に置き換えず、未計測・要確認の状態にしておくほうが安全です。
SAGの技術との関係
SAGはプラットフォームの役割と顧客の役割を分離し、リクエストごとにmembershipを確認します。クライアントのtenant headerは信頼せず、テナントをまたぐ参照をDB制約で防ぎます。
実務チェックリスト
- 読み取りと書き込みの両方で所有権を確認します
- 権限の引き下げが次のリクエストから反映されるか確認します
- テナントをまたぐIDを使った失敗テストを行います
- 失敗・空の結果・権限エラーの状態を成功と区別します
- 変更の前後を同じ条件で再検証します
研究と公式文書
参考文書は、原則と推奨事項の根拠となるものです。検索での露出、AIによる言及、順位、売上を保証するものではありません。実際の適用効果は、サービスのデータと同一条件での観測によって確認する必要があります。
RLSが適用される実行ロールも確認する
RLSポリシーが設定されていても、テーブル所有者やBYPASSRLSロールはポリシーを回避できます。SAGでは、これとは別にサーバー側でmembershipとテナント条件を確認します。隔離範囲を判断するには、データベースの接続ロールとポリシーの適用状況をあわせて確認する必要があります。
トピック別の技術参考資料
この技術を続けて読むには
テナント権限、タスクの再試行、キャッシュ、承認履歴について確認します。
SAG / KNOWLEDGE LINKS
