Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
BtoB SaaS開発基礎講座
Search
YAGASAKI Akihiro
July 22, 2024
Technology
0
37
BtoB SaaS開発基礎講座
2024年の 日本CTO協会 合同新人研修にて実施した内容です。
YAGASAKI Akihiro
July 22, 2024
Tweet
Share
More Decks by YAGASAKI Akihiro
See All by YAGASAKI Akihiro
AWS CDK を活用した 大量 AWS アカウントへのプロビジョニング例 〜 SaaSus Platform の場合 〜 於 JAWS-UG CDK支部 #17
yaggy
1
220
テナント分離⽅式の使い分けとバランス (SaaS Engineering Meetup キックオフイベント)
yaggy
1
3k
マルチテナントにおけるテナント増加時のデータベース分離の体験談例(仮)
yaggy
3
2.8k
AWS Proton を使って(もらって)快適な開発環境をあげよう(もらおう)!
yaggy
1
1.2k
Build Fullmesh VPN by VyOS with Serf! VyOS Users Meeting Japan #1 LT
yaggy
1
1.4k
Vyattaでやってます! Multi Region VPN on Amazon Web Services #jvum2014s
yaggy
1
530
Other Decks in Technology
See All in Technology
現実のRuby/Railsアップグレード
takeyuweb
3
2.8k
Databricksワークショップ - 生成AIとDWH
taka_aki
2
4.5k
KMPプロジェクトでマニュアルDIを使う選択
rmakiyama
0
120
APIテスト自動化の勘所
yokawasa
2
210
サーバーレス SaaS における運用監視の負荷軽減のためのアプローチ
ririru0325
0
130
Mackerelが取り組むオブザーバビリティ - Mackerel Tech Day
mackerelio
0
300
生成AIの活用パターンと継続的評価
asei
10
1.3k
WINTICKETアプリで実現した高可用性と高速リリースを支えるエコシステム / winticket-eco-system
cyberagentdevelopers
PRO
1
130
Apple/Google/Amazonの決済システムの違いを踏まえた定期購読課金システムの構築 / abema-billing-system
cyberagentdevelopers
PRO
1
140
LLMアプリをRagasで評価して、Langfuseで可視化しよう!
minorun365
PRO
2
200
リファクタリングへの耐性が高いモデルベースの統合テストの紹介 / Model-Base Integration Test for Refactoring
yuitosato
5
1.2k
品質の高い機能を”早く”提供するために技術的な面でチームでやったこと、やりたいこと
sansantech
PRO
2
230
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
A Modern Web Designer's Workflow
chriscoyier
692
190k
Facilitating Awesome Meetings
lara
49
6k
Code Reviewing Like a Champion
maltzj
519
39k
Thoughts on Productivity
jonyablonski
67
4.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
5
140
Bash Introduction
62gerente
608
210k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Transcript
© 2024 Anti-Pattern Inc. All rights reserved. BtoB SaaS開発基礎講座 2024/06/12
於 ⽇本CTO協会 合同新⼈研修 株式会社アンチパターン ⽮ヶ崎哲宏
まずは︕︕︕ 2 本⽇はなるべくインタラクティブ にやりたいと思います︕ 右のURLにアクセスお願いしま す。まずは練習で、「ハロー︕」 とか打ってみてください〜︕ いろいろ質問するので、ここか ら答えてみてください〜︕ 講義内限り
⾃⼰紹介 3 ⽮ヶ崎 哲宏(Akihiro YAGASAKI) 株式会社アンチパターン 取締役 CTO兼COO 役割︓⽇本のソフトウェアエンジニアを憧れの職業に するためのいろいろ
経歴︓アマゾン ウェブサービス ジャパン にて SaaSシニアパートナーソリューションアーキテクト Webメディア/SaaSベンダーにて技術責任者ボードメンバー ⼤⼿SIerグループ会社にて情シス責任者 アニメソングのコーラス など 2022, 2023, 2024 Japan AWS Top Engineers (Software) 1975年⽣まれ
本⽇のゴール 4 「SaaSって、こんなこと考えないといけないんだな〜〜〜」 っていうのをほんのりわかってもらって、本当の仕事の場⾯で こういうのが必要になった時に、 「あ、そういえばSaaSってそういうの必要だって⾔ってたな〜 チームでいろいろ試⾏錯誤してたわそういえば」 って思いだしてもらえるようにする︕ ※そのため、厳密には間違ってるけど だいたい雰囲気をわかってもらう系
で⾏きます︕
© 2024 Anti-Pattern Inc. All rights reserved. SaaS ってそもそもなんだ︖︕
© 2024 Anti-Pattern Inc. All rights reserved. その前に︕ 時間かかることを先にやっちゃいましょう︕
チームの準備 今⽇はみなさんのロールもスキルもバラバラです なので、チームで助け合い&話し合いをして進めてみましょう︕ ということで、まずはお互いに⾃⼰紹介してください〜︕(3分) 例(全然このとおりじゃなくてOKです) ・名前 ・会社名 ・役割(フロントエンジニアとかデータサイエンティストとか) ・CTO協会新⼈研修で持ち帰りたいもの ・好きなSaaS
などなど
GitHub の準備 https://github.com/yaggytter/sampleapp-basic-chat ここにアクセスして、「.」(ドット)キーを押してみてください︕エディタ(VSCode)の画⾯になります GitHubにログインした後に、
GitHub の準備 - 2 エディタ(VSCode)が表⽰されたら、 左上の三本線=> ターミナル=> 新しいターミナルを押し 画⾯下の GitHub
Codespaces で作業を続⾏ける を押す
GitHub の準備 - 3 画⾯上の⽅の、 2 cores なんたらを選ぶ そしてしばらく待つ・・・
GitHub の準備 - 3 右下のShellの画⾯で cd ./php/laravel/ ./init.sh を実⾏して、 しばらく待つ
こんな感じのが出ればOK
© 2024 Anti-Pattern Inc. All rights reserved. しばらく待っている間に 簡単に弊社の紹介
© 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
© 2024 Anti-Pattern Inc. All rights reserved. SaaS企業の成⻑サイクル BizDevOps⽀援 Product
Development プロダクト作り Build an Organization 組織作り Financing 資⾦作り 顧客提供 価値の拡⼤ 組織の拡⼤ 投資の拡⼤ 成⻑サイクルを拡⼤ エンジニア採⽤ 企業情報 14
© 2024 Anti-Pattern Inc. All rights reserved. AWS パートナーとしての弊社 ※
engineed および SaaSus Platform において
© 2024 Anti-Pattern Inc. All rights reserved. SaaS ってそもそもなんだ︖︕
改めて SaaS とは https://www.ipa.go.jp/security/reports/oversea/nist/ug 65p90000019cp4-att/000025366.pdf NIST によるクラウドコンピューティングの定義 より 引⽤元︓ NIST
によるクラウドコンピューティングの定義
改めて SaaS とは https://www.ipa.go.jp/security/reports/oversea/nist/ug 65p90000019cp4-att/000025366.pdf NIST によるクラウドコンピューティングの定義 より 引⽤元︓ NIST
によるクラウドコンピューティングの定義 むずい
雑に 改めて SaaS とは インターネット越しに ソフトウェア(アプリケーション) をサービスとして 利⽤できるようにしたもの
雑に 改めて SaaS とは インターネット越しに ソフトウェア(アプリケーション) をサービスとして 利⽤できるようにしたもの ここで質問 SaaS
と聞いて 思いつくサービスは︖
SaaS と⾔えば
BtoC と BtoB BtoC BtoB BtoG BtoE ※分類の仕⽅はあくまでも例です
SaaS の活⽤メリット 営業管理ソフト 会計ソフト 労務ソフト 営業管理 SaaS 会計 SaaS 労務
SaaS コスト & リスク コスト & リスク => 割り勘効果を得ている ⾃社開発 & パッケージソフト SaaS 利⽤ 23
SaaSビジネスに関しては、⽇本語で読める良質な情報が増えてきている
© 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/
SaaS の開発/運⽤ではビジネスとテックが⼀体化する必要がある Biz Dev Ops ⼀体となって 価値を届け続ける ⾃社SaaSビジネスにとって 価値のある実装とはなにか︖ 運⽤コストを抑えられる
作りにできているか︖ 素早く改善できるか︖ 可⽤性やセキュリティ、性能は お客様に影響をあたえてないか︖ 利⽤者 この機能をつけるのは どれくらいの難易度か︖ 不具合が発⽣しずらいか︖ アプリケーションが 作りやすい 環境にできているか︖ 運⽤コストが増えすぎない 料⾦プラン体系か︖
SaaS の開発/運⽤ではビジネスとテックが⼀体化する必要がある Biz Dev Ops ⼀体となって 価値を届け続ける ⾃社SaaSビジネスにとって 価値のある実装とはなにか︖ 運⽤コストを抑えられる
作りにできているか︖ 素早く改善できるか︖ 可⽤性やセキュリティ、性能は お客様に影響をあたえてないか︖ 利⽤者 この機能をつけるのは どれくらいの難易度か︖ 不具合が発⽣しずらいか︖ アプリケーションが 作りやすい 環境にできているか︖ 運⽤コストが増えすぎない 料⾦プラン体系か︖ エンジニアもSaaSビジネスを ある程度理解することがポイント
© 2024 Anti-Pattern Inc. All rights reserved. B2B SaaSの⼀般的な軸について
Vertical (垂直) •⼀般的には下記の軸で整理されることが多い B2B SaaSの⼀般的な軸について 29 Horizontal(⽔平) 業界を問わず⾏われる業務に対し価値を提供 ex)⼈事労務、会計 ⼩売
製造業 ⾦融 Vertical (垂直) Vertical (垂直) 業界特化の 業務に対して 価値を提供
Horizontal Vertical 参照元︓https://onecapital.jp/perspectives/horizontal-landscape-2022 https://onecapital.jp/perspectives/vertical-landscape-2022 •⽇本国内だけでも数多くのSaaSが市場に存在している SaaS市場のカオスマップ 30 「業界」という概念がこれらのSaaSを分類する指標になっている。
© 2024 Anti-Pattern Inc. All rights reserved. SaaS として共通に考えること
© 2024 Anti-Pattern Inc. All rights reserved. SaaS で考えるべきことは多い 認証・認可
請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 分析 移⾏
© 2024 Anti-Pattern Inc. All rights reserved. x テナント︕ 認証・認可
請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 マルチテナントの難しさ (もちろん場合によってはシングルテナントx複数もあり) 分析 移⾏ SaaS で考えるべきことは多い
© 2024 Anti-Pattern Inc. All rights reserved. x テナント︕ 認証・認可
請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 マルチテナントの難しさ (もちろん場合によってはシングルテナントx複数もあり) 分析 移⾏ テナントの概念が⼊ると ⼀気にめんどくさくなる たとえば SaaS で考えるべきことは多い
© 2024 Anti-Pattern Inc. All rights reserved. x テナント︕ 認証・認可
請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 マルチテナントの難しさ (もちろん場合によってはシングルテナントx複数もあり) 分析 移⾏ テナントの概念が⼊ると ⼀気にめんどくさくなる たとえば SaaS で考えるべきことは多い テナント分離は SaaS 開発の基礎中の基礎︕︕︕
© 2024 Anti-Pattern Inc. All rights reserved. SaaS 開発/運⽤のポイント -
1 • テナント サービスの契約をする顧客組織の単位。会社であったり⼀部⾨であったり特定の団体であったり実 際の組織はいろいろある。 • サイロ、プール、ブリッジモデル(、ハイブリッドモデル) リソースの共有範囲を表す。後述の項⽬に合わせて検討が必要。 • SaaSにおける認証と認可 ユーザの認証とともにそのユーザがどのテナントに属しているかという認証、ユーザ単位・テナント単位 両⽅の観点から認可をする必要がある。契約している料⾦プランも関係してくる。 • テナント分離 ⾃⾝のテナント以外にアクセスできないようにマルチテナントにおいて分離は必須になる。コスト、運 ⽤効率、コンプライアンス、展開モデルによって検討する必要がある • データーパーティショニング テナント分離とともに、特にデータ(データベースやストレージなど)をどのように分割していくのかを考 える必要がある
© 2024 Anti-Pattern Inc. All rights reserved. SaaS 開発/運⽤のポイント -
2 • ノイジーネイバー テナント間でリソース共有していると、とあるユーザのリソース消費が他のユーザの体験(特に性 能)に影響を与えるので考える必要がある • テナントオンボーディング 新しいテナント(顧客)契約時に、そのテナントに関連する全てのリソースを⾃動的にプロビジョニン グする必要がある。 • テナントティアー 多種多様なお客様に対応するため、料⾦プランとセットで機能や利⽤量、また信頼性まで差をつけ て提供することにより、運⽤負荷を適切に分散する • メータリングとビリング 料⾦プランの内容によっては、利⽤量の計測が必須になる。また、その利⽤量をベースに利⽤料⾦ を確定し請求処理を⾏うことが必要。これらも極⼒⾃動化することによりスケールできるようになる。 • テナントアクティビティの収集と分析 SaaSは継続的改善が前提になるため、⼤量のユーザの利⽤状況からインサイトを得て改善を進め ていく必要がある。また、テナント横串でのアクティビティを分析して新たなベストプラクティスを⾒つけ、 新しい価値として実装をしていくことも重要。
© 2024 Anti-Pattern Inc. All rights reserved. SaaSのアーキテクチャ SaaS管理画⾯ テナント管理
ユーザー管理 認証認可 ログ収集 利⽤量計測 分析 請求 料⾦プラン コントロールプレーン (SaaSの管理に必要な機能群) アプリケーションプレーン (SaaSのアプリケーションの機能群) Webフロントエンド テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB これらが集まって1つのSaaSになる
© 2024 Anti-Pattern Inc. All rights reserved. 特に意識しなくてもSaaSはおのおのの役割は持っている SaaS管理画⾯ テナント管理
ユーザー管理 認証認可 ログ収集 利⽤量計測 分析 請求 料⾦プラン Webフロントエンド テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB 作り⽅によっては分かれていないこともあるが その役割はどこかで持っている
© 2024 Anti-Pattern Inc. All rights reserved. テナント分離の形
© 2024 Anti-Pattern Inc. All rights reserved. テナント分離 テナント分離は SaaS
開発の基礎中の基礎︕︕︕
© 2024 Anti-Pattern Inc. All rights reserved. テナント分離の種類例 サイロモデル プールモデル
ブリッジモデル ハイブリッドモデル
© 2024 Anti-Pattern Inc. All rights reserved. サイロモデル DB サーバ
DB サーバ DB サーバ SaaS テナントA⽤ テナントB⽤ テナントC⽤ サイロモデルでも、コードベースは1つに保つ (会社ごとのカスタマイズは⾏わない)
© 2024 Anti-Pattern Inc. All rights reserved. フィーチャーフラグ(フィーチャートグル) 料⾦プランや特定企業向けオプションな どの時だけではなく使える
• 複数のコードベースを管理するのはア ンチパターン • ⻑い間存在する別ブランチも同義 • どこにトグルルータを置くか︖ • 処理の直前ではなくDIなどの活⽤ • フラグをどこに保存するか︖ • ハードコード、パラメータ、設定ファ イル、DB、オーケストレーション ツール、クラウド機能 https://martinfowler.com/articles/feature-toggles.html
© 2024 Anti-Pattern Inc. All rights reserved. プールモデル DB サーバ
SaaS テナントA, B, C など共⽤ 共⽤インフラでも適切な論理テナント分離を考える
© 2024 Anti-Pattern Inc. All rights reserved. ブリッジモデル DB DB
DB SaaS テナントA⽤ テナントB⽤ テナントC⽤ サーバ 分離した部分を意識しないでよいプログラミングを⼼がける
© 2024 Anti-Pattern Inc. All rights reserved. ブリッジモデル(その2) SaaS テナントA⽤
テナントB⽤ テナントC⽤ 分離する部分は様々 サーバ サーバ サーバ DB
© 2024 Anti-Pattern Inc. All rights reserved. ハイブリッドモデル DB サーバ
DB サーバ SaaS テナントA, B など共⽤ テナントC専⽤
© 2024 Anti-Pattern Inc. All rights reserved. サイロモデル DB サーバ
DB サーバ DB サーバ SaaS テナントA⽤ テナントB⽤ テナントC⽤ バージョンアップやセキュリティパッチ、 DBスキーマ変更など 全てのテナントを同じ状態に保つのにも 労⼒を必要とする
© 2024 Anti-Pattern Inc. All rights reserved. プールモデル DB サーバ
SaaS テナントA, B, C など共⽤ ノイジーネイバー問題(性能問題)や セキュリティ対応に労⼒がかかる
© 2024 Anti-Pattern Inc. All rights reserved. ブリッジモデル DB DB
DB SaaS テナントA⽤ テナントB⽤ テナントC⽤ サーバ 構成が複雑になり、どこで サイロとプールをわけるかが難しい
© 2024 Anti-Pattern Inc. All rights reserved. ハイブリッドモデル DB サーバ
DB サーバ SaaS テナントA, B など共⽤ テナントC専⽤ 各モデルの⻑所・短所が⼊り交じって 複雑になり、より運⽤に労⼒がかかる
テナント分離モデルごとの特徴 サイロモデル プールモデル ブリッジモデル ・ユーザ認証 ・テナント識別 ・データベース切替 ・運⽤コスト ・複雑度 ・テナント分離
(主にセキュリティと性能) 不要な場合あり 不要 不要 ⼤ ⼩ ⾼ 必要 必要 不要 ⼩ 中 ⽐較的⼩ 必要 必要 必要 中 ⼤ 中 アプリケーションで
テナント分離モデルごとの特徴 サイロモデル プールモデル ブリッジモデル ・ユーザ認証 ・テナント識別 ・データベース切替 ・運⽤コスト ・複雑度 ・テナント分離
(主にセキュリティと性能) 不要な場合あり 不要 不要 ⼤ ⼩ ⾼ 必要 必要 不要 ⼩ 中 ⽐較的⼩ 必要 必要 必要 中 ⼤ 中 アプリケーションで ビジネスサイドとテックサイド(エンジニア)で よく話し合って決めましょう エンジニアに丸投げすると、プール(⾵)モデルになる可能性が⾼いです
© 2024 Anti-Pattern Inc. All rights reserved. データ分離(パーティショニング)のいろいろ(RDB編) テナント1 テナント2
テナント3 テナント4 テナントID テナント5 テナント テナント テナント テナント テナント テナント テナント データベース分離 スキーマ(orテーブル)分離 ⾏分離 セキュリティ要件と性能 運⽤負荷などのバランスで選定
© 2024 Anti-Pattern Inc. All rights reserved. 実際にSaaS開発(もどき)を 体験してみよう︕
サンプルアプリケーションの実⾏ – 0 右下のShellの画⾯で cd ./php/laravel/ ./init.sh を実⾏して、 しばらく待つ こんな感じのが出ればOK
ここまでできてますよね︖︕
サンプルアプリケーションの実⾏ – 1 ここからは、「sample.txt」を もとにコマンドを打っていきましょう 「sample.txt」をクリックすると、 右に内容が出てきます
サンプルアプリケーションの実⾏ – 2 1. Portforwardが勝⼿に設定されるので、公開URLを出す 画⾯下の、「ポート80」の「転送されたアドレス」のURLをコピーする 例︓ https://legendary-broccoli-x5995rgjvj33cpp7g-80.app.github.dev そして、表⽰範囲の「Private」を右クリックして「Public」に変更する 上記URLを
`php/laravel/api/.env.example` に設定し、保 存する
サンプルアプリケーションの実⾏ – 3 2. 更新とアプリケーション再起動 再度、ターミナルに戻って ./init.sh を実⾏する
サンプルアプリケーションの実⾏ – 4 3. サンプルアプリケーションの表⽰ 先ほどのURLにブラウザでアクセスすると、ロ グイン画⾯が表⽰される Email:
[email protected]
Password:
SaaSTraining でログインすると、チャットの画⾯が表⽰されるので 適当に⽂字を打ってみる
サンプルアプリケーションの実⾏ – 4 3. サンプルアプリケーションの表⽰ 先ほどのURLにブラウザでアクセスすると、ロ グイン画⾯が表⽰される Email:
[email protected]
Password:
SaaSTraining でログインすると、チャットの画⾯が表⽰されるので 適当に⽂字を打ってみる ここまでできました︖︕ ここまではただのチャットアプリケーション︕ これをマルチテナント化していきます。 (プール型⾵マルチテナント)
これからやること なう 完成形 全員共⽤チャット テナント1⽤チャット テナント2⽤チャット
これからやること なう 完成形 全員共⽤チャット テナント1⽤チャット テナント2⽤チャット マルチテナント
DBをのぞいてみる – 1 4. PostgreSQL拡張機能でDBをのぞく 接続定義を⼊⼒ ↑質問に答えて各種情報を⼊⼒ Hostname: localhost User:
saasus Password: password Port: 5432 Connection: Standard Connection Database: saasus Display name: localhost
DBをのぞいてみる – 2 各テーブルから、Run Select を選ぶと表⽰される
DBをのぞいてみる – 2 各テーブルから、Run Select を選ぶと表⽰される テナントの情報が無いから⼊れていこう︕
最低限のテナントコンテキストを⼊れる – 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` のコメントアウト部分を外す こんな感じ
最低限のテナントコンテキストを⼊れる – 2 5-4. 更新とアプリケーション再起動 再度、ターミナルに戻って ./init.sh を実⾏する すると、いま変更したDBやアプリケーションが反映される 興味がある⽅は、前述の⼿順でDBのテーブルの中⾝を⾒てみてください
最低限のテナントコンテキストを⼊れる – 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 というテストデータになっているため、 各ユーザーで⼊ってテナント間で ちゃんとデータが⾒れないか確かめる
最低限のテナントコンテキストを⼊れる – 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になった︕ のか︖︕
© 2024 Anti-Pattern Inc. All rights reserved. 実は・・・ マルチテナントSaaS としては
⾜りてないこと やばそうなこと がいっぱい︕
攻撃を試す – Brute force attack - 1 7. ログイン認証を突破する攻撃 ブルートフォース攻撃(総当たり攻撃)を軽く試します
7-1. 攻撃ツール(Hydra)のセットアップ 新しいシェルを作成して、「sample.txt」 のコマンドを実⾏ 「+」を押すと、新しいシェルが開きます こんな感じ 今回は体験を主としているので すごくシンプルな辞書を作ってます
攻撃を試す – 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' アカウントがバレちゃいました・・・
攻撃を試す – 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とか振る舞い検知とか そんなの作ってられない
攻撃を試す – SQL Injection - 1 8. テナント境界をまたいじゃう攻撃 SQLインジェクションを軽く試します 8-1.
[email protected]
(テナント1のユーザー) でログインしてください。 8-2. メッセージに 以下を⼊れてみてください。 hello', now()), ('2', '2', 'hacked message
攻撃を試す – SQL Injection - 2 8-3. いったんログアウトし、
[email protected]
(テナント2のユーザー) でログインしてください。
※興味がある⽅は、DBのテーブルものぞいてみてください 先ほどのメッセージ 「helloʻ, now()), (ʼ2ʻ, ʼ2ʻ, ʼhacked message」 で、
[email protected]
(テナント1のユーザー) が
[email protected]
(テナント1のユーザー) になりすまして、 テナント2にメッセージが書けてしまいました・・・
攻撃を試す – SQL Injection - 2 8-3. いったんログアウトし、
[email protected]
(テナント2のユーザー) でログインしてください。
※興味がある⽅は、DBのテーブルものぞいてみてください 先ほどのメッセージ 「helloʻ, now()), (ʼ2ʻ, ʼ2ʻ, ʼhacked message」 で、
[email protected]
(テナント1のユーザー) が
[email protected]
(テナント1のユーザー) になりすまして、 テナント2にメッセージが書けてしまいました・・・ プール⾵モデルだと 基本的なセキュリティホールやバグで テナント境界をまたがれてしまいやすそう・・・
© 2024 Anti-Pattern Inc. All rights reserved. 改善タイム︕
改善チャレンジ︕ • テクニカル • SQLインジェクションが起きないように修正する • +ビジネス • 次に開発する部分と優先順位をディスカッションしてみてください •
機能⾯(例) • テナント名が固定になっちゃってるけどいいかな︖ • チャットのUIがしょぼい︖ • ログインにGoogle認証⼊れたい • ボイスチャットできるようにしたい • LLMが相⼿してくれるようにしたい • 管理者権限の⼈がユーザーの追加、削除出来るようにしたい • ⾮機能⾯(例) • 新規契約されたテナントの発⾏を出来るようにしたい • 料⾦プランをどうしよう︖ • 請求・⽀払はどうやってやろう • ブルートフォースアタックに対応できるようにする • 性能的にこのままで⼤丈夫か︖ • インフラ構築をどうするか︖ • CI/CDをどうする︖ などなど まだまだ いっぱい
© 2024 Anti-Pattern Inc. All rights reserved. これでいいのか︖︕SaaS︕ SaaS管理画⾯ テナント管理
ユーザー管理 認証認可 ログ収集 利⽤量計測 分析 請求 料⾦プラン Webフロントエンド テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB このままの勢いで⾏くと、こうなっちゃう
© 2024 Anti-Pattern Inc. All rights reserved. SaaSのアーキテクチャ SaaS管理画⾯ テナント管理
ユーザー管理 認証認可 ログ収集 利⽤量計測 分析 請求 料⾦プラン コントロールプレーン (SaaSの管理に必要な機能群) アプリケーションプレーン (SaaSのアプリケーションの機能群) Webフロントエンド テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB テナント バックエンド DB
© 2024 Anti-Pattern Inc. All rights reserved. まとめ
© 2024 Anti-Pattern Inc. All rights reserved. Conclusion ・技術的にも SaaS
ならではの考えることがたくさんある ・その中でも、まずはテナント分離の考え⽅が基本になる ・なるべく⾃分で作らないで信頼できる製品を活⽤する ・ (今回はなかったですが)インフラ、アプリ、開発、運⽤を全部ひっくるめて考える必要がある︕ ・ (今回はなかったですが)なので SaaS は作った⼈が運⽤するべし︕ You built it, you run it! ・ (今回はなかったですが)さらに、お客様からのフィードバックを開発・運⽤に活かすべし︕ ・(今回はなかったですが)データを製品改善に活かすべし︕ ということで、 SaaS のエンジニアは楽しいですよ︕
© 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開発ガイド【基礎編】 続編(テナント編)もあります︕
まとめディスカッション その後、チームで ディスカッションしてみてください • 今⽇学んだこと • ⾯⽩かったこと • つまらなかったこと •
難しかったこと • チームに共有したいこと まずはアンケート回答 お願いします︕ https://docs.google.com/forms/d/e/1FAIpQLScUI7 BctzwwJ5GuaFfSH4R2_W3VWFsc5asOWz3nd0htzu PkTA/viewform 講義内限り
© 2024 Anti-Pattern Inc. All rights reserved. “⽇本のソフトウェアエンジニアを 憧れの職業へ”
© 2024 Anti-Pattern Inc. All rights reserved. ここ以降は SaaSus Platform
の宣伝です
© 2024 Anti-Pattern Inc. All rights reserved. SaaSus Platform 概要
弊社がもつ SaaS 開発/運⽤ のナレッジを集約し SaaS 作りと運⽤・販売のサポートをする SaaS を提供する https://saasus.io
© 2024 Anti-Pattern Inc. All rights reserved. SaaSus Platform 概要
認証・認可 請求 料⾦プラン コミュニケーション セキュリティ 利⽤量計測 x テナント管理 分析 業務ロジック 業務ナレッジ ベストプラクティス SaaSの直接的な価値を⽣む ここの実装に集中︕ DB分離 事業モニタリング ここは外部の サービスに まかせるのじゃ