Slide 1

Slide 1 text

ID連携基盤のマイクロサー ビス移⾏プラクティス てらら 2024年5⽉31⽇

Slide 2

Slide 2 text

2 てらら
 ● ホラー映画
 ● 猫
 ● 兎田ぺこら
 アカウント基盤部Identity Federationチーム エンジニア

Slide 3

Slide 3 text

  ● freee IDを⽤いた OAuth2.0およびOpen ID Connect Core 1.0 における 認可サーバおよびOpenID Connect Provider ○ 外部IDと連携する機能や内部システムのアクセス制御を司る機能は対 象外 ID連携基盤の範囲

Slide 4

Slide 4 text

  ● 移⾏の歴史と背景 ● スタートアップの初期モノリスからの移⾏⽅式 ● 今後について 今⽇話すこと

Slide 5

Slide 5 text

  移⾏の歴史と背景

Slide 6

Slide 6 text

  1. freee会計に全プロダクトの認証認可機能が内蔵されていた 2. freee会計のモノリスから認証認可基盤(旧認証認可基盤)が切り出さ れた(共有DB⽅式) 3. 旧認証認可基盤から新認証基盤へ認証機能を移⾏ 4. 旧認証認可基盤からID連携基盤へID連携機能を移⾏する <- イマココ 移⾏の歴史と背景

Slide 7

Slide 7 text

  freee会計のモノリスから旧認証認可基盤へ freee Developers Hub「これってもしかして……認証基盤が⼊れ替わってる〜?」より

Slide 8

Slide 8 text

  旧認証認可基盤から認証基盤への切り出し freee Developers Hub「これってもしかして……認証基盤が⼊れ替わってる〜?」より

Slide 9

Slide 9 text

  まだ旧認証認可基盤は⽣き残っていた…

Slide 10

Slide 10 text

  旧認証認可基盤からID連携基盤を切り出す

Slide 11

Slide 11 text

  スタートアップの初期モノリス からの移⾏⽅式

Slide 12

Slide 12 text

  ● 最初のサービスは機能提供スピードを重視し、1つのモノリスサービス に機能が集約される ● 2つ⽬のサービスが開発される際にはサービス共通の機能‧データを初 期モノリスのAPIから利⽤する ● ⼀定サービスが増えたときに初期モノリスの機能分離を⾏う際にはデー タ移⾏は慎重になり、アプリケーションサーバのみ分離する (主にfreeeの場合) スタートアップの初期モノリスとは 「共通機能をいつどう切り出すか」という共通課題

Slide 13

Slide 13 text

  1. 移⾏フェーズを⼆段階に分ける a. アプリケーション情報 b. アクセストークン情報 2. それぞれのフェーズでストラングラーフィグパターンを⽤いて置き換える 3. それらを依存プロダクト単位に分けてリリースしていく ID連携基盤の移⾏⽅式

Slide 14

Slide 14 text

  移⾏フェーズを⼆段階に分ける ID連携の機能はアプリケーション情報とアクセストークン情報(リフレッ シュトークンやIDトークンなど含む)に分割可能。アクセストークン情報 はアプリケーション情報に依存するが、逆の依存はないため。 そのため、今回はアプリケーション情報を先に移⾏した。

Slide 15

Slide 15 text

  ストラングラーフィグパターンを⽤いる ストラングラーファサードには各サービスに配布している社内ライブラリ = 認証ライブラリを利⽤ 1. 旧サーバのI/Fを write / read に分類する 2. writeする際に旧サーバと新サーバを直列にリクエストし、レスポンス 結果を⽐較する a. この時点では新旧差分は通知のみ 3. 同じくreadを実施する a. この時点では新旧差分は通知のみ 4. readのプライマリーなリクエストを新サーバに向け、レスポンス結果も 新サーバを採⽤する 5. 同じくwriteを実施する

Slide 16

Slide 16 text

  ストラングラーフィグパターンを⽤いる

Slide 17

Slide 17 text

  ストラングラーフィグパターンを⽤いる プライマリを⼊れ替える

Slide 18

Slide 18 text

  ● メリット ○ モノリス時代から利⽤されていた社内ライブラリを応⽤可能 ○ プロダクト単位で切り替え可能で切り戻しも柔軟 ○ 追加I/Fへの対応も認証認可基盤を扱う開発チームがコントロール可 能 ● デメリット ○ プロダクト単位の社内ライブラリバージョン管理、切り替え管理が⾯ 倒 ストラングラーファサードに社内ライブラリを使うメリデメ

Slide 19

Slide 19 text

  ● Proxy Server ○ プロダクト単位の切り替え/管理に⼀⼯夫必要 ○ Proxy⾃体がSPOFであるため不採⽤ ● envoyやmiddleware等のプロダクト前段に置く場合 ○ 現システム構成とギャップがあって出来なかった ○ 移⾏後に仕様変更した⽅が影響が少ないため不採⽤ その他のストラングラーファサード例

Slide 20

Slide 20 text

  freeeのプロダクト開発はユーザーに提供する価値のスピードにこだわっ ている。⼀⽅、ID連携基盤のようなプラットフォームチームの移⾏案件は そのスピードに寄与しないが、移⾏時にバグを出す(現新I/Fに差異が出 る)場合、プロダクトのスピードが落ちるどころか⽌まる。 I/Fの現新⼀致を担保し続けることでユーザーへの価値提供スピードに間 接的に貢献する。 移⾏⽅式の採⽤理由について補⾜ フェーズ分割‧デプロイ対象プロダクト分割‧差分検証 などの⼿段を取り、⽯橋を安全に渡ることが最重要

Slide 21

Slide 21 text

  ● リファクタリングが最重要 ○ 本ケースでは5年以上前のロジックが未利⽤のまま放置されているこ とも多い ○ 暫定処置が残っており、特に旧DBのインクリメンタルなIDに依存し ている機能もある ○ 未利⽤のI/Fやデータ‧画⾯項⽬を減らせば移⾏対象も減るため、余 計な機能開発も減るため品質保証対象も減り、トータルコストが下が る ● アプリケーション情報を先に移⾏することでアクセストークン情報移⾏ 前にほとんどの課題が消化できた ○ 社内アプリケーションの例外処理を切り分ける必要があった 気をつけていたこと、やってよかったこと

Slide 22

Slide 22 text

  今後 ● toBならではのリソースオーナーの曖昧さを解消していく ○ リソースによってはオーナーが企業か従業員か。 ○ 場合によってはアプリケーション操作ユーザーの認可とリソースオー ナーの認可を分ける可能性も。 ● 出来たらいいな。リソースオーナーが提供する情報を選択できる⽅式へ ● 社内開発者に優しいID連携基盤へ ○ PublicAPIの実装簡素化、明瞭化 ○ SPOFからの脱却

Slide 23

Slide 23 text

No content