Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OIDC仕様に準拠した Makuake ID連携基盤構築の裏側

Y.Matsuda
January 19, 2023

OIDC仕様に準拠した Makuake ID連携基盤構築の裏側

Y.Matsuda

January 19, 2023
Tweet

More Decks by Y.Matsuda

Other Decks in Programming

Transcript

  1. 自己紹介
 Copyright © Makuake, Inc. All Rights Reserved.
 2
 松田陽佑(@ymtdzzz)


    株式会社マクアケ 開発本部 Re-Architectureチーム所属
 - 認証・認可基盤サービスの開発と保守( 2021年10月入社)
 - 最近までID連携(OIDC)基盤の開発をメインで担当 
 - 分散トレーシング、APMの導入を進めています 
 - 興味分野
 - Kubernetes
 - CKA, CKAD
 - OpenTelemetry(分散トレーシング)
 - (たまに)Contribute
 - OpenTelemetry Advent Calendar 2022

  2. 今日話したいこと
 Copyright © Makuake, Inc. All Rights Reserved.
 3
 話すこと


    - 出来立てホヤホヤのID連携基盤の設計〜構築フェーズのお話
 - makuakeの既存アーキテクチャを踏まえ、OIDC準拠のID連携基盤をどのように構築したか
 - プロジェクト要件、マクアケのアーキテクチャ固有の課題
 - アーキテクチャ
 - チャレンジ
 - 認可フローススクラッチ or ライブラリやBaaSの利用
 - 新認証画面の実装
 話さないこと
 - OIDCの細かい仕様について
 - 実装レベルの話

  3. MakuakeのID連携基盤
 Copyright © Makuake, Inc. All Rights Reserved.
 5
 -

    Makuake本体の認証情報を外部サービスに連携する仕組み
 - 認証、認可の合わせ技
 - OpenID Connect仕様に準拠
 - 2022年9月にリリース🐣
 - Makuake STOREで利用中(RPはまだ一つ)
 認証 認可 外部サイト(RP) Makuake Makuake 外部サイト(RP) 認可フロー開始(認可エンドポイント) ・認可コードでトークン取得( tokenエンドポイント) ・IDトークン署名検証 ・必要に応じてユーザー情報取得( userinfoエンドポイント)
  4. 要件
 - まずはMakuake STOREへのID連携組み込みがファーストステップ 
 - デッドライン:Makuake STOREリリースまで
 - 技術標準であるOpenID

    Connect仕様への準拠
 - (将来的に)Makuake関連サービスや、それ以外の外部サービスとの連携 
 - Webバックエンドでの使用を想定: Basicな認可コードフローのみがスコープ 
 
 アーキテクチャ上の課題
 新規構築が多いので認証サービスリプレースのような難しさは無いものの・・・ 
 - 認証画面の新規実装したい
 - ユーザー関連のサービス新規実装 したい
 開発要件と課題
 Copyright © Makuake, Inc. All Rights Reserved.
 7

  5. 認証画面の新規実装したい 
 - 認証サービスはAPIのみ提供
 - 画面はモノリスのビルトイン認証画面 のみ
 - 認証サービスに生やした認証画面を使う(まずは OIDCから)


    
 ユーザー関連のサービス新規実装したい 
 - 認証サービスでは認証に関わるデータ のみ保持
 - ユーザーのプロフィール関連データ 
 は依然としてモノリスのDBに存在
 開発要件と課題
 Copyright © Makuake, Inc. All Rights Reserved.
 8
 ※絶対必要ではないが今後を見据えてこのタイミングでやっておきたい
  6. アーキテクチャ検討
 登場人物
 - 認証サーバー(IdP)
 - 認証API(auth-api)
 - 認証画面(auth-web)※新規実装
 - 認可サーバー(oidc-provider)※新規実装


    - authZ endpoint
 - token endpoint
 - userinfo
 - 外部API GW ※新規実装
 - ユーザーサービス(user-api)※新規実装
 Copyright © Makuake, Inc. All Rights Reserved.
 10

  7. アーキテクチャ検討 - 認証画面(auth-web)
 バックエンド
 - 認証APIと同様にKubernetes(GKE)上に構築
 - マルチテナントによるコストメリット
 - Golangで実装


    フロントエンド
 - CDNで配信(図では省略)
 - Vuejs+Typescriptで実装
 ネットワーキング
 - Traffic Director
 - xDSを用いたプロキシレスのgRPC通信を実現
 Copyright © Makuake, Inc. All Rights Reserved.
 11

  8. バックエンド
 - 認証画面とほぼ同様
 - JWT署名鍵はKMSで管理
 - シークレット情報の隠蔽
 - パフォーマンス的な懸念については負荷試験で担保 


    DB
 - Cloud Spannerを採用
 - auth-apiで実績あり
 - マルチテナントによるコストメリット 
 フロントエンド
 - 認証画面と同様
 アーキテクチャ検討 - 認可サーバー(oidc-provider)
 Copyright © Makuake, Inc. All Rights Reserved.
 12

  9. アーキテクチャ検討 - ユーザーサービス
 Copyright © Makuake, Inc. All Rights Reserved.


    13
 バックエンド
 - ECS上に構築
 - Auroraに近い
 - 将来的なオーナーシップの変更 
 - ユーザーサービス自体はprivate APIとして構築
 し、外部API GWによって公開
 - ユーザーサービス
 - OIDCを意識しない仕様
 - 外部API GW
 - 流量制限
 - OIDC固有の責務
 - tokenチェック
 - scope判定

  10. チャレンジ - スクラッチによる認可フローの実装
 Copyright © Makuake, Inc. All Rights Reserved.


    認可フローの実装手段
 - スクラッチ
 - OSSやマネージドBaaSの使用(hydra, Authlete)
 スクラッチを選択した理由
 - 開発スコープが限られていたため実装コストのリスクは許容範囲と判断
 - 認可コードフロー、特にBasic OPのカバーが要件
 将来的にどこまでカバーするニーズが生じるかは未知数だが・・・
 - OSSやBaaSへのシフト後も作成した実装の多くは無駄にならない
 - チーム内に有識者がいた 
 16
 ここは無駄にならない 出典:https://www.authlete.com/ja/
  11. チャレンジ - 新認証画面の実装
 Copyright © Makuake, Inc. All Rights Reserved.


    背景
 (開発要件と課題より)モノリスの既存認証画面から認証サービス側の認証画面への移行
 →このタイミングでOIDCだけでも新認証画面を使うようにしたい
 リスク
 Makuake STOREリリースまでに認可基盤の提供ができない
 前提
 makuake本体の既存認証画面でもOIDCフローは実現可能
 どうしたか
 既存認証を使用するプランBを持った上で新認証画面実装
 17
 既存認証でOIDCフローが実 現可能であることを検証 新認証画面前提で実装 新認証画面でいくかどうか最 終ジャッジ リリース (プランBの場合)既存認証に 向き先変更
  12. 負荷試験&キャパシティプランニング
 Copyright © Makuake, Inc. All Rights Reserved.
 20
 条件


    - 定常時・ピーク時
 - メディア露出時のスパイク(定常時ピークの10~200倍)
 - スケーリングにかかる時間検証(K8s HPA)
 - ロングランテスト(3日程度)
 - メモリリークなど短時間の試験で検出しにくい観点
 環境
 - K6 Cloud
 - K6 on EC2 ※ロングランテストのみ

  13. 連携先への組み込みとリリース
 Copyright © Makuake, Inc. All Rights Reserved.
 21
 組み込み手順書ベースで組み込んでもらう


    - 元データはmarkdownでドキュメント化
 - Gitbook等でpublish可能な状態
 →OIDC準拠なのでライブラリやプラグイン導入で組み込み完了
 
 脆弱性診断(外部業者へ委託)を実施後、無事リリース🎉
 - デッドライン ✅
 - OpenID Connect仕様への準拠 ✅
 - 認証画面の新規実装 ✅
 - ユーザー関連のサービス新規実装 ✅
 リリース後は順調に稼働中

  14. 今後の課題
 Copyright © Makuake, Inc. All Rights Reserved.
 23
 認証改善


    - 認証画面統一
 - 認証手段追加
 OIDC Certificationの取得
 - Basic OP取得準備完了
 SLI/SLO運用
 - 目下運用中
 - APM、Distributed Tracing活用
 他フローへのサポート、OIDC公開 ※未定
 - developer consoleなど開発画面の開発