Slide 1

Slide 1 text

© CADDi Inc. BtoB SaaS を⽀える 認証認可基盤の設計 前多 賢太郎 CADDi Platform Group October 5, 2023

Slide 2

Slide 2 text

© CADDi Inc. © CADDi Inc. 2 Engineering Manager Keiichi Yamada SIer、コロプラを経て2019年9⽉にキャディ⼊社。 2つのプロダクト開発を経て、2021年7⽉にプラットフォーム チームを組成。技術組織向けの横断的な活動とチームマネジメ ントに従事。 2023年6⽉よりCTO Officeを⽴ち上げ、技術組織全体のポリ シー制定やセキュリティ強化、採⽤活動に取り組んでいる。 プライベートでは2⼈の男児のパパ。 Software Engineer Kentaro Maeda バックエンドエンジニア、SREとして、システム全体の最適化 やアプリケーション基盤構築に携わる。 2022年2⽉に 製造業で新しい商流を作ろうとしているキャ ディのビジネスモデルに惹かれて⼊社。 ⼊社後は、Platformチームのメンバーとしてクラウドインフ ラの管理やシステム横断の技術課題の解消に従事、サービス メッシュの導⼊や認証認可基盤の構築など、CADDiのサービス 全般の運⽤課題や共通機能の開発に取り組んでいる。

Slide 3

Slide 3 text

© CADDi Inc. CADDiの事業について 3 サプライチェーンにまつわる上流‧下流のデータを相互に補完し合う 部品調達プラットフォーム 調達‧⽣産機能の⼀括 請け負いによる モノづくりの変⾰ 図⾯データ活⽤クラウド 図⾯データの アセット化による 社内システムの変⾰ 設計 調達 製造 販売 Technology Knowledge

Slide 4

Slide 4 text

© CADDi Inc. 今⽇のテーマ 4 BtoB SaaS を⽀える認証認可基盤の設計 ● CADDiのサービスと認証機能の変遷 ● SaaS化を⾒据えた認証認可基盤の設計 ● 認証認可基盤技術要素

Slide 5

Slide 5 text

© CADDi Inc. © CADDi Inc. 5 CADDiのサービスと認証機能の変遷

Slide 6

Slide 6 text

© CADDi Inc. 始まりはMANUFACTURING事業 6 ( バーチャルファクトリー ) 顧 客 分析‧コスト計算 納品 製造 パートナー⼯場 図⾯、仕様書の要約、整備 検査‧品質保証 問い合わせ対応 図⾯情報 6

Slide 7

Slide 7 text

© CADDi Inc. CADDi Manufacturing の認証 7 7 受発注の⼯程を管理するためのシステムを内製 認証は社員のみ Auth0 + Google Workspace ⼀部のシステムで外部パートナー向けのアカウントをAuth0で管理 7

Slide 8

Slide 8 text

© CADDi Inc. MANUFACTURINGは社内システム 8 8 8 8 類似図⾯検索 ● 独⾃の画像解析アルゴリズム(特許出 願中)による、形状が類似する図⾯を 検索する機能 ● 形状の特徴から類似図⾯を登録図⾯全 体から検出し表⽰ 紙の図⾯をシステム管理するようにしたところ、図⾯管理をSaaS化する構想が誕⽣ ⼤量の図⾯から類似図⾯を検索する機能を開発した。 8

Slide 9

Slide 9 text

© CADDi Inc. CADDi DRAWERの認証の仕組み CADDiとして初めてのSaaSであり、有償顧客による利⽤が発⽣する 専⽤のAuth0テナントを認証バックエンドとして採⽤ 顧客の識別はユーザーごとの属性で⾏い、ユーザーはツールで投⼊ 9

Slide 10

Slide 10 text

