Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
年700万円損するサーバレスの 認可システムをご紹介します!!
higuuu
August 04, 2022
Technology
3
620
年700万円損するサーバレスの 認可システムをご紹介します!!
認証はAuth0、認可するAPIはAWSを使った時にコスト面でのアンチパターンについて紹介します。
higuuu
August 04, 2022
Tweet
Share
More Decks by higuuu
See All by higuuu
副業で入ったけどタスクがないからPMっぽいことをした話
higuuu
0
53
もしも、 上司に鬼退治を命じられたら~プロジェクト計画編~
higuuu
0
420
フロントエンドが知って おきたいセキュリティについて
higuuu
1
440
今年の抱負 81日でやり遂げるぞー
higuuu
1
170
Testing rules for teams that do not write test code
higuuu
1
120
コードレビューで 開発が加速した話
higuuu
0
480
SPAのサイトを アプリのwebviewで利用するときのトークンの渡し方
higuuu
0
630
Other Decks in Technology
See All in Technology
「一通りできるようになった」その先の話
hitomi___kt
0
140
SPA・SSGでSSRのようなOGP対応!
simo123
2
160
USB PD で迎える AC アダプター大統一時代
puhitaku
2
2k
Stripe / Okta Customer Identity Cloud(旧Auth0) の採用に至った理由 〜モリサワの SaaS 戦略〜
tomuro
0
140
私見「UNIXの考え方」/20230124-kameda-unix-phylosophy
opelab
1
170
OCI技術資料 : ロード・バランサー 詳細 / Load Balancer 200
ocise
2
7.2k
地方自治体業務あるある ーアナログ最適化編-
y150saya
1
280
岐路に立つ若手がAmazonianの仕事術を学んできました / learning amazonian productivity hacks as a junior engineer
yayoi_dd
0
160
マイクロサービス宣言から8年 振り返りとこれから / Eight Years After the Microservices Declaration A Look Back and A Look Ahead
eisuke
2
240
AI Services 概要 / AI Services overview
oracle4engineer
PRO
0
170
MarvelClient Upgrade 64bit クライアントへの自動アップグレード設定
mitsuru_katoh
0
190
Oracle Cloud Infrastructure:2023年1月度サービス・アップデート
oracle4engineer
PRO
0
170
Featured
See All Featured
Gamification - CAS2011
davidbonilla
75
4.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
32
6.7k
We Have a Design System, Now What?
morganepeng
37
6k
Clear Off the Table
cherdarchuk
79
290k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
7
590
Statistics for Hackers
jakevdp
785
210k
Making the Leap to Tech Lead
cromwellryan
117
7.7k
Unsuck your backbone
ammeep
659
56k
VelocityConf: Rendering Performance Case Studies
addyosmani
317
22k
Rebuilding a faster, lazier Slack
samanthasiow
69
7.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
396
63k
The Brand Is Dead. Long Live the Brand.
mthomps
48
2.9k
Transcript
年700万円損するサーバレスの 認可システムをご紹介します!! 樋口修也
スピーカー フロントエンド,認証認可 2019年 東京のIT企業に新卒入社 2020年 コープさっぽろへ転職し札幌へ 2022年 情報安全確保支援士 ダブルダッチ,ダンス,筋トレ 暗号技術入門(結城浩)
樋口修也(25) 担当: 経歴: 趣味: 愛読書:
聞いたことはあるはず? 認証・認可とは何か?
定義: 認証・認可とは • 認証とは ◦ 端末の使用者が誰であるかを明確にすること ▪ トークンを発行すること • 認可とは
◦ 誰に何をして良いかを署名の検証等を用いて確認すること ▪ トークンの検証を行うこと ※OAuth2.0における厳密な定義は RFC6749 をご参照ください
認証のフロー トークン取得 認証 パスワードレス認証 1.メール アドレス入力 2.メールに 確認コード送信 3.確認コード 入力
メールアドレ スの所持情 報の確認
認可のフロー トークン取得 Auth0 公開鍵 API 検証 { Auth0上の ユーザー情報 }
認可 DB eykihidjfrkovki.eyujioknchuj glvpjnadfdtgdddfadcvdfgdaf edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー Auth0上の ユーザー情報 Base64 エンコード 認証 user_id トークン(jwt)を認可する時の 典型パターン
認可の最大のポイント トークン取得 Auth0 公開鍵 API 検証 { Auth0上の ユーザー情報 }
認可 DB eykihidjfrkovki.eyujioknchuj glvpjnadfdtgdddfadcvdfgdaf edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー Auth0上の ユーザー情報 Base64 エンコード 認証 user_id このユーザーIDをどこ から取得するか?
✖クライアントからuser_idを渡す トークン取得 Auth0 公開鍵 API 検証 { Auth0上の ユーザー情報 }
認可 DB eykihidjfrkovki.eyujioknchuj glvpjnadfdtgdddfadcvdfgdaf edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー Auth0上の ユーザー情報 Base64 エンコード 認証 user_id トークンさえ手に入れ ば誰にでもなり済ます ことができてしまう post { user_id:xxx } post { user_id:xxx } { user_id:yyy }
◯ Auth0から付与されるuser_idを使う トークン取得 Auth0 公開鍵 API 検証 Auth0上の ユーザー情報 {
user_id:xxxx } 認可 DB eykihidjfrkovki.eyujioknchuj glvpjnadfdtgdddfadcvdfgdaf edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー Auth0上の ユーザー情報 { user_id:xxx } Base64 エンコード 認証 user_id トークンを改竄した場 合、署名の検証で弾 かれるのでなり済ま すことができない { user_id:yyy } トークンを発行した相 手を確かめることで、 「誰に何をして良い か」制御できる
課題: Auth0から付与されるuser_idを使う トークン取得 Auth0 公開鍵 API 検証 Auth0上の ユーザー情報 {
user_id:xxxx } 認可 DB eykihidjfrkovki.eyujioknchuj glvpjnadfdtgdddfadcvdfgdaf edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー Auth0上の ユーザー情報 { user_id:xxx } Base64 エンコード 認証 user_id DB上でAuth0のユー ザーIDがキーになっ ている必要がある
課題: 異なるuser_idの具体例 トークン取得 Auth0 公開鍵 API 検証 Auth0上の ユーザー情報 {
user_id:e4ak8 } 認可 DB eykihidjfrkovki.eyujioknchuj glvpjnadfdtgdddfadcvdfgdaf edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー Auth0上の ユーザー情報 { user_id:e4ak8 } Base64 エンコード 認証 user_id: 078562 レガシーシステムを Auth0へマイグレー ションした場合レガ シーなシステムの user_idが必要 レガシーシステム のuser_idとAuth0 のuser_idの紐付 きが課題
課題: 複数APIあるとレガシーidの管理が大変 トークン取得 ZZZ事業部 API 検証 Auth0上の ユーザー情報 { user_id:e4ak8
} DB eykihidjfrkovki.eyujioknchuj glvpjnadfdtgdddfadcvdfgdaf edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー Auth0上の ユーザー情報 { user_id:e4ak8 } Base64 エンコード 認証 user_id: 078562 YYY事業部 API 検証 Auth0上の ユーザー情報 { user_id:e4ak8 } DB user_id: 078562 XXX事業部 API 検証 Auth0上の ユーザー情報 { user_id:e4ak8 } DB user_id: 078562 各DBに紐付きテーブ ルを持たせると変更 時に全部更新する必 要がある user_id: 099568 user_id: 099568 user_id: 099568
△ 認可専用のAPIを作成する トークン取得 Auth0 公開鍵 API 認可 DB eykihidjfrkovki.eyujioknchuj glvpjnadfdtgdddfadcvdfgdaf
edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー Auth0上の ユーザー情報 { user_id:e4ak8 } Base64 エンコード 認証 認可用 API Auth0上の ユーザー情報 { user_id:e4ak8 } 検証 DB { auth0_id:e4ak8, user_id: 078562 } { user_id: 078562 } user_id: 078562
課題: 認可APIの集中負荷 トークン取得 Auth0 公開鍵 XXX事業部 API 認可 DB eykihidjfrkovki.eyujioknchuj
glvpjnadfdtgdddfadcvdfgdaf edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー Auth0上の ユーザー情報 { user_id:e4ak8 } Base64 エンコード 認証 認可用 API Auth0上の ユーザー情報 { user_id:e4ak8 } 検証 DB { auth0_id:e4ak8, user_id: 078562 } user_id: 078562 YYY事業部 API ZZZ事業部 API リクエスト毎にAPI を飛ばすので負荷 が集中
認可APIコスト計算 トークン取得 Auth0 公開鍵 XXX事業部 API 認可 DB eykihidjfrkovki.eyujioknchuj glvpjnadfdtgdddfadcvdfgdaf
edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー Auth0上の ユーザー情報 { user_id:e4ak8 } Base64 エンコード 認証 認可用 API Auth0上の ユーザー情報 { user_id:e4ak8 } 検証 DB { auth0_id:e4ak8, user_id: 078562 } user_id: 078562 YYY事業部 API ZZZ事業部 API 想定コール数: 10億 (月間) API Gateway 予測費用: 468,250円 計算式: 想定コール数/計算単位*コスト($)*ドル円変換 (300,000,000/1,000,000*4.25*125+ 700,000,000/1,000,000*3.53*125) Lambda 予測費用: 25,000円 計算式: 想定コール数/計算単位*コスト($)*ドル円変換 1,000,000,000/1,000,000*0.2*125 ※メモリは省略 その他(Cloudwatch,DynamoDBなど) 予測費用: 97,650円 計算式: APIgateway+Lambdaの予測費用*0.2 月間予測費用: 590,900円 年間予測費用: 7,090,800円
認可APIコスト計算 Auth0 公開鍵 XXX事業部 API 認可 DB 認証 認可用 API
Auth0上の ユーザー情報 { user_id:e4ak8 } 検証 DB { auth0_id:e4ak8, user_id: 078562 } user_id: 078562 YYY事業部 API ZZZ事業部 API 認可APIをなくすことが できれば丸っとこれを 削除することができる 700万円/年
◯ Auth0上のmetadataにレガシーidも持たせる トークン取得 認可 eykihidjfrkovki.eyujioknchuj glvpjnadfdtgdddfadcvdfgdaf edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー
Auth0上の ユーザー情報 { user_id:e4ak8, mebber_id: 078562 } 認証 ZZZ事業部 API 検証 Auth0上の ユーザー情報 { user_id:e4ak8, mebber_id: 078562 } DB user_id: 078562 Auth0 公開鍵 改ざん防止もでき、 認可APIも不要とな る
◯ 複数APIもOKかつid変更一括対応可能 トークン取得 ZZZ事業部 API 検証 Auth0上の ユーザー情報 { user_id:e4ak8,
mebber_id: 078562 } DB eykihidjfrkovki.eyujioknchuj glvpjnadfdtgdddfadcvdfgdaf edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー Auth0上の ユーザー情報 { user_id:e4ak8, mebber_id: 078562 } 認証 user_id: 078562 YYY事業部 API 検証 Auth0上の ユーザー情報 { user_id:e4ak8, mebber_id: 078562 } DB user_id: 078562 XXX事業部 API 検証 Auth0上の ユーザー情報 { user_id:e4ak8, mebber_id: 078562 } DB user_id: 078562 id変更時にこ こを更新すれ ばいい
◯ トークン(jwt)の認可は各APIでできるようにするとお得 トークン取得 認可 eykihidjfrkovki.eyujioknchuj glvpjnadfdtgdddfadcvdfgdaf edfertgajkhhijdkaihio.ikhhbk cjjkkfunmgloj 署名 ヘッダー
Auth0上の ユーザー情報 { user_id:e4ak8, mebber_id: 078562 } 認証 ZZZ事業部 API 検証 Auth0上の ユーザー情報 { user_id:e4ak8, mebber_id: 078562 } DB user_id: 078562 Auth0 公開鍵 認可専用のAPIを 作ってしまうとそこの コストと保守工数が 発生してしまう