採択 2021/05/23 15:00〜 Track B 50 min

PostgreSQLの行レベルセキュリティとSpringAOPでマルチテナントのユーザー間情報漏洩を防止する JJUG CCC 2021 Spring

7
little_hand_s 松岡(@little_hand_s) little_hand_s

Presentation Type [Choose either from Standard / BeginnerSpeaker / StepUp]: Standard
Level [Choose either from Beginner / Intermediate / Advanced]: Intermediate
Categories [Choose either from Java SE / Jakarta EE / Server-side / Cloud / JVM / DevOps / Tools / Others]: Server-side
カンファレンス終了後にJJUG YouTubeチャンネルでセッション動画の公開を希望する / Agree to publish your session to JJUG YouTube channel after conference [Yes or No]: Yes

Abstract:
Webアプリケーションにおいて、マルチテナント型、つまり複数のユーザー組織がアプリケーションとデータベースを共有する構成にすることがあります。この構成の持つリスクとして、万が一バグにより他テナントの情報が見えてしまうとそれは情報漏洩となり、重大なインシデントとなってしまうことがあります。この重要性を考えると、「気を付けて実装する」だけではなく、仕組みで漏洩を防ぐような対策には価値があります。

そこで、今回はPostgresSQLの行レベルセキュリティと、SpringAOPによる処理を組み合わせて、ログインしているテナントのデータにしかアクセスできなくする仕組みを実現しました。
導入にあたり考慮した複数の選択肢、乗り越えたいくつかの壁についてご紹介します。
同様の課題を抱えている方の参考にしていただけるような情報をお伝えしたいと思います。