Slide 1

Slide 1 text

© 2024 Anti-Pattern Inc. All rights reserved. BtoB SaaS開発基礎講座 2024/06/12 於 ⽇本CTO協会 合同新⼈研修 株式会社アンチパターン ⽮ヶ崎哲宏

Slide 2

Slide 2 text

まずは︕︕︕ 2 本⽇はなるべくインタラクティブ にやりたいと思います︕ 右のURLにアクセスお願いしま す。まずは練習で、「ハロー︕」 とか打ってみてください〜︕ いろいろ質問するので、ここか ら答えてみてください〜︕ 講義内限り

Slide 3

Slide 3 text

⾃⼰紹介 3 ⽮ヶ崎 哲宏(Akihiro YAGASAKI) 株式会社アンチパターン 取締役 CTO兼COO 役割︓⽇本のソフトウェアエンジニアを憧れの職業に するためのいろいろ 経歴︓アマゾン ウェブサービス ジャパン にて SaaSシニアパートナーソリューションアーキテクト Webメディア/SaaSベンダーにて技術責任者ボードメンバー ⼤⼿SIerグループ会社にて情シス責任者 アニメソングのコーラス など 2022, 2023, 2024 Japan AWS Top Engineers (Software) 1975年⽣まれ

Slide 4

Slide 4 text

本⽇のゴール 4 「SaaSって、こんなこと考えないといけないんだな〜〜〜」 っていうのをほんのりわかってもらって、本当の仕事の場⾯で こういうのが必要になった時に、 「あ、そういえばSaaSってそういうの必要だって⾔ってたな〜 チームでいろいろ試⾏錯誤してたわそういえば」 って思いだしてもらえるようにする︕ ※そのため、厳密には間違ってるけど だいたい雰囲気をわかってもらう系 で⾏きます︕

Slide 5

Slide 5 text

© 2024 Anti-Pattern Inc. All rights reserved. SaaS ってそもそもなんだ︖︕

Slide 6

Slide 6 text

© 2024 Anti-Pattern Inc. All rights reserved. その前に︕ 時間かかることを先にやっちゃいましょう︕

Slide 7

Slide 7 text

チームの準備 今⽇はみなさんのロールもスキルもバラバラです なので、チームで助け合い&話し合いをして進めてみましょう︕ ということで、まずはお互いに⾃⼰紹介してください〜︕(3分) 例(全然このとおりじゃなくてOKです) ・名前 ・会社名 ・役割(フロントエンジニアとかデータサイエンティストとか) ・CTO協会新⼈研修で持ち帰りたいもの ・好きなSaaS などなど

Slide 8

Slide 8 text

GitHub の準備 https://github.com/yaggytter/sampleapp-basic-chat ここにアクセスして、「.」(ドット)キーを押してみてください︕エディタ(VSCode)の画⾯になります GitHubにログインした後に、

Slide 9

Slide 9 text

GitHub の準備 - 2 エディタ(VSCode)が表⽰されたら、 左上の三本線=> ターミナル=> 新しいターミナルを押し 画⾯下の GitHub Codespaces で作業を続⾏ける を押す

Slide 10

Slide 10 text

GitHub の準備 - 3 画⾯上の⽅の、 2 cores なんたらを選ぶ そしてしばらく待つ・・・

Slide 11

Slide 11 text

GitHub の準備 - 3 右下のShellの画⾯で cd ./php/laravel/ ./init.sh を実⾏して、 しばらく待つ こんな感じのが出ればOK

Slide 12

Slide 12 text

© 2024 Anti-Pattern Inc. All rights reserved. しばらく待っている間に 簡単に弊社の紹介

Slide 13

Slide 13 text

