0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS re:Invent 2019: SaaS Tenant Isolation Patterns(SaaS テナント分離パターン) (ARC372-P)

Posted at

動画 https://www.youtube.com/watch?v=fuDZq-EspNA

スクリーンショット 2021-01-23 21.45.04.png

テナント分離は、SaaS アーキテクチャーの最も基本的な側面の 1 つです。すべての SaaS プロバイダーは、提供するテナントリソースの分離と安全を確保する手段について考察する必要があります。その際の課題となるのは、各リソースタイプ(コンピューティング、ストレージ、その他)で、異なる分離アプローチが要求されるということです。このセッションでは、分離オプションの全体像を概観できる、明確なロードマップを作成します。さまざまなマルチテナントモデルと AWS のサービスに広がる分離を達成するための、戦略についてもハイライトしていきます。SaaS ソリューションに分離を導入する際のアプローチに影響を与え得る考慮事項についての、包括的な理解を得ることを目標にします。

descriptionより

Authentication and authorization ≠ isolation

認証認可とは異なる新たなテナント分離のレイヤを追加することにより、各テナントのリソースを分離する
スクリーンショット 2021-01-23 11.08.51.png

Isolation strategy drivers

  • Tiering Strategy: 複数の方法でテナント分離する
  • Noisy neighbor: あるテナントのアクセス(DoS等?) を他のテナントに影響させない
  • Compliance requirements: 金融とかで各種レギュレーションに従うため、テナント分離の方法に制約がかかるかもしれない。設計に影響するのでよく確認してね
  • Legacy architecture: 現在の実装も考慮してね

image.png

Multiple flavors of isolation

  • Silo model: リソース全部分離する。VPCとかも
  • Pool model: リソースを共有する。ポリシーで分離する

スクリーンショット 2021-01-23 11.19.35.png

  • メモ:なるほどなあ。顧客によって要求が違うから、サービスによっては両方の方式でテナント分離を提供できないといけないと
  • メモ:両方の方式で提供はかなりハードになるだろうな

image (1).png

Silo isolation strategies

Silo modelの戦略。それぞれメリデメあるが、VPCレベルが一番common

スクリーンショット 2021-01-23 11.25.45.png

統合すべきところと分離すべきところ

スクリーンショット 2021-01-23 11.26.59.png

Pool-based isolation adds a new wrinkle

ベストプラクティスとは言えない
自然には全く分離されてない。コンプライアンス的にもよくない。分離されるかどうか開発者に委ねられる。

スクリーンショット 2021-01-23 11.29.30.png

認証レイヤや各リソースで分離ポリシーを共有することによりテナントを分離する(いったん概念のみ)

スクリーンショット 2021-01-23 11.33.09.png

Runtime scoped access with IAM

実装の概要(ビデオ 19:47 あたりから)

スクリーンショット 2021-01-23 11.35.51.png

動的ポリシー生成

スクリーンショット 2021-01-23 11.39.22.png

現実的には、顧客は自分のデータは自分が持っていると思っている。SiloだろうとPoolだろうとどんなテナント分離戦略を取ったとしても、このシステムは他のテナントにデータが保存されたり、他のテナントのデータが見えたりすることがないということをことを保証しないといけない。

スクリーンショット 2021-01-23 11.40.38.png

API-enfoced access

API GatewayにLambdaカスタム認証を入れることでテナントポリシーを付与

スクリーンショット 2021-01-23 11.46.26.png

Silo compute isolation patterns

Silo modelでやるにしてもIAMで制御すべき

スクリーンショット 2021-01-23 11.48.06.png

Using roles for silo compute isolation

コンピュートリソースの分離

スクリーンショット 2021-01-23 11.50.25.png

コンテナの場合も同様

スクリーンショット 2021-01-23 11.51.16.png

ポリシーをリソースをまたいで連動 (cascading) させることでテナント分離の管理がシンプルになる

