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
3
1.2k
年700万円損するサーバレスの 認可システムをご紹介します!!
認証はAuth0、認可するAPIはAWSを使った時にコスト面でのアンチパターンについて紹介します。
higuuu
August 04, 2022
Tweet
Share
More Decks by higuuu
See All by higuuu
副業で入ったけどタスクがないからPMっぽいことをした話
higuuu
0
240
もしも、 上司に鬼退治を命じられたら~プロジェクト計画編~
higuuu
0
650
フロントエンドが知って おきたいセキュリティについて
higuuu
1
1.1k
今年の抱負 81日でやり遂げるぞー
higuuu
1
290
Testing rules for teams that do not write test code
higuuu
1
230
コードレビューで 開発が加速した話
higuuu
0
720
SPAのサイトを アプリのwebviewで利用するときのトークンの渡し方
higuuu
0
2.2k
Other Decks in Technology
See All in Technology
Devin(Deep) Wiki/Searchの活用で変わる開発の世界観/devin-wiki-search-impact
tomoki10
0
310
In Praise of "Normal" Engineers (LDX3)
charity
2
820
OpenTelemetry Collector internals
ymotongpoo
5
530
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
770
kotlin-lsp を Emacs で使えるようにしてみた / use kotlin-lsp in Emacs
nabeo
0
150
型システムを知りたい人のための型検査器作成入門
mame
15
3.7k
JSX - 歴史を振り返り、⾯⽩がって、エモくなろう
pal4de
2
100
新規プロダクト開発、AIでどう変わった? #デザインエンジニアMeetup
bengo4com
0
450
Workflows から Agents へ ~ 生成 AI アプリの成長過程とアプローチ~
belongadmin
3
150
Tenstorrent 開発者プログラム
tenstorrent_japan
0
310
VCpp Link and Library - C++ breaktime 2025 Summer
harukasao
0
150
Securing your Lambda 101
chillzprezi
0
260
Featured
See All Featured
A better future with KSS
kneath
239
17k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
How to train your dragon (web standard)
notwaldorf
92
6.1k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Balancing Empowerment & Direction
lara
1
290
Bash Introduction
62gerente
614
210k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
780
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
4
130
BBQ
matthewcrist
89
9.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Site-Speed That Sticks
csswizardry
10
630
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を 作ってしまうとそこの コストと保守工数が 発生してしまう