© 2024 Anti-Pattern Inc. All rights reserved. 会社の紹介 「⽇本のソフトウェアエンジニアを憧れの職業へ」を掲げるスタートアップ 企業概要 会社名 株式会社アンチパターン (Anti-Pattern Inc.) 設⽴ 2019年7⽉1⽇ 代表者 ⼩笹 佑京 (おざさ ゆうき) 所在地 東京都港区南⻘⼭3-15-9 MINOWA表参道3階 資本⾦ 65,000千円 主要株主 ⼩笹佑京 決算期 6⽉ 公式WEB/SNS https://anti-pattern.co.jp / X : @antipatterninc SaaSコントロールプレーンをSaaSとして機能提供 B2B SaaSの開発/運⽤/販売を⽀援するSaaS 様々な企業に対するソフトウェア開発の⽀援事業 アジャイルのアプローチでプロダクト価値を最⼤化 ソフトウェア開発⽀援 優秀なエンジニアと、⾼付加価値/⾼単価な案件を依頼 したい企業のマッチングサービス AWSエンジニア特化型マッチングサービス Webアプリケーションをテーマにソフトウェア開発を4年間かけて学び デジタルネイティブ⼈材を輩出 ⼤学⽣向けプログラミング学習コミュニティ ソフトウェアエンジニアに必要な場を提供 エンジニア向け勉強会/交流会/セミナーなども実施 エンジニア特化型コミュニティスペース 実務シミュレーションによるエンジニアのスキル可視化、実⼒向上を図る。 実技型試験サービス AWSエンジニアのスキルチェックサービス 13

Slide 14

Slide 14 text

© 2024 Anti-Pattern Inc. All rights reserved. SaaS企業の成⻑サイクル BizDevOps⽀援 Product Development プロダクト作り Build an Organization 組織作り Financing 資⾦作り 顧客提供 価値の拡⼤ 組織の拡⼤ 投資の拡⼤ 成⻑サイクルを拡⼤ エンジニア採⽤ 企業情報 14

Slide 15

Slide 15 text

© 2024 Anti-Pattern Inc. All rights reserved. AWS パートナーとしての弊社 ※ engineed および SaaSus Platform において

Slide 16

Slide 16 text

© 2024 Anti-Pattern Inc. All rights reserved. SaaS ってそもそもなんだ︖︕

Slide 17

Slide 17 text

改めて SaaS とは https://www.ipa.go.jp/security/reports/oversea/nist/ug 65p90000019cp4-att/000025366.pdf NIST によるクラウドコンピューティングの定義 より 引⽤元︓ NIST によるクラウドコンピューティングの定義

Slide 18

Slide 18 text

改めて SaaS とは https://www.ipa.go.jp/security/reports/oversea/nist/ug 65p90000019cp4-att/000025366.pdf NIST によるクラウドコンピューティングの定義 より 引⽤元︓ NIST によるクラウドコンピューティングの定義 むずい

Slide 19

Slide 19 text

雑に 改めて SaaS とは インターネット越しに ソフトウェア(アプリケーション) をサービスとして 利⽤できるようにしたもの

Slide 20

Slide 20 text

雑に 改めて SaaS とは インターネット越しに ソフトウェア(アプリケーション) をサービスとして 利⽤できるようにしたもの ここで質問 SaaS と聞いて 思いつくサービスは︖

Slide 21

Slide 21 text

SaaS と⾔えば

Slide 22

Slide 22 text

BtoC と BtoB BtoC BtoB BtoG BtoE ※分類の仕⽅はあくまでも例です

Slide 23

Slide 23 text

SaaS の活⽤メリット 営業管理ソフト 会計ソフト 労務ソフト 営業管理 SaaS 会計 SaaS 労務 SaaS コスト & リスク コスト & リスク => 割り勘効果を得ている ⾃社開発 & パッケージソフト SaaS 利⽤ 23

Slide 24

Slide 24 text

SaaSビジネスに関しては、⽇本語で読める良質な情報が増えてきている

Slide 25

Slide 25 text

© 2024 Anti-Pattern Inc. All rights reserved. ⽇本でのSaaS Tech系イベント 昨年からちょっと増えてきました マイクロサービス、マルチテナント、認証認可、信頼性、UI/UXなど SaaS Tech のお話中⼼ SaaS Tech に関しては⽇本語で読める情報はまだまだ少ない https://saas-tech.connpass.com/event/243204/ https://btob-tech.connpass.com/event/247407/

Slide 26

Slide 26 text

