他社データと混ざらない構造とは?フォーム管理SaaS「inqbox」の安全性へのアプローチ

Web サイトに置くお問い合わせフォームやアンケートフォームには、氏名や連絡先などの個人情報に加え、具体的な要望や相談といった機密性の高い情報が集まります。こうしたデータを扱う外部 SaaS を導入するとき、企業のセキュリティ担当者や事業責任者が確かめるのが「自社のデータが他社のデータからきちんと隔離されているか」です。自社宛ての問い合わせを他社が見られたり、他社のデータと混ざったりする事故は許されません。そのため SaaS を選ぶ際は、通信の暗号化に加えて、システムの内部でテナント(契約企業)ごとのデータをどう分けているか、その設計が妥当かどうかも評価の対象になります。
問い合わせデータに求められるセキュリティ要件
SaaS 型のフォーム管理システムでは、送信された問い合わせ本文や顧客の連絡先がサービス側のデータベースにたまっていきます。一般的な SaaS では、複数の企業のデータを 1 つのデータベースに同居させる構成がよく取られます。この構成で事業者が心配するのは、ソフトウェアの不具合や設定ミスでテナントの境界が破られ、他社のデータが混ざったり外に漏れたりすることです。安全性を確かめる立場からは、「他社のデータから切り離されている」と言える具体的な根拠が求められます。
「組織」と「フォーム」の関係
inqbox では、データを「組織」と「フォーム」の 2 階層で管理しています。組織とフォームは 1 対多の関係で、契約企業ごとに組織を 1 つ作り、その下に用途別のフォームを必要な数だけ作れます。
この構造なら、部署やプロジェクトごとにフォームを分けつつ、全体をまとめて管理できます。たとえば採用窓口のフォームと営業問い合わせのフォームを別々に運用しながら、メンバーの管理は組織単位で一括して行えます。設定や契約プランも組織に集約されるので、フォームごとに管理者がばらばらになって統制が取れなくなる事態を防げます。
組織ごとに独立したデータベース
inqbox では、データを分ける境界をフォームではなく組織に置いています。
フォームを境界にすると、フォームを追加するたびに分離の設定が必要になり、設定漏れから意図しない公開や漏洩が起きるおそれが増えます。組織を境界に固定しておけば、新しく作ったフォームとそこに届く問い合わせは、自動的に親の組織の内側に入ります。運用の手間を増やさずに安全性を保てます。
分け方には、1 つのデータベースを全組織で共有してレコードごとに組織 ID で区別する「論理分離」もあります。inqbox はそれより一歩進めて、組織ごとに専用のデータベースを用意しています。問い合わせの本文、自動判定の結果、社内コメントといった業務データは、その組織専用のデータベースにだけ保存されます。
接続の面でも分けています。各組織のデータベースには、その組織のデータベースだけを開ける専用の認証トークンを発行しています。すべての組織のデータベースを開けるような共通の鍵は、アプリケーションでは使っていません。仮にプログラムの不具合で組織 ID の指定を誤ったとしても、別の組織のデータベースにある問い合わせは同じクエリの結果に出てきません。
なお、組織やフォームの設定、メンバー情報は、サービス全体の管理用データベースで一元管理しています。こちらは各レコードを組織 ID で絞り込んで扱っています。
組織内の権限とテナント分離の違い
区別しておきたいのが、組織内でメンバーの操作を制限する「権限管理」と、他の組織のデータへのアクセスを遮る「テナント分離」です。inqbox では、組織の設定やフォームの追加といった操作をオーナーに限定しています。この権限管理はあくまで組織の内側の話です。権限の設定を誤っても影響は組織内にとどまり、他の組織にデータが漏れることはありません。
開発・運用で意識しているデータ保護の取り組み
組織ごとにデータベースを分けていても、「いまどの組織として操作しているのか」の判定を誤れば、別の組織のデータベースを開いてしまいます。そこで inqbox では、次のルールを設計の段階で決めています。
- 操作対象の組織は、ログイン中のセッションとメンバー登録から毎回サーバー側で判定します。組織 ID をリクエストの値から受け取ることはしません。
- 組織を判定できない場合は、別の組織に切り替えて処理を続けず、エラーにします。
- フォームの指定は、その組織に属するフォームの中からだけ探します。他の組織のフォーム ID を指定しても、存在しないフォームと同じ扱いになります。
- メンバーから外されたユーザーは、次の操作から即座にアクセスできなくなります。
パーティーハード株式会社は、PHP の Laravel や Symfony を使ったバックエンド開発、Next.js や Vue によるフロントエンド開発を数多く手がけてきました。受託開発の現場で求められるセキュリティ要件や、Web API での認証・セッション検証の知見は、inqbox の設計にもそのまま生かしています。
安全なデータ基盤で日々の問い合わせ対応を支える
組織を単位にデータを分ける設計は、複数のフォームを柔軟に運用できる拡張性と、厳格なデータ保護を両立させる土台になります。組織内の権限管理とテナント分離の役割を分けたうえで、問い合わせデータそのものを組織ごとのデータベースに分けることで、実装ミスがあっても他社のデータと混ざりにくい構造にしています。パーティーハード株式会社は、こうした設計と運用の知見を生かし、企業が安心して問い合わせ対応を任せられる環境を提供していきます。

望月 涼太 / polidog
Co-Founder / Web Engineer