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

認証認可とGoの話

 認証認可とGoの話

Ef8e34aafb17577652ab333e1ab31399?s=128

Kenta Takahashi

August 11, 2021
Tweet

Transcript

  1. 認証認可とGo の話 Challenges of sercuring micorservices Showcase Gig

  2. Who am I ? ⾼橋 建太 / 株式会社 Showcase Gig所属

    Showcase Gig の Platformチームで主に認証認可 部分を担当。主にバックエンドエンジニアとして マイクロサービス認証認可の設計や開発を⾏って いる。 好きな⾔語は Go。毎週、社内で Go の勉強会を主 催して⾏い、社内 Gopher 計画を遂⾏している。 Showcase Gig
  3. What is O:der Platnform ? Showcase Gig

  4. Kitchen Service User Staff Payment Service Delivery Service O:der ID

    Service O:der Backend O:der CMS Admin Staff O:der Platform Showcase Gig
  5. 今日話すところ Showcase Gig

  6. Kitchen Service User Staff Payment Service Delivery Service O:der ID

    Service O:der Backend O:der CMS Admin Staff O:der Platform Showcase Gig
  7. What is O:der ID ? Showcase Gig

  8. Productivity Access Control Relationship O:der ID = Degital Identity on

    O:der Platform アカウント関連の機能の 再利用による開発時間の短縮 「いつ」「誰が」「どのように」など リソースを管理・制御する 人ごとに最適な価値を提供する (レコメンデーションや不正検知など) Showcase Gig
  9. Kitchen Service User Staff Payment Service Delivery Service O:der ID

    Service O:der Backend O:der CMS Admin Staff O:der Platform Aceess Control Showcase Gig
  10. Kitchen Service User Staff Payment Service Delivery Service O:der ID

    Service O:der Backend O:der CMS Admin Staff O:der Platform Aceess Control Showcase Gig
  11. Kitchen Service User Staff Payment Service Delivery Service O:der ID

    Service O:der Backend O:der CMS Admin Staff O:der Platform Aceess Control 管理画面からは 決済が行えない Showcase Gig
  12. Productivity Access Control Relationship O:der ID = Degital Identity on

    O:der Platform アカウント関連の機能の 再利用による開発時間の短縮 「いつ」「誰が」「どのように」など リソースを管理・制御する 人ごとに最適な価値を提供する (レコメンデーションや不正検知など) Showcase Gig
  13. O:der Platform と Degital Identity についての詳細は、また別の機会で話したいと思います Showcase Gig

  14. Agenda • Challenges of sercuring micorservices • How build AuthN/AuthZ?

    Showcase Gig
  15. Challenges of sercuring microservices 1. 攻撃対象領域が広いほど、攻撃のリスクが高くなる 2. 外部リクエストの検証によるパフォーマンスの低下 3. マイクロサービス間の信頼性構築

    4. 複数マイクロサービスにまたがるリクエストの追跡 5. サービスの認証情報やアクセス制御ポリシーの維持 6. 分散性によるユーザーコンテキストの共有 7. 実装レベルでのセキュリティ Showcase Gig 参考) microsercie in action より https://learning.oreilly.com/library/view/microservices-security-in/9781617295959/
  16. Challenges of sercuring microservices 1. 攻撃対象領域が広いほど、攻撃のリスクが高くなる 2. 外部リクエストの検証によるパフォーマンスの低下 3. マイクロサービス間の信頼性構築

    4. 複数マイクロサービスにまたがるリクエストの追跡 5. サービスの認証情報やアクセス制御ポリシーの維持 6. 分散性によるユーザーコンテキストの共有 7. 実装レベルでのセキュリティ Showcase Gig
  17. Kitchen Service Payment Service Delivery Service O:der ID Service O:der

    Platform エントリポイントごとに セキュリティホールの 可能性がある
  18. Challenges of sercuring microservices 1. 攻撃対象領域が広いほど、攻撃のリスクが高くなる 2. 外部リクエストの検証によるパフォーマンスの低下 3. マイクロサービス間の信頼性構築

    4. 複数マイクロサービスにまたがるリクエストの追跡 5. サービスの認証情報やアクセス制御ポリシーの維持 6. 分散性によるユーザーコンテキストの共有 7. 実装レベルでのセキュリティ Showcase Gig
  19. Payment Service Delivery Service session Service Showcase Gig User Ordering

    Service ログイン済み お会計
  20. Payment Service Delivery Service session Service Showcase Gig User Ordering

    Service ログイン済み お会計 セッションの確認 都度、ログイン状態を問い合わせる必要が出てくる
  21. Challenges of sercuring microservices 1. 攻撃対象領域が広いほど、攻撃のリスクが高くなる 2. 外部リクエストの検証によるパフォーマンスの低下 3. マイクロサービス間の信頼性構築

    4. 複数マイクロサービスにまたがるリクエストの追跡 5. サービスの認証情報やアクセス制御ポリシーの維持 6. 分散性によるユーザーコンテキストの共有 7. 実装レベルでのセキュリティ Showcase Gig
  22. マイクロサービス間の信頼性構築 • マイクロサービス同士の認証を行うときにお互いに鍵を管理 • ベーシック認証 • mTLS • などなど •

    マイクロサービスが増えるたびに鍵を管理するのは辛い • ローテーション、有効期限切れなど
  23. Challenges of sercuring microservices 1. 攻撃対象領域が広いほど、攻撃のリスクが高くなる 2. 外部リクエストの検証によるパフォーマンスの低下 3. マイクロサービス間の信頼性構築

    4. 複数マイクロサービスにまたがるリクエストの追跡 5. サービスの認証情報やアクセス制御ポリシーの維持 6. 分散性によるユーザーコンテキストの共有 7. 実装レベルでのセキュリティ Showcase Gig
  24. Payment Service Delivery Service session Service Showcase Gig User Ordering

    Service ログイン済み お会計
  25. Payment Service Delivery Service session Service Showcase Gig User Ordering

    Service ログイン済み お会計 データの欠損、どのリクエスト失敗が失敗なのか 調査が大変
  26. Challenges of sercuring microservices 1. 攻撃対象領域が広いほど、攻撃のリスクが高くなる 2. 外部リクエストの検証によるパフォーマンスの低下 3. マイクロサービス間の信頼性構築

    4. 複数マイクロサービスにまたがるリクエストの追跡 5. サービスの認証情報やアクセス制御ポリシーの維持 6. 分散性によるユーザーコンテキストの共有 7. 実装レベルでのセキュリティ Showcase Gig
  27. サービスの認証情報やアクセス制御ポリシーの維持 • マイクロサービスはコンテナでやるのが一般的になってきてい る • コンテナはイミュータブルサーバーなので、鍵の更新、アクセ ス制御の更新などは随時再デプロイが必要になったりする • デプロイ忘れなど

  28. Challenges of sercuring microservices 1. 攻撃対象領域が広いほど、攻撃のリスクが高くなる 2. 外部リクエストの検証によるパフォーマンスの低下 3. マイクロサービス間の信頼性構築

    4. 複数マイクロサービスにまたがるリクエストの追跡 5. サービスの認証情報やアクセス制御ポリシーの維持 6. 分散性によるユーザーコンテキストの共有 7. 実装レベルでのセキュリティ Showcase Gig
  29. Payment Service Delivery Service session Service Showcase Gig User Ordering

    Service ログイン済み お会計 ユーザーステータスの確認 現在のユーザー状態をサービス間で統一させるのは難しい
  30. Challenges of sercuring microservices 1. 攻撃対象領域が広いほど、攻撃のリスクが高くなる 2. 外部リクエストの検証によるパフォーマンスの低下 3. マイクロサービス間の信頼性構築

    4. 複数マイクロサービスにまたがるリクエストの追跡 5. サービスの認証情報やアクセス制御ポリシーの維持 6. 分散性によるユーザーコンテキストの共有 7. 実装レベルでのセキュリティ Showcase Gig
  31. 実装レベルでのセキュリティ • マイクロサービスではどの言語、技術スタックを用いてもいい となっている • それぞれの技術で同様のセキュリティレベル担保しなければい けない • 弊社では バックエンドに

    Go を採用!!!
  32. How build AuthN/AuthZ? Showcase Gig

  33. Open ID Connect 認可 + 認証 + Profile API の機能を実装

    SDK の実装 キーローテーション機能 アクセストークン検証機能 Showcase Gig
  34. Open ID Connect 認可 + 認証 + Profile API の機能を実装

    SDK の実装 キーローテーション機能 アクセストークン検証機能 Showcase Gig
  35. AuthN/AuthZ? 認証(Authetication/AuthN) • ユーザー/システムの本人性を検証すること • 認証の三要素 • WHAT YOU ARE

    (inherence factor) • WHAT YOU HAVE (possession factor) • WHAT YOU KNOW(knowledge factor) 認可(Authrorization/AuthZ) • ユーザー/システムに対して、リソースアクセスの権限を与えること • 「誰」ということは重要ではない Showcase Gig
  36. Kitchen Service User Staff Payment Service Delivery Service O:der ID

    Service O:der Backend O:der CMS Admin Staff O:der Platform Showcase Gig
  37. Kitchen Service User Payment Service Delivery Service O:der ID Service

    O:der Backend O:der Platform Open ID Connect ① ユーザー認証 ② アクセストークン返却 ③ アクセストークン ③ ③ ※フローには載っていないいないですが、 トークンリクエストなどのバックチャンネ ル側で行うべき処理は O:der Backend 間で行 っています Showcase Gig
  38. Access Token • 署名済みの JWT 形式 • スコープの値を保持しているので各マイクロサービスはその値をみてアクセスの可否を判断する • 各マイクロサービスが

    access token の検証を行う • Access token の有効期限は短いので token の リフレッシュ時に user の状態などの整合性を合わせる ようにしている • 署名のための鍵のローテーションは必須 Showcase Gig
  39. Kitchen Service Payment Service Delivery Service O:der ID Service O:der

    Backend 公開鍵を配布 公開鍵を配布 リクエストの検証 配布された公開鍵はメモリなどに キャッシュする Showcase Gig
  40. Kitchen Service Payment Service Delivery Service O:der ID Service O:der

    Backend 公開鍵を配布 公開鍵を配布 リクエストの検証 Access Token Access Token 自身でトークンの検証を行う Showcase Gig
  41. Open ID Connect 認可 + 認証 + Profile API の機能を実装

    SDK の実装 キーローテーション機能 アクセストークン検証機能 Showcase Gig
  42. 鍵ローテーション • サービスが増えていることで鍵の管理が難しくなる • すでにつらい状態… • 署名につかっているトークンの鍵が漏れるとなりすましが可能 になっている • 退職したときのキーローテーションなどつらみがでてくる

  43. 鍵ローテーション機能の実装 O:der ID Service ①定期的に鍵をストレージに保存 Kitchen Service Payment Service ②各マイクロサービスが

    定期的に鍵を問い合わせる
  44. Client 側の実装例 1. Key Rotator 初期化 1. アプリケーション起動時に現在有効な鍵を取得してく る 2.

    SDK が準備しているミドルウエアに渡す 1. トークンの有効性を確認 1. 改ざんされていないか 2. 有効期限 3. 発行元 4. … 2. 内部の context に トークンから struct 化したものを入れ る 3. Run 関数の中で定期定期に O:der ID service に鍵 を取得している 1. errorgroup を使って並列で起動させる
  45. Rotator 側の実装例 • Key value で鍵を保持するストレージがある • RWMutex を使って書き込む読み込み時 にロックを取得するようにしている

  46. Rotator 側の実装例 2 • main 関数では errgroup を使っていた • withContext()

    を呼ぶと context キャンセルを受け取れる • for select を使って無限ループ • Ticker を使うと将来のあるタイミングで 処理を実行するみたいなことができる • 定期的に鍵を取得してくる
  47. 課題 • キャッシュされた古い鍵問題 • 鍵の取得リクエストが失敗したときのリトライ処理など

  48. Reference • Microservices Security in Action • https://learning.oreilly.com/library/view/microservices-security- in/9781617295959/ •

    Spring Microservices in Action • https://learning.oreilly.com/library/view/spring-microservices- in/9781617293986/ • マイクロサービスパターン[実践的システムデザインのための コード解説] (impress top gear) • https://www.amazon.co.jp/dp/4295008583/ref=cm_sw_r_tw_dp_NK7CKJVTB P8ZRFFH5V07
  49. Conclusion • Challenges of sercuring micorservices • やることは無限にある • まだまだやれていなことがたくさん

    • How build AuthN/AuthZ? • Open ID Connect を利用して認証認可を提供 • SDK の実装 Showcase Gig
  50. ご清聴ありがとうございました Showcase Gig