SaaS の開発/運⽤ではビジネスとテックが⼀体化する必要がある Biz Dev Ops ⼀体となって 価値を届け続ける ⾃社SaaSビジネスにとって 価値のある実装とはなにか︖ 運⽤コストを抑えられる 作りにできているか︖ 素早く改善できるか︖ 可⽤性やセキュリティ、性能は お客様に影響をあたえてないか︖ 利⽤者 この機能をつけるのは どれくらいの難易度か︖ 不具合が発⽣しずらいか︖ アプリケーションが 作りやすい 環境にできているか︖ 運⽤コストが増えすぎない 料⾦プラン体系か︖

Slide 27

Slide 27 text

SaaS の開発/運⽤ではビジネスとテックが⼀体化する必要がある Biz Dev Ops ⼀体となって 価値を届け続ける ⾃社SaaSビジネスにとって 価値のある実装とはなにか︖ 運⽤コストを抑えられる 作りにできているか︖ 素早く改善できるか︖ 可⽤性やセキュリティ、性能は お客様に影響をあたえてないか︖ 利⽤者 この機能をつけるのは どれくらいの難易度か︖ 不具合が発⽣しずらいか︖ アプリケーションが 作りやすい 環境にできているか︖ 運⽤コストが増えすぎない 料⾦プラン体系か︖ エンジニアもSaaSビジネスを ある程度理解することがポイント

Slide 28

Slide 28 text

© 2024 Anti-Pattern Inc. All rights reserved. B2B SaaSの⼀般的な軸について

Slide 29

Slide 29 text

Vertical (垂直) •⼀般的には下記の軸で整理されることが多い B2B SaaSの⼀般的な軸について 29 Horizontal(⽔平) 業界を問わず⾏われる業務に対し価値を提供 ex)⼈事労務、会計 ⼩売 製造業 ⾦融 Vertical (垂直) Vertical (垂直) 業界特化の 業務に対して 価値を提供

Slide 30

Slide 30 text

Horizontal Vertical 参照元︓https://onecapital.jp/perspectives/horizontal-landscape-2022 https://onecapital.jp/perspectives/vertical-landscape-2022 •⽇本国内だけでも数多くのSaaSが市場に存在している SaaS市場のカオスマップ 30 「業界」という概念がこれらのSaaSを分類する指標になっている。

Slide 31

Slide 31 text

© 2024 Anti-Pattern Inc. All rights reserved. SaaS として共通に考えること

Slide 32

Slide 32 text

© 2024 Anti-Pattern Inc. All rights reserved. SaaS で考えるべきことは多い 認証・認可 請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 分析 移⾏

Slide 33

Slide 33 text

© 2024 Anti-Pattern Inc. All rights reserved. x テナント︕ 認証・認可 請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 マルチテナントの難しさ (もちろん場合によってはシングルテナントx複数もあり) 分析 移⾏ SaaS で考えるべきことは多い

Slide 34

Slide 34 text

© 2024 Anti-Pattern Inc. All rights reserved. x テナント︕ 認証・認可 請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 マルチテナントの難しさ (もちろん場合によってはシングルテナントx複数もあり) 分析 移⾏ テナントの概念が⼊ると ⼀気にめんどくさくなる たとえば SaaS で考えるべきことは多い

Slide 35

Slide 35 text

© 2024 Anti-Pattern Inc. All rights reserved. x テナント︕ 認証・認可 請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 マルチテナントの難しさ (もちろん場合によってはシングルテナントx複数もあり) 分析 移⾏ テナントの概念が⼊ると ⼀気にめんどくさくなる たとえば SaaS で考えるべきことは多い テナント分離は SaaS 開発の基礎中の基礎︕︕︕

Slide 36

Slide 36 text

© 2024 Anti-Pattern Inc. All rights reserved. SaaS 開発/運⽤のポイント - 1 • テナント サービスの契約をする顧客組織の単位。会社であったり⼀部⾨であったり特定の団体であったり実 際の組織はいろいろある。 • サイロ、プール、ブリッジモデル(、ハイブリッドモデル) リソースの共有範囲を表す。後述の項⽬に合わせて検討が必要。 • SaaSにおける認証と認可 ユーザの認証とともにそのユーザがどのテナントに属しているかという認証、ユーザ単位・テナント単位 両⽅の観点から認可をする必要がある。契約している料⾦プランも関係してくる。 • テナント分離 ⾃⾝のテナント以外にアクセスできないようにマルチテナントにおいて分離は必須になる。コスト、運 ⽤効率、コンプライアンス、展開モデルによって検討する必要がある • データーパーティショニング テナント分離とともに、特にデータ(データベースやストレージなど)をどのように分割していくのかを考 える必要がある

