【SaaS開発の基礎を体験!】日本CTO協会主催 新卒エンジニア合同研修潜入レポート
はじめに
こんにちは。BEMALab編集部の橋本です!
2024年6月12日(水)に第3回目の日本CTO協会主催の新卒エンジニア合同研修へ参加してきました!
第3回目は、株式会社アンチパターン様が研修を担当し、弊社から3名が潜入取材させていただきました!
会場は協賛の株式会社LayerX様のオフィス(銀座松竹スクエア)で開催されました。
日本CTO協会が合同新卒エンジニア研修を企画する理由
現代のビジネスでは、エンジニアは企業にとって重要な役割を果たしています。しかし、世間的にはエンジニアの不足が叫ばれており、その不足を解消するためには、採用だけでなく育成にも注力する必要があります。
このような課題を背景に日本CTO協会では、各社の新卒採用の負担が少なく、多角的な研修を提供するために、合同研修企画をこの6月から始められました。
※詳細はこちらのプレスリリース記事をご覧ください!
研修テーマは「BtoB SaaS開発基礎講座」
今回のアンチパターン様による研修テーマは「BtoB SaaS開発基礎講座」でした。
講師を務めた矢ヶ崎哲宏氏は、同社の取締役 CTO兼COOであり、日本のソフトウェアエンジニアを憧れの職業にするという考えのもと、多岐にわたる業務に従事されています。
今回の研修は、GitHub上で進行され、チームワークを主としたインタラクティブな講義が進行されていました。
SaaS開発におけるビジネスとテクノロジーの一体化の重要性
冒頭、矢ヶ崎氏から、SaaSの運用と開発では、ビジネスとテクノロジーの統合が不可欠だと述べられていました。
実際に、世の中で広く展開されているサービス例や企業が示すとおり、この統合によりコストやリスクを最小限に抑えつつ、市場のニーズに応じた効果的なソリューションを提供し、競争力を維持できるようになります。
エンジニアがSaaSビジネスを理解することは、技術的な側面だけでなく、ビジネス的な観点も含めて重要だと強調されていました。
特に、SaaS開発の基礎であるテナント分離モデルは、コスト、運用効率、コンプライアンス、展開モデルなど様々な観点から考慮する必要があり、講義内ではその重要性について教えていただきました。
![テナント分離モデルごとの特徴の説明図](https://images.microcms-assets.io/assets/0b7e26d405ac43a2bb794b29dd552427/8a515166964941a28b69fd3ccebf1e0c/%E3%82%A2%E3%83%B3%E3%83%81%E3%83%8F%E3%82%9A%E3%82%BF%E3%83%BC%E3%83%B31.png?fm=webp)
![講義の様子](https://images.microcms-assets.io/assets/0b7e26d405ac43a2bb794b29dd552427/dfd52699ad6b4f7583b16728e8adf19b/%E3%82%A2%E3%83%B3%E3%83%81%E3%83%8F%E3%82%9A%E3%82%BF%E3%83%BC%E3%83%B32.jpg?fm=webp)
SaaS開発を体験!
実際に、SaaS開発の体験に移ります。
開発体験の前に、以下のSaaS開発のポイントを教えていただきました。
・テナント
サービスの契約をする顧客組織の単位。
会社や一部門、特定の団体など実際の組織は多岐にわたる。
・サイロ、プール、ブリッジモデル(、ハイブリッドモデル)
リソースの共有範囲を表す。後述の項目に合わせて検討が必要。
・SaaSにおける認証と認可
ユーザの認証とともにそのユーザがどのテナントに属しているかという認証、ユーザ単 位・テナント単位の両方の観点から認可をする必要がある。契約している料金プランも関 係する。
・テナント分離
自身のテナント以外にアクセスできないようにマルチテナントにおいて分離が必要。
コスト、運用効率、コンプライアンス、展開モデルによって検討する必要がある。
• データパーティショニング
テナント分離とともに、特にデータ(データベースやストレージなど)をどのように分割し ていくのかを考える必要がある
上記のポイントを踏まえて、以下手順でマルチテナント化(プール型風マルチテナント)を作成します。(手順の詳細は省略いたします)
1.サンプルアプリケーションからチャットを作成
2.マルチテナント化を設定
3.実際に問題が無いか3パターンの攻撃を実施
(3-1.ブルートフォース攻撃/3-2.攻撃ツール(Hydra)の実行/3-3.SQLインジェクション)
以下、攻撃の様子です。
![3-2.攻撃ツール(Hydra)の実行](https://images.microcms-assets.io/assets/0b7e26d405ac43a2bb794b29dd552427/dbfe3d6fdc64462d8e8a6c611f4b7f61/%E3%82%A2%E3%83%B3%E3%83%81%E3%83%8F%E3%82%9A%E3%82%BF%E3%83%BC%E3%83%B33.png?fm=webp)
アカウントがバレてしまいます。(赤枠の部分)
![3-3.SQLインジェクション](https://images.microcms-assets.io/assets/0b7e26d405ac43a2bb794b29dd552427/3fa4089f3ff747d08b20595f69234949/%E3%82%A2%E3%83%B3%E3%83%81%E3%83%8F%E3%82%9A%E3%82%BF%E3%83%BC%E3%83%B34.png?fm=webp)
user@example.com(テナント1のユーザー)でログイン後、hello', now()), ('2', '2', 'hacked message と入力します。
![3-3.SQLインジェクション](https://images.microcms-assets.io/assets/0b7e26d405ac43a2bb794b29dd552427/b781bb6925714d199fa0582a99977036/%E3%82%A2%E3%83%B3%E3%83%81%E3%83%8F%E3%82%9A%E3%82%BF%E3%83%BC%E3%83%B35.png?fm=webp)
先ほどのメッセージ 「helloʻ, now()), (ʼ2ʻ , ʼ2ʻ , ʼhacked message」 で、
user@example.com(テナント1のユーザー) が
user2@example.com(テナント1のユーザー) になりすまして、
テナント2にメッセージが書けてしまいました...。
したがって、[1] [2] [3] [4] 認証(ログインなど)を自己作成してしまうと、MFAや振る舞い検知など様々な対応に手付かずになってしまい、攻撃し放題のサーバーになってしまいます。
プール風モデルだと基本的なセキュリティホールやバグでテナント境界をまたがれやすいことが判明しました。
上記の攻撃を試みて、セキュリティ対策の重要性を再確認しました。
講義は、ニコニコ動画のように受講者のメッセージが画面に表示されるオープンソースツール(POSSEscreen)を使ってインタラクティブに行われました。[矢ヶ崎5] [橋本6]
![DoS攻撃の実験の様子](https://images.microcms-assets.io/assets/0b7e26d405ac43a2bb794b29dd552427/357dfe046cdb4e7da20232ac9ecc8772/%E3%82%A2%E3%83%B3%E3%83%81%E3%83%8F%E3%82%9A%E3%82%BF%E3%83%BC%E3%83%B36.jpg?fm=webp)
講義の最後には、受講者から一斉にメッセージを送り、DoS攻撃のように画面をメッセージで埋め尽くす実験を行いました。
この結果、ツールがレートリミットなどのDoS対策をしていないために講義が続行不能となり、ツールを強制終了して講義が終了しました。
本講義のまとめ
上記のように、セキュリティインシデントが起きないように、[矢ヶ崎9] [橋本10] SaaSのアーキテクチャを理解し、原理・原則に従うことが重要だとお話いただきました。
講師の矢ヶ崎氏から、本講義のまとめとして以下の7点が共有されました。
▼SaaS開発の基本原理:7つのポイント
- 技術的にもSaaSならではの考えることがたくさんある
- その中でも、まずはテナント分離の考え方が基本
- なるべく自分で作らないで信頼できる製品を活用する
- インフラ・アプリ・開発・運用を全部ひっくるめて考える必要がある!
- SaaSは作った人が運用するべし!「You Built it, you run it!」
- お客様からのフィードバックを開発・運用に活かすべし!
- データを製品改善に活かすべし!
![SaaSのアーキテクチャ](https://images.microcms-assets.io/assets/0b7e26d405ac43a2bb794b29dd552427/11403a7af98444deba768202f644aeb0/%E3%82%A2%E3%83%B3%E3%83%81%E3%83%8F%E3%82%9A%E3%82%BF%E3%83%BC%E3%83%B38.png?fm=webp)
マルチテナントアーキテクチャの基本であるテナント分離は、データのセキュリティとプライバシーを守るために不可欠です。
今回のSaaS開発体験を通して学んだこと
SaaS開発にはスケーラビリティ、可用性、セキュリティなどの技術的課題があり、これに対応するための知識と経験が重要です。
また、インフラから運用まで一貫して考えることが品質向上に繋がると学びました。さらに、「You Built it, you run it!」の考え方により、開発者が運用にも責任を持つ重要性を理解しました。
これらを通じて、より安全で効率的なSaaS環境を提供するためには多角的な視点が不可欠であり、技術とビジネスの両方を理解することで、エンジニアは柔軟で効果的なソリューションを提供できると考えました。
本研修へかかわった方のコメント
参加したメンバーズ社員のコメント D.H(エンジニア 新卒2年目)
研修内容の感想
BtoBSaaS開発基礎研修ということで自分自身、SaaSのアプリケーションに携わっていたこともあったのですが、そこではアプリをどう売っていくのかというビジネスでの関心事とアプリケーションとしてどのような設計、画面にするかのアプリケーションでの関心事があると思っていました。
ただ、今回のSaaS開発基礎研修を受けてビジネスレイヤーとアプリケーションレイヤーの中間としての"サービス"という観点について目を向けることができました。
どれくらい長く、たくさん使ってもらえるか。運用コストは増えすぎていないか。BtoB特有のテナント(ユーザー企業)をどのように扱えばいいのか。などエンジニアだけ、POだけでも答えを出せない問題を認識できました。
新しい観点とその考え方という意味でSaaSの基礎を培うことができる研修でした。
研修全体の感想
体験型でしっかりしたコードを簡単に触ってSaaSって何を気にすればいいんだろうという中身を実感できるいい体験でした。
講師からのコメント (株式会社アンチパターン)
このたびは「BtoB SaaS開発基礎研修」にご参加いただきまして、ありがとうございました!チームでのディスカッションも盛り上がっていただき、コメントも積極的に打っていただき、最終的にはすごい量のコメントで画面が埋め尽くされ、講義していてとても楽しかったです!
講義の内容でも触れましたが、BtoB SaaS開発のポイントがまとまった日本語の情報はまだまだ少なく、SaaS開発・運用時に似たハマりポイントや悩みを抱えているエンジニアの方々とお話させていただく機会が今でもちょくちょくあります。
さらに、悩みを抱えている方々はかなり進んでいる方で、まだまだSaaS開発というものがある、という認知すらままならない状況だと感じております。
一方でアメリカのSaaS開発・運用の情報は日本に比べて進みすぎており、難しく感じてしまいあまり参考にならない場面も多いかと思っております。
そこで、今回は超基礎としてSaaSコントロールプレーンというものとSaaS開発の最初の一歩のポイント、セキュアプログラミングとSaaS開発の関係を体験していただくコンテンツをやってみました。今後の参考になりましたら幸いです。
日本のSaaS状況はアメリカに比べて大きく遅れていると感じておりますが、今後は日本のソフトウェアの提供形態の多くもSaaSになっていくと思っております。
それに伴い、どのようなソフトウェアエンジニアでもSaaS開発に関わる機会が増えていくと思います。
アンケートの結果からも、SaaS開発に興味を持っていただいた方々が多くいらっしゃいましたので、今後の日本のSaaS開発を支える方々がどんどん出てくることを期待しています!ぜひよろしくお願いいたします!!!
最後に
簡単に利用を開始できるSaaSですが、攻撃されると簡単に他のサービスへ移行されてしまうリスクがあることを実際のエラーを見て実感しました。
SaaSを有益に活用するためには、マルチテナントのアーキテクチャを採用することが重要であり、テナント分離はSaaS開発の基礎であるため、最優先で考慮すべき重要な要素であることを学びました。
SaaS開発の基礎知識をインタラクティブに学ぶことができ、今後の開発にも役立つ非常に有意義な研修になったと思います。
取材させていただいた皆様ありがとうございました。
次回の取材レポートもぜひご覧ください!
この記事を書いた人
![Yuna Hashimoto](https://images.microcms-assets.io/assets/0b7e26d405ac43a2bb794b29dd552427/436f6a56ce7b48d0a0ce9f5fd2917ed1/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202024-06-25%2015.03.32.png)