© CADDi Inc. ● 利⽤顧客からのセキュリティ強化要望 ○ MFA, IP制限, AD連携, パスワードポリシーの設定 ■ 顧客会社ごとの設定が難しいものやAuth0のアップグレードが必要なものがあった ● 複数サービスの相互利⽤のニーズが発⽣ ○ 社内システムとのAPI連携の要望が度々発⽣ ■ ⼈による認証のみ対応していたため、セキュアなAPI呼び出しの⽅法やルールがない ■ 認可(⼈の属性やAPIリクエスト元などによるアクセス制御)を考えてない ● 新サービスの追加によるAuth0テナントの追加やユーザー運⽤の煩雑化 ○ Auth0テナントが分散しているため、外部ユーザーの統⼀管理やSSOが難しい サービス拡⼤を⾒据えた認証認可基盤の導⼊の検討を開始 サービス利⽤拡⼤に伴う認証課題の発⽣ 10

Slide 11

Slide 11 text

© CADDi Inc. © CADDi Inc. SaaS化を⾒据えた 認証認可基盤の設計 11

Slide 12

Slide 12 text

© CADDi Inc. 認証認可基盤に求める要件 12 アカウント管理 ● パスワードなどの機密情報を⾃前で保持しない ● MFAへの対応 ● SAML, OIDCなど外部IdPとの連携 ● 低コスト ● マルチテナント, 会社ごとに管理者がアカウントの管理ができる API管理 ● API間のセキュアな通信ができる ● テナントごとにAPIの呼び出しの制御ができる ● 認可制御をするための情報が管理できる

Slide 13

Slide 13 text

© CADDi Inc. CADDi のマルチテナント構成 13 ⼀般的なマルチテナントは全てのリソースが分割 CADDiにおけるマルチテナントは利⽤者の会社‧組織が識別できること。 同⼀サービス上で会社間の取引などが将来起きることを想定

Slide 14

Slide 14 text

© CADDi Inc. 認証認可基盤のアーキテクチャ 14 OAuth2/OIDCをベースにサービスの認可と利⽤者の認証を分離するアーキテクチャを作成

Slide 15

Slide 15 text

© CADDi Inc. © CADDi Inc. 認証認可基盤技術要素 15

Slide 16

Slide 16 text

© CADDi Inc. 認証認可基盤を構成する技術要素 16 要素 機能 使用技術 認可サービス OAuth2/OIDC 認可フロー Ory Hydra ユーザープール テナント別ユーザー情報の保持、ログイン Amazon Cognito 認証サービス 利用者ログインUI Next.jsによる自作 Policy サービス 認証認可基盤の各種設定を行う API,UI NestJS, React-Adminによる自作

Slide 17

Slide 17 text

© CADDi Inc. Ory Hydra 17 https://github.com/ory/hydra 認証SaaSを⼿がける Ory社が中⼼に作成している OIDC/OAuth2 サーバー OpenID Foundationの承認を受けている Hydra プロセスと RDBMSで動くため導⼊が簡単 対応するフロー: Authorization Code Grant (PKCE), Client Credentials 前者を⼈によるログイン、後者を APIの認証のために使⽤している Authorization Code Grantを⾏うためには認証バックエンドが別途必要 既存の認証システムがある場合や認証のカスタマイズが必要な場合に有⽤ (OryからKratosという認証サーバーOSSもあり、SaaSではAll in Oneで提供されて いる)

Slide 18

Slide 18 text

© CADDi Inc. Amazon Cognito 18 AWSのIDaaS。Cognitoのみを使⽤し、その他のサーバーリソースはGoogle Cloud。 Cognitoを選定した理由 ● 他のIDaaSでは上位プランに含まれそうな機能がデフォルト(SAML, MFA ) ● MAU単位のコストが安い(0.05$〜) ○ ⼀つのユーザープールに⼀つの会社を割り当て、会社ごとのユーザー運⽤、セキュリティポリ シーの適⽤を⾏う想定 選定の際に注意が必要だったこと ● 他のIDaaSと⽐べて、便利ではない部分、作り込みが必要な部分が多い。 ○ 認証認可基盤の要件の実現のために、多少の造り込みは必要なので、ここは許容 ● レートリミットの制約が厳しい ○ CADDiのサービスは、会社の特定部署のユーザーが使うもので、利⽤者数は少ない。 そのため、低コストで運⽤できることを重視