Slide 37

Slide 37 text

© 2024 Anti-Pattern Inc. All rights reserved. SaaS 開発/運⽤のポイント - 2 • ノイジーネイバー テナント間でリソース共有していると、とあるユーザのリソース消費が他のユーザの体験(特に性 能)に影響を与えるので考える必要がある • テナントオンボーディング 新しいテナント(顧客)契約時に、そのテナントに関連する全てのリソースを⾃動的にプロビジョニン グする必要がある。 • テナントティアー 多種多様なお客様に対応するため、料⾦プランとセットで機能や利⽤量、また信頼性まで差をつけ て提供することにより、運⽤負荷を適切に分散する • メータリングとビリング 料⾦プランの内容によっては、利⽤量の計測が必須になる。また、その利⽤量をベースに利⽤料⾦ を確定し請求処理を⾏うことが必要。これらも極⼒⾃動化することによりスケールできるようになる。 • テナントアクティビティの収集と分析 SaaSは継続的改善が前提になるため、⼤量のユーザの利⽤状況からインサイトを得て改善を進め ていく必要がある。また、テナント横串でのアクティビティを分析して新たなベストプラクティスを⾒つけ、 新しい価値として実装をしていくことも重要。

Slide 38

Slide 38 text

© 2024 Anti-Pattern Inc. All rights reserved. SaaSのアーキテクチャ SaaS管理画⾯ テナント管理 ユーザー管理 認証認可 ログ収集 利⽤量計測 分析 請求 料⾦プラン コントロールプレーン (SaaSの管理に必要な機能群) アプリケーションプレーン (SaaSのアプリケーションの機能群) Webフロントエンド テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB これらが集まって1つのSaaSになる

Slide 39

Slide 39 text

© 2024 Anti-Pattern Inc. All rights reserved. 特に意識しなくてもSaaSはおのおのの役割は持っている SaaS管理画⾯ テナント管理 ユーザー管理 認証認可 ログ収集 利⽤量計測 分析 請求 料⾦プラン Webフロントエンド テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB 作り⽅によっては分かれていないこともあるが その役割はどこかで持っている

Slide 40

Slide 40 text

© 2024 Anti-Pattern Inc. All rights reserved. テナント分離の形

Slide 41

Slide 41 text

© 2024 Anti-Pattern Inc. All rights reserved. テナント分離 テナント分離は SaaS 開発の基礎中の基礎︕︕︕

Slide 42

Slide 42 text

© 2024 Anti-Pattern Inc. All rights reserved. テナント分離の種類例 サイロモデル プールモデル ブリッジモデル ハイブリッドモデル

Slide 43

Slide 43 text

© 2024 Anti-Pattern Inc. All rights reserved. サイロモデル DB サーバ DB サーバ DB サーバ SaaS テナントA⽤ テナントB⽤ テナントC⽤ サイロモデルでも、コードベースは1つに保つ (会社ごとのカスタマイズは⾏わない)

Slide 44

Slide 44 text

© 2024 Anti-Pattern Inc. All rights reserved. フィーチャーフラグ(フィーチャートグル) 料⾦プランや特定企業向けオプションな どの時だけではなく使える • 複数のコードベースを管理するのはア ンチパターン • ⻑い間存在する別ブランチも同義 • どこにトグルルータを置くか︖ • 処理の直前ではなくDIなどの活⽤ • フラグをどこに保存するか︖ • ハードコード、パラメータ、設定ファ イル、DB、オーケストレーション ツール、クラウド機能 https://martinfowler.com/articles/feature-toggles.html

Slide 45

Slide 45 text

© 2024 Anti-Pattern Inc. All rights reserved. プールモデル DB サーバ SaaS テナントA, B, C など共⽤ 共⽤インフラでも適切な論理テナント分離を考える

Slide 46

Slide 46 text

© 2024 Anti-Pattern Inc. All rights reserved. ブリッジモデル DB DB DB SaaS テナントA⽤ テナントB⽤ テナントC⽤ サーバ 分離した部分を意識しないでよいプログラミングを⼼がける