スクリーンショット 2021-01-23 20.24.07.png

Pool requires a broader scope

Poolの場合、IAMポリシーはSiloの場合よりも許可の範囲が広くなる

スクリーンショット 2021-01-23 20.28.44.png

Pool compute patterns for Amazon EC2 and AWS Lambda

EC2とLambdaでpoolするパターン

  • CognitoからEC2やLambdaを実行するIAMポリシー取ってくる(多くのテナントで利用できるよう幅広なポリシーが設定されてる)
  • 分離コンテキストの外にあるRDSやDynamoDBといったリソースにアクセスする時は別のアクセスコンテキストが適用される

スクリーンショット 2021-01-23 20.40.23.png

コンテナだと違った分離の方法になる

スクリーンショット 2021-01-23 20.50.31.png

テナントそれぞれにnamespaceをつくる

スクリーンショット 2021-01-23 20.52.18.png

Storage isolation patterns

ストレージ(DB)の分離はもっとシンプル

スクリーンショット 2021-01-23 20.54.18.png

分離戦略がパフォーマンスやスケーリングのためのpartitioning戦略に影響するので注意

スクリーンショット 2021-01-23 20.55.26.png

Pool isolation with Amazon DynamoDB

DynamoDBでpool分離するときのIAMポリシー

スクリーンショット 2021-01-23 20.59.58.png

Pool with RLS and Amazon Aurora PostgreSQL

Aurora PostgreSQLでpool分離するときのポリシー

スクリーンショット 2021-01-23 21.02.03.png

Isolation with Amazon S3

S3の分離はIAM tag policyで実現できる

スクリーンショット 2021-01-23 21.07.33.png

その他のストレージはそれぞれ色々方法あるので試してみてね

スクリーンショット 2021-01-23 21.08.50.png

Application-enforced isolation (conceptual model) / Applicationによる分離の概念モデル

  • IAMを使わない場合の分離の代替手段
  • リソースへのアクセスポリシーの適用をアプリケーションで強制する
  • JavaやNode.jsで実装したり、ツールやライブラリ、フレームワークなどを用いて実現する

スクリーンショット 2021-01-23 21.17.34.png

Weighing your options / 分離方法の選び方

  • Siloは顧客の厳しい要件にも耐えられるしツールも色々あるが、管理コストや費用が増える
  • ポリシーによる分離はSiloよりも細かい単位での分離ができ運用も柔軟になるが、顧客の要望に応えられなかったり、技術の発展に依存したり、複数の技術を組み合わせたりと実装が大変
  • サービスやリソースごとに分離方法を変えるハイブリッドもあるよね

スクリーンショット 2021-01-23 21.28.43.png

How do we know ouri isolation model is working? / テナント分離のテスト(検証)について 

  • 6ヶ月かけて分離のテストのシナリオとtesting framework作った(マジか)
  • テナント1のポリシーでアクセスし、テナント2のコンテキストを注入する(メモ:SQLならwhere文に tenant_id = 2 等を仕込む感じなのかな)

スクリーンショット 2021-01-23 21.39.17.png

まとめ

スクリーンショット 2021-01-23 21.44.02.png

所感

  • 確かに、厳密にデータを分離するよう顧客からの強い要求があった場合、Siloモデルを取らざるを得ないのかな
    • 運用がハードすぎるので、非常に高額なエンタープライズプランとかでないと対応するのは難しそう
  • SOCとか取ってデータ保護の安全性が認証されてる場合でも、Siloモデルによるデータ分離が求められることあるんだろうか?
  • PoolでSQLのWhere句だけによって分離されてる場合でも、PostgreSQLのRLS (Row Level Security) やMySQLのViewテーブル、S3のタグベースでのアクセスポリシーなど、着手しやすいテナント分離の方法は早期に実施しておいた方が良さそう
    • 事故が起きてから信頼を取り戻すのは難しい
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?