Slide 19

Slide 19 text

© CADDi Inc. 認証サービス 19 HydraのOAuthフローから呼び出される認証バックエンド Cognitoの標準ログインUIは拡張性に⽋け、複数のユーザープールをユーザーの所属に応 じて切り替える必要があることから、HydraとCogntioをつなぐログインUIとして⾃作 利⽤者はアプリケーションからログインを開始するとまず、テナントIDを⼊⼒する。 テナントごとに許可されたログイン⼿段でログインするとCognitoへの認証を実施し、成 功するとIdtoken, access tokenをアプリケーションで取得可能になる ログイン 開始 アプリケー ションへ 戻る

Slide 20

Slide 20 text

© CADDi Inc. Policy サービス 20 Hyrda OSSは管理コンソールはなく、またリソースサーバー(API)の管理機能は ない。 これらの設定を管理するサービスとしてNestJS, React-Adminで⾃作 ● HydraにOAuth2クライアントを登録する ○ 認可フローの種類やトークンのTTL,利⽤可能なリソースサーバーの設定など ● リソースサーバーを登録する ○ audienceやscopeの設定 ● 認可設定の管理 ○ クライアントが呼び出し可能なリソースサーバー、スコープの設定 ○ クライアントを利⽤可能なテナントの設定 ○ スクリプトによるログイン処理のカスタマイズ

Slide 21

Slide 21 text

© CADDi Inc. スクリプトによるログイン処理のカスタマイズ 21 ユーザーの属性によるトーク ンのカスタマイズ、ログイン の拒否などをスクリプトで定 義して、柔軟な権限制御を可 能にする ● 特定部署のユーザーに管 理権限ロールを追加する ● 特定テナントのログイン を拒否する ● IP制限などのチェック

Slide 22

Slide 22 text

© CADDi Inc. その他の機能‧将来の展望 22 ● リクエストごとの認可制御 ○ 認証認可基盤はログイン時にトークン発⾏のみを⾏うが、トークンのチェックをサービスメッ シュやCloud Runサイドカーを使ってインフラ側である程度チェックする ■ JWTの期限や署名のチェックなどは⾃動化できる ■ 詳細なチェックはアプリケーション側で⾏うか、OPAによるチェックを調査中 ● ユーザー、テナントのマスター管理 ○ ユーザーやテナントの詳細情報を管理できるように認証認可基盤で扱う情報を拡⼤する ● トークン⾃動⽣成‧変換 ○ API間の通信で使⽤するトークンを⾃動⽣成するプロキシや、トークンを宛先に応じて変換し たりするエージェントの作成 ● 認証ロジックの追加 ○ Cognito カスタム認証(Lambda)を⽤いて、ID/Password以外の認証やセキュリティ強化を⾏う

Slide 23

Slide 23 text

© CADDi Inc. まとめ 23 バラバラな認証バックエンドを集約し、CADDiのサービスと利⽤顧客の拡⼤を⾒ 据えた認証認可基盤を絶賛開発中 ● 認証認可の開発は公開事例も少なく、アーキテクチャや事業に合わせたモデ ルを考えるのは⼤変だったが良い経験になった ● OAuth2/OIDC/SAMLの基本知識が重要で、今もこれからも勉強中 ● 認証認可基盤以外のサービス開発やセキュリティ強化など、CADDi全般で仕 事がいっぱいあるので、興味のある⽅は⼀度お話ししましょう! エンジニア採⽤ポータル CADDi Engineering https://recruit.caddi.tech/

Slide 24

Slide 24 text

© CADDi Inc. © CADDi Inc. ありがとうございました 24