Slide 47

Slide 47 text

© 2024 Anti-Pattern Inc. All rights reserved. ブリッジモデル(その2) SaaS テナントA⽤ テナントB⽤ テナントC⽤ 分離する部分は様々 サーバ サーバ サーバ DB

Slide 48

Slide 48 text

© 2024 Anti-Pattern Inc. All rights reserved. ハイブリッドモデル DB サーバ DB サーバ SaaS テナントA, B など共⽤ テナントC専⽤

Slide 49

Slide 49 text

© 2024 Anti-Pattern Inc. All rights reserved. サイロモデル DB サーバ DB サーバ DB サーバ SaaS テナントA⽤ テナントB⽤ テナントC⽤ バージョンアップやセキュリティパッチ、 DBスキーマ変更など 全てのテナントを同じ状態に保つのにも 労⼒を必要とする

Slide 50

Slide 50 text

© 2024 Anti-Pattern Inc. All rights reserved. プールモデル DB サーバ SaaS テナントA, B, C など共⽤ ノイジーネイバー問題(性能問題)や セキュリティ対応に労⼒がかかる

Slide 51

Slide 51 text

© 2024 Anti-Pattern Inc. All rights reserved. ブリッジモデル DB DB DB SaaS テナントA⽤ テナントB⽤ テナントC⽤ サーバ 構成が複雑になり、どこで サイロとプールをわけるかが難しい

Slide 52

Slide 52 text

© 2024 Anti-Pattern Inc. All rights reserved. ハイブリッドモデル DB サーバ DB サーバ SaaS テナントA, B など共⽤ テナントC専⽤ 各モデルの⻑所・短所が⼊り交じって 複雑になり、より運⽤に労⼒がかかる

Slide 53

Slide 53 text

テナント分離モデルごとの特徴 サイロモデル プールモデル ブリッジモデル ・ユーザ認証 ・テナント識別 ・データベース切替 ・運⽤コスト ・複雑度 ・テナント分離 (主にセキュリティと性能) 不要な場合あり 不要 不要 ⼤ ⼩ ⾼ 必要 必要 不要 ⼩ 中 ⽐較的⼩ 必要 必要 必要 中 ⼤ 中 アプリケーションで

Slide 54

Slide 54 text

テナント分離モデルごとの特徴 サイロモデル プールモデル ブリッジモデル ・ユーザ認証 ・テナント識別 ・データベース切替 ・運⽤コスト ・複雑度 ・テナント分離 (主にセキュリティと性能) 不要な場合あり 不要 不要 ⼤ ⼩ ⾼ 必要 必要 不要 ⼩ 中 ⽐較的⼩ 必要 必要 必要 中 ⼤ 中 アプリケーションで ビジネスサイドとテックサイド(エンジニア)で よく話し合って決めましょう エンジニアに丸投げすると、プール(⾵)モデルになる可能性が⾼いです

Slide 55

Slide 55 text

© 2024 Anti-Pattern Inc. All rights reserved. データ分離(パーティショニング)のいろいろ(RDB編) テナント1 テナント2 テナント3 テナント4 テナントID テナント5 テナント テナント テナント テナント テナント テナント テナント データベース分離 スキーマ(orテーブル)分離 ⾏分離 セキュリティ要件と性能 運⽤負荷などのバランスで選定

Slide 56

Slide 56 text

© 2024 Anti-Pattern Inc. All rights reserved. 実際にSaaS開発(もどき)を 体験してみよう︕

Slide 57

Slide 57 text

サンプルアプリケーションの実⾏ – 0 右下のShellの画⾯で cd ./php/laravel/ ./init.sh を実⾏して、 しばらく待つ こんな感じのが出ればOK ここまでできてますよね︖︕

Slide 58

Slide 58 text

サンプルアプリケーションの実⾏ – 1 ここからは、「sample.txt」を もとにコマンドを打っていきましょう 「sample.txt」をクリックすると、 右に内容が出てきます

Slide 59

Slide 59 text

