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

認証認可とGoの話

 認証認可とGoの話

Kenta Takahashi

August 11, 2021
Tweet

More Decks by Kenta Takahashi

Other Decks in Technology

Transcript

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

    Showcase Gig の Platformチームで主に認証認可 部分を担当。主にバックエンドエンジニアとして マイクロサービス認証認可の設計や開発を⾏って いる。 好きな⾔語は Go。毎週、社内で Go の勉強会を主 催して⾏い、社内 Gopher 計画を遂⾏している。 Showcase Gig
  2. 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
  3. 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
  4. Productivity Access Control Relationship O:der ID = Degital Identity on

    O:der Platform アカウント関連の機能の 再利用による開発時間の短縮 「いつ」「誰が」「どのように」など リソースを管理・制御する 人ごとに最適な価値を提供する (レコメンデーションや不正検知など) Showcase Gig
  5. 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
  6. 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
  7. 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
  8. Productivity Access Control Relationship O:der ID = Degital Identity on

    O:der Platform アカウント関連の機能の 再利用による開発時間の短縮 「いつ」「誰が」「どのように」など リソースを管理・制御する 人ごとに最適な価値を提供する (レコメンデーションや不正検知など) Showcase Gig
  9. 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/
  10. Challenges of sercuring microservices 1. 攻撃対象領域が広いほど、攻撃のリスクが高くなる 2. 外部リクエストの検証によるパフォーマンスの低下 3. マイクロサービス間の信頼性構築

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

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

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

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

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

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

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

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

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

    4. 複数マイクロサービスにまたがるリクエストの追跡 5. サービスの認証情報やアクセス制御ポリシーの維持 6. 分散性によるユーザーコンテキストの共有 7. 実装レベルでのセキュリティ Showcase Gig
  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. Open ID Connect 認可 + 認証 + Profile API の機能を実装

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

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

    (inherence factor) • WHAT YOU HAVE (possession factor) • WHAT YOU KNOW(knowledge factor) 認可(Authrorization/AuthZ) • ユーザー/システムに対して、リソースアクセスの権限を与えること • 「誰」ということは重要ではない Showcase Gig
  25. 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
  26. 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
  27. Access Token • 署名済みの JWT 形式 • スコープの値を保持しているので各マイクロサービスはその値をみてアクセスの可否を判断する • 各マイクロサービスが

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

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

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

    SDK の実装 キーローテーション機能 アクセストークン検証機能 Showcase Gig
  31. Client 側の実装例 1. Key Rotator 初期化 1. アプリケーション起動時に現在有効な鍵を取得してく る 2.

    SDK が準備しているミドルウエアに渡す 1. トークンの有効性を確認 1. 改ざんされていないか 2. 有効期限 3. 発行元 4. … 2. 内部の context に トークンから struct 化したものを入れ る 3. Run 関数の中で定期定期に O:der ID service に鍵 を取得している 1. errorgroup を使って並列で起動させる
  32. Rotator 側の実装例 2 • main 関数では errgroup を使っていた • withContext()

    を呼ぶと context キャンセルを受け取れる • for select を使って無限ループ • Ticker を使うと将来のあるタイミングで 処理を実行するみたいなことができる • 定期的に鍵を取得してくる
  33. 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
  34. Conclusion • Challenges of sercuring micorservices • やることは無限にある • まだまだやれていなことがたくさん

    • How build AuthN/AuthZ? • Open ID Connect を利用して認証認可を提供 • SDK の実装 Showcase Gig