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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
「コーディング」しない人のための Claude Code 入門 ChatGPT の次の一歩 — 業務に組み込む 育成・共有・自動化
rfdnxbro
2
1.1k
oracle-to-databricks-migration-with-llm-and-dbt
casek
1
420
運用を見据えたAIエージェント設計実践
amacbee
0
2.2k
個人の発見を、組織の知恵に 〜生成AI活用を"探索"から"組織の仕組み"へ〜
kintotechdev
2
730
「気づいたら仕事が終わっている」バクラクAIエージェント本番運用の裏側 / layerx-bakuraku-aie2026
yuya4
17
8.6k
『家族アルバム みてね』における インシデント対応との向き合い方 / Approach incident response in Family Album
kohbis
2
300
美味しいスイスチーズを作ろう🧀🐭
taigamikami
1
220
オンコールの負荷軽減のためのBits Assistant 活用方法 / How to Use Bits Assistant to Reduce the Workload on On-Call Staff
sms_tech
1
380
React、まだ楽しくて草
uhyo
7
3.9k
AI駆動開発でなんでもハンズオン環境をつくってみた
yoshimi0227
0
200
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development
yoshidashingo
1
320
AI駆動開発が変える、大規模開発の前提 ーHuman in the Loop から Human on the Loop へ / AIE2026
visional_engineering_and_design
2
1.9k
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
0
960
The Mindset for Success: Future Career Progression
greggifford
PRO
0
350
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
240
Tell your own story through comics
letsgokoyo
1
940
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
130
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
720
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
820
Making the Leap to Tech Lead
cromwellryan
135
9.9k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
680
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
720
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.6k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
130
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を 作ってしまうとそこの コストと保守工数が 発生してしまう