サンプルアプリケーションの実⾏ – 2 1. Portforwardが勝⼿に設定されるので、公開URLを出す 画⾯下の、「ポート80」の「転送されたアドレス」のURLをコピーする 例︓ https://legendary-broccoli-x5995rgjvj33cpp7g-80.app.github.dev そして、表⽰範囲の「Private」を右クリックして「Public」に変更する 上記URLを `php/laravel/api/.env.example` に設定し、保 存する

Slide 60

Slide 60 text

サンプルアプリケーションの実⾏ – 3 2. 更新とアプリケーション再起動 再度、ターミナルに戻って ./init.sh を実⾏する

Slide 61

Slide 61 text

サンプルアプリケーションの実⾏ – 4 3. サンプルアプリケーションの表⽰ 先ほどのURLにブラウザでアクセスすると、ロ グイン画⾯が表⽰される Email: [email protected] Password: SaaSTraining でログインすると、チャットの画⾯が表⽰されるので 適当に⽂字を打ってみる

Slide 62

Slide 62 text

サンプルアプリケーションの実⾏ – 4 3. サンプルアプリケーションの表⽰ 先ほどのURLにブラウザでアクセスすると、ロ グイン画⾯が表⽰される Email: [email protected] Password: SaaSTraining でログインすると、チャットの画⾯が表⽰されるので 適当に⽂字を打ってみる ここまでできました︖︕ ここまではただのチャットアプリケーション︕ これをマルチテナント化していきます。 (プール型⾵マルチテナント)

Slide 63

Slide 63 text

これからやること なう 完成形 全員共⽤チャット テナント1⽤チャット テナント2⽤チャット

Slide 64

Slide 64 text

これからやること なう 完成形 全員共⽤チャット テナント1⽤チャット テナント2⽤チャット マルチテナント

Slide 65

Slide 65 text

DBをのぞいてみる – 1 4. PostgreSQL拡張機能でDBをのぞく 接続定義を⼊⼒ ↑質問に答えて各種情報を⼊⼒ Hostname: localhost User: saasus Password: password Port: 5432 Connection: Standard Connection Database: saasus Display name: localhost

Slide 66

Slide 66 text

DBをのぞいてみる – 2 各テーブルから、Run Select を選ぶと表⽰される

Slide 67

Slide 67 text

DBをのぞいてみる – 2 各テーブルから、Run Select を選ぶと表⽰される テナントの情報が無いから⼊れていこう︕

Slide 68

Slide 68 text

最低限のテナントコンテキストを⼊れる – 1 5. 最低限のテナントIDを⼊れる 5-1. DBのユーザーテーブルにテナントIDを追加 `php/laravel/api/database/migrations/2014_10_12_000000_create_users_table.php` のコメントアウト部分を外す 5-2. DBのユーザーテーブルのテストデータにテナントIDを追加 `php/laravel/api/database/seeders/UserSeeder.php` のコメントアウト部分を外す 5-3. 表⽰処理、書き込み処理にユーザーに応じたテナントIDを追加 `php/laravel/api/app/Http/Controllers/MessageController.php` のコメントアウト部分を外す こんな感じ

Slide 69

Slide 69 text

最低限のテナントコンテキストを⼊れる – 2 5-4. 更新とアプリケーション再起動 再度、ターミナルに戻って ./init.sh を実⾏する すると、いま変更したDBやアプリケーションが反映される 興味がある⽅は、前述の⼿順でDBのテーブルの中⾝を⾒てみてください

Slide 70

Slide 70 text

最低限のテナントコンテキストを⼊れる – 3 テナント1⽤チャット テナント2⽤チャット user@ example .com user1@ example .com user2@ example .com user3@ example .com 6. いろんなユーザーでログインして書いてみる [email protected], [email protected] はテナント1 [email protected], [email protected] はテナント2 というテストデータになっているため、 各ユーザーで⼊ってテナント間で ちゃんとデータが⾒れないか確かめる

Slide 71

Slide 71 text

最低限のテナントコンテキストを⼊れる – 3 テナント1⽤チャット テナント2⽤チャット user@ example .com user1@ example .com user2@ example .com user3@ example .com 6. いろんなユーザーでログインして書いてみる [email protected], [email protected] はテナント1 [email protected], [email protected] はテナント2 というテストデータになっているため、 各ユーザーで⼊ってテナント間で ちゃんとデータが⾒れないか確かめる マルチテナントSaaSになった︕ のか︖︕

