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.3k
3
Share
年700万円損するサーバレスの 認可システムをご紹介します!!
認証はAuth0、認可するAPIはAWSを使った時にコスト面でのアンチパターンについて紹介します。
higuuu
August 04, 2022
More Decks by higuuu
See All by higuuu
副業で入ったけどタスクがないからPMっぽいことをした話
higuuu
0
280
もしも、 上司に鬼退治を命じられたら~プロジェクト計画編~
higuuu
0
720
フロントエンドが知って おきたいセキュリティについて
higuuu
1
1.2k
今年の抱負 81日でやり遂げるぞー
higuuu
1
320
Testing rules for teams that do not write test code
higuuu
1
270
コードレビューで 開発が加速した話
higuuu
0
780
SPAのサイトを アプリのwebviewで利用するときのトークンの渡し方
higuuu
0
2.5k
Other Decks in Technology
See All in Technology
Vision Banana: Image Generators are Generalist Vision Learners
kzykmyzw
0
380
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.6k
Every Conversation Counts
kawaguti
PRO
0
220
AI時代に、 データアナリストがデータエンジニアに異動して
jackojacko_
0
840
Tachikawa.any 運営挨拶
daitasu
0
170
2026-05-14 要件定義からソース管理まで!IBM Bob基礎ハンズオン
yutanonaka
0
150
100マイクロサービスのTerraform/Kubernetes管理地獄から抜け出すためのAI活用術
markie1009
0
150
Oracle Cloud Infrastructure presents managed, serverless MCP Servers for Oracle AI Database
thatjeffsmith
0
280
カオナビに Suspenseを導入するまで / The Road to Suspense at kaonavi
kaonavi
1
450
SREの仕事は「壊さないこと」ではなくなった 〜自律化していくシステムに、責任と判断を与えるという価値〜 / 20260515 Naoki Shimada
shift_evolve
PRO
1
150
ボトムアップ限界を越える - 20チームを束る "Drive Map" / Beyond Bottom-Up: A 'Drive Map' for 20 Teams
kaonavi
0
210
雑談は、センサーだった
bitkey
PRO
2
250
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
240
Designing Powerful Visuals for Engaging Learning
tmiket
1
360
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.6k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Between Models and Reality
mayunak
3
290
Believing is Seeing
oripsolob
1
120
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
200
Faster Mobile Websites
deanohume
310
31k
Building Adaptive Systems
keathley
44
3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
820
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
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を 作ってしまうとそこの コストと保守工数が 発生してしまう