Open3
マルチテナント設計 B2Bアプリ設計
マルチテナントのデータ出入力を安全に行うための調査をする
- そもそもアプリに必要な認可の種類が何かを確認する
- DBカラムへの安全なアクセス方法を確認する
- RLS
-
https://blog.masuqat.net/2020/03/28/naive-multitenancy-with-row-level-security/
- コネクション都度を閉じる
- 速度が1.4倍になる
-
https://blog.masuqat.net/2020/03/28/naive-multitenancy-with-row-level-security/
- 認証機能とどのように連携できそうであるかを確認する
-
LowRevelSecurity をPython アプリケーションで扱う方法を調査する
- ORM やフレームワークでどのように扱うか
- Django にはオブジェクトレベルのアクセス権限があるからそれでも良いかも -
DjangoGuardian
- "インスタンス作者のみアクセス" 以外の方法があるかどうかを確認する
- https://coderbook.com/@marcus/how-to-restrict-access-with-django-permissions/
事例を読んだ時点での評価
- Django - RowLevelSecurity ○
- 実装は必要になるものの、目的は達成できそう
- Djangoの組み込みのオブジェクトインスタンスレベルの制御 ✖️
- Django admin のみで機能するらしい(Django 2.1時点)
- https://coderbook.com/@marcus/how-to-restrict-access-with-django-permissions/
- django-guardian 調査途中
- django-rules △
- is_admin, is_same_tenant, is_me のような関数で評価していく必要があり、制御のミスが起きそう。
- https://thinkami.hatenablog.com/entry/2020/04/25/105952
user の一時停止は実装しない方が良さそう -> 脆弱性になる
B2Bは基本的にチームの停止者のデータを扱えるように設計する。
停止して、復活させては脆弱性になり得る。-> 永久停止して、key 情報やメールアドレスは削除する。
無効化は OAuth , OIDC, SAML の根本から実施する必要がある。
ユーザー数変更リクエストとか欲しい