Slide 72

Slide 72 text

© 2024 Anti-Pattern Inc. All rights reserved. 実は・・・ マルチテナントSaaS としては ⾜りてないこと やばそうなこと がいっぱい︕

Slide 73

Slide 73 text

攻撃を試す – Brute force attack - 1 7. ログイン認証を突破する攻撃 ブルートフォース攻撃(総当たり攻撃)を軽く試します 7-1. 攻撃ツール(Hydra)のセットアップ 新しいシェルを作成して、「sample.txt」 のコマンドを実⾏ 「+」を押すと、新しいシェルが開きます こんな感じ 今回は体験を主としているので すごくシンプルな辞書を作ってます

Slide 74

Slide 74 text

攻撃を試す – Brute force attack - 2 7-2. 攻撃ツール(Hydra)の実⾏ 「sample.txt」のコマンドを実⾏ hydra -L usernames.txt -P passwords.txt -f -u -vV localhost http-post-form '/login:email=^USER^&passwo rd=^PASS^:F=wrong' アカウントがバレちゃいました・・・

Slide 75

Slide 75 text

攻撃を試す – Brute force attack - 2 7-2. 攻撃ツール(Hydra)の実⾏ 「sample.txt」のコマンドを実⾏ hydra -L usernames.txt -P passwords.txt -f -u -vV localhost http-post-form '/login:email=^USER^&passwo rd=^PASS^:F=wrong' つまり、認証(ログインとか)は ⾃分で作っちゃダメ︕︕︕ いろんなアタックへの対応とか MFAとか振る舞い検知とか そんなの作ってられない

Slide 76

Slide 76 text

攻撃を試す – SQL Injection - 1 8. テナント境界をまたいじゃう攻撃 SQLインジェクションを軽く試します 8-1. [email protected](テナント1のユーザー) でログインしてください。 8-2. メッセージに 以下を⼊れてみてください。 hello', now()), ('2', '2', 'hacked message

Slide 77

Slide 77 text

