ある SaaS プロバイダーが、複数のテナント(企業顧客)向けにマルチテナントアーキテクチャを AWS で設計しています。テナントごとにデータの完全な分離が必要で、あるテナントのデータが別のテナントに漏洩することは絶対に許されません。一方で、各テナントに独立したインフラを持つことはコスト的に非現実的です。最も適切なデータ分離戦略はどれですか?
- A. すべてのテナントデータを単一の Amazon RDS データベースに保存し、テナント ID カラムでフィルタリングする。アプリケーション層でテナント分離を実装する
- B. テナントごとに独立した AWS アカウントを作成し、AWS Organizations で管理する
- C. Amazon S3 の単一バケットにテナント ID のプレフィックスでデータを分けて保存し、S3 バケットポリシーで全テナントにバケット全体へのアクセスを許可する
- D. Amazon DynamoDB でテナント ID をパーティションキーとして使用し、IAM ポリシーの DynamoDB 条件(LeadingKeys)で各テナントが自分のパーティションのみアクセスできるように制限する。重要データには AWS KMS のテナント別 CMK で暗号化する
解答と解説を見る
正解: D
DynamoDB の LeadingKeys 条件付き IAM ポリシーは、各テナントが自分のパーティションキー(テナント ID)に対応するデータのみアクセスできることを IAM レベルで保証します。アプリケーション層のバグによる情報漏洩を防ぐため、インフラレベルでの分離が実現できます。テナント別 CMK による暗号化で、万一のデータアクセスにも対応できます。 A: 単一 DB でのテナント ID フィルタリングはアプリケーション層に分離の責任を集中させており、SQLインジェクションやバグで別テナントのデータにアクセスされるリスクがあります。強力なデータ分離保証には不十分です。 B: テナントごとの AWS アカウント分離は最も強力な分離を提供しますが、コスト的に非現実的という要件に反します。数百〜数千テナントでは運用が困難です。 C: 単一バケットへの全テナントアクセスを許可することは、アクセス制御をアプリケーション層のみに依存しており、設定ミスで全テナントのデータが漏洩するリスクがあります。
📚 関連サービスの解説: Amazon DynamoDB ・ AWS IAM