Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
年700万円損するサーバレスの 認可システムをご紹介します!!
Search
higuuu
August 04, 2022
Technology
1.4k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
年700万円損するサーバレスの 認可システムをご紹介します!!
認証はAuth0、認可するAPIはAWSを使った時にコスト面でのアンチパターンについて紹介します。
higuuu
August 04, 2022
More Decks by higuuu
See All by higuuu
副業で入ったけどタスクがないからPMっぽいことをした話
higuuu
0
290
もしも、 上司に鬼退治を命じられたら~プロジェクト計画編~
higuuu
0
730
フロントエンドが知って おきたいセキュリティについて
higuuu
1
1.2k
今年の抱負 81日でやり遂げるぞー
higuuu
1
320
Testing rules for teams that do not write test code
higuuu
1
280
コードレビューで 開発が加速した話
higuuu
0
790
SPAのサイトを アプリのwebviewで利用するときのトークンの渡し方
higuuu
0
2.5k
Other Decks in Technology
See All in Technology
SO-101×VLAによる3色キューブのピック&プレース
abeja
0
150
ラジオの科学
frievea
0
280
新しい SLO が良い感じにハマっている話
z63d
5
2.1k
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
660
JavaScript 研修 (2026)
recruitengineers
PRO
1
460
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.5k
Redmine 7.0 新機能・機能強化解説(OSC2026京都ダイジェスト版)
vividtone
1
210
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
ホームラボ紹介
y_sera15
0
120
サイバー捜査員研修(後半)
nomizone
1
810
強化学習「理論」入門
enakai00
3
3.6k
Featured
See All Featured
Color Theory Basics | Prateek | Gurzu
gurzu
0
410
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
460
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
240
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
450
Done Done
chrislema
186
16k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
620
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
420
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を 作ってしまうとそこの コストと保守工数が 発生してしまう