攻撃を試す – SQL Injection - 2 8-3. いったんログアウトし、 [email protected](テナント2のユーザー) でログインしてください。 ※興味がある⽅は、DBのテーブルものぞいてみてください 先ほどのメッセージ 「helloʻ, now()), (ʼ2ʻ, ʼ2ʻ, ʼhacked message」 で、 [email protected](テナント1のユーザー) が [email protected](テナント1のユーザー) になりすまして、 テナント2にメッセージが書けてしまいました・・・

Slide 78

Slide 78 text

攻撃を試す – SQL Injection - 2 8-3. いったんログアウトし、 [email protected](テナント2のユーザー) でログインしてください。 ※興味がある⽅は、DBのテーブルものぞいてみてください 先ほどのメッセージ 「helloʻ, now()), (ʼ2ʻ, ʼ2ʻ, ʼhacked message」 で、 [email protected](テナント1のユーザー) が [email protected](テナント1のユーザー) になりすまして、 テナント2にメッセージが書けてしまいました・・・ プール⾵モデルだと 基本的なセキュリティホールやバグで テナント境界をまたがれてしまいやすそう・・・

Slide 79

Slide 79 text

© 2024 Anti-Pattern Inc. All rights reserved. 改善タイム︕

Slide 80

Slide 80 text

改善チャレンジ︕ • テクニカル • SQLインジェクションが起きないように修正する • +ビジネス • 次に開発する部分と優先順位をディスカッションしてみてください • 機能⾯(例) • テナント名が固定になっちゃってるけどいいかな︖ • チャットのUIがしょぼい︖ • ログインにGoogle認証⼊れたい • ボイスチャットできるようにしたい • LLMが相⼿してくれるようにしたい • 管理者権限の⼈がユーザーの追加、削除出来るようにしたい • ⾮機能⾯(例) • 新規契約されたテナントの発⾏を出来るようにしたい • 料⾦プランをどうしよう︖ • 請求・⽀払はどうやってやろう • ブルートフォースアタックに対応できるようにする • 性能的にこのままで⼤丈夫か︖ • インフラ構築をどうするか︖ • CI/CDをどうする︖ などなど まだまだ いっぱい

Slide 81

Slide 81 text

© 2024 Anti-Pattern Inc. All rights reserved. これでいいのか︖︕SaaS︕ SaaS管理画⾯ テナント管理 ユーザー管理 認証認可 ログ収集 利⽤量計測 分析 請求 料⾦プラン Webフロントエンド テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB このままの勢いで⾏くと、こうなっちゃう

Slide 82

Slide 82 text

© 2024 Anti-Pattern Inc. All rights reserved. SaaSのアーキテクチャ SaaS管理画⾯ テナント管理 ユーザー管理 認証認可 ログ収集 利⽤量計測 分析 請求 料⾦プラン コントロールプレーン (SaaSの管理に必要な機能群) アプリケーションプレーン (SaaSのアプリケーションの機能群) Webフロントエンド テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB

Slide 83

Slide 83 text

© 2024 Anti-Pattern Inc. All rights reserved. まとめ

Slide 84

Slide 84 text

© 2024 Anti-Pattern Inc. All rights reserved. Conclusion ・技術的にも SaaS ならではの考えることがたくさんある ・その中でも、まずはテナント分離の考え⽅が基本になる ・なるべく⾃分で作らないで信頼できる製品を活⽤する ・ (今回はなかったですが)インフラ、アプリ、開発、運⽤を全部ひっくるめて考える必要がある︕ ・ (今回はなかったですが)なので SaaS は作った⼈が運⽤するべし︕ You built it, you run it! ・ (今回はなかったですが)さらに、お客様からのフィードバックを開発・運⽤に活かすべし︕ ・(今回はなかったですが)データを製品改善に活かすべし︕ ということで、 SaaS のエンジニアは楽しいですよ︕

Slide 85

Slide 85 text

© 2024 Anti-Pattern Inc. All rights reserved. SaaS開発ガイド【基礎編】も合わせてご覧ください 1.SaaSにおけるソフトウェア開発の重要性 - SaaS提供事業者の責任 - 成⻑ステージ毎に考慮すべきSaaS運営のポイント - SaaS⽴ち上げ前に知っておきたい開発の進め⽅ 2.SaaSにおけるソフトウェア開発の勘所 SaaS⽴ち上げ前に知っておきたい開発の進め⽅ - BizDevOps - MVP / プロトタイプ SaaS開発時に考慮すべき6つのポイント 1. テナントという概念の考慮 2. 迅速なサービス改善を実現するアーキテクチャの検討 3. セキュリティの強化 4. 拡張性の担保 5. 料⾦プランの設計と請求⽅法の確⽴ 6. データの活⽤ https://saasus.io/resource/e-book/saas-dev-guide-basic SaaS開発ガイド【基礎編】 続編(テナント編)もあります︕

Slide 86

Slide 86 text

まとめディスカッション その後、チームで ディスカッションしてみてください • 今⽇学んだこと • ⾯⽩かったこと • つまらなかったこと • 難しかったこと • チームに共有したいこと まずはアンケート回答 お願いします︕ https://docs.google.com/forms/d/e/1FAIpQLScUI7 BctzwwJ5GuaFfSH4R2_W3VWFsc5asOWz3nd0htzu PkTA/viewform 講義内限り

Slide 87

Slide 87 text

© 2024 Anti-Pattern Inc. All rights reserved. “⽇本のソフトウェアエンジニアを 憧れの職業へ”

Slide 88

Slide 88 text

© 2024 Anti-Pattern Inc. All rights reserved. ここ以降は SaaSus Platform の宣伝です

Slide 89

Slide 89 text

© 2024 Anti-Pattern Inc. All rights reserved. SaaSus Platform 概要 弊社がもつ SaaS 開発/運⽤ のナレッジを集約し SaaS 作りと運⽤・販売のサポートをする SaaS を提供する https://saasus.io

Slide 90

Slide 90 text

© 2024 Anti-Pattern Inc. All rights reserved. SaaSus Platform 概要 認証・認可 請求 料⾦プラン コミュニケーション セキュリティ 利⽤量計測 x テナント管理 分析 業務ロジック 業務ナレッジ ベストプラクティス SaaSの直接的な価値を⽣む ここの実装に集中︕ DB分離 事業モニタリング ここは外部の サービスに まかせるのじゃ