Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Who am I ? ⾼橋 建太 / 株式会社 Showcase Gig所属 Showcase Gig の Platformチームで主に認証認可 部分を担当。主にバックエンドエンジニアとして マイクロサービス認証認可の設計や開発を⾏って いる。 好きな⾔語は Go。毎週、社内で Go の勉強会を主 催して⾏い、社内 Gopher 計画を遂⾏している。 Showcase Gig

Slide 3

Slide 3 text

What is O:der Platnform ? Showcase Gig

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

今日話すところ Showcase Gig

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

What is O:der ID ? Showcase Gig

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

O:der Platform と Degital Identity についての詳細は、また別の機会で話したいと思います Showcase Gig

Slide 14

Slide 14 text

Agenda • Challenges of sercuring micorservices • How build AuthN/AuthZ? Showcase Gig

Slide 15

Slide 15 text

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/

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Kitchen Service Payment Service Delivery Service O:der ID Service O:der Platform エントリポイントごとに セキュリティホールの 可能性がある

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Payment Service Delivery Service session Service Showcase Gig User Ordering Service ログイン済み お会計 セッションの確認 都度、ログイン状態を問い合わせる必要が出てくる

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

マイクロサービス間の信頼性構築 • マイクロサービス同士の認証を行うときにお互いに鍵を管理 • ベーシック認証 • mTLS • などなど • マイクロサービスが増えるたびに鍵を管理するのは辛い • ローテーション、有効期限切れなど

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Payment Service Delivery Service session Service Showcase Gig User Ordering Service ログイン済み お会計 データの欠損、どのリクエスト失敗が失敗なのか 調査が大変

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

サービスの認証情報やアクセス制御ポリシーの維持 • マイクロサービスはコンテナでやるのが一般的になってきてい る • コンテナはイミュータブルサーバーなので、鍵の更新、アクセ ス制御の更新などは随時再デプロイが必要になったりする • デプロイ忘れなど

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Payment Service Delivery Service session Service Showcase Gig User Ordering Service ログイン済み お会計 ユーザーステータスの確認 現在のユーザー状態をサービス間で統一させるのは難しい

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

実装レベルでのセキュリティ • マイクロサービスではどの言語、技術スタックを用いてもいい となっている • それぞれの技術で同様のセキュリティレベル担保しなければい けない • 弊社では バックエンドに Go を採用!!!

Slide 32

Slide 32 text

How build AuthN/AuthZ? Showcase Gig

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

AuthN/AuthZ? 認証(Authetication/AuthN) • ユーザー/システムの本人性を検証すること • 認証の三要素 • WHAT YOU ARE (inherence factor) • WHAT YOU HAVE (possession factor) • WHAT YOU KNOW(knowledge factor) 認可(Authrorization/AuthZ) • ユーザー/システムに対して、リソースアクセスの権限を与えること • 「誰」ということは重要ではない Showcase Gig

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

Access Token • 署名済みの JWT 形式 • スコープの値を保持しているので各マイクロサービスはその値をみてアクセスの可否を判断する • 各マイクロサービスが access token の検証を行う • Access token の有効期限は短いので token の リフレッシュ時に user の状態などの整合性を合わせる ようにしている • 署名のための鍵のローテーションは必須 Showcase Gig

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

Kitchen Service Payment Service Delivery Service O:der ID Service O:der Backend 公開鍵を配布 公開鍵を配布 リクエストの検証 Access Token Access Token 自身でトークンの検証を行う Showcase Gig

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

Rotator 側の実装例 • Key value で鍵を保持するストレージがある • RWMutex を使って書き込む読み込み時 にロックを取得するようにしている

Slide 46

Slide 46 text

Rotator 側の実装例 2 • main 関数では errgroup を使っていた • withContext() を呼ぶと context キャンセルを受け取れる • for select を使って無限ループ • Ticker を使うと将来のあるタイミングで 処理を実行するみたいなことができる • 定期的に鍵を取得してくる

Slide 47

Slide 47 text

課題 • キャッシュされた古い鍵問題 • 鍵の取得リクエストが失敗したときのリトライ処理など

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

Conclusion • Challenges of sercuring micorservices • やることは無限にある • まだまだやれていなことがたくさん • How build AuthN/AuthZ? • Open ID Connect を利用して認証認可を提供 • SDK の実装 Showcase Gig

Slide 50

Slide 50 text

ご清聴ありがとうございました Showcase Gig