Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
マネージドサービスで作る認証機能
Search
Takahiro Tanaka
May 03, 2023
Technology
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
マネージドサービスで作る認証機能
AWSのCognitoを使うことで、安全なWebアプリの認証機能を作ってみようという発表です。
Takahiro Tanaka
May 03, 2023
More Decks by Takahiro Tanaka
See All by Takahiro Tanaka
脅威モデリングをやってみた
ledsue
0
300
Amazon Verified PermissionsのWorkshopをやってみた
ledsue
0
260
Other Decks in Technology
See All in Technology
「今盗んで、後で解く」に備える ― AWSのポスト量子暗号入門
yama3133
1
110
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
3
2.6k
人間はどの意思決定を手放せるのか
kawasima
15
8k
Mastering Agentic Development: Harness Engineering for Effective Coding Agents
konippi
1
350
30座EKS, 180次升級淬煉的EKS Upgrade Skill 的歷程
eric8230
0
210
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
4
710
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
270
時うどん〜Socket.getifaddrsで学ぶネットワーク編 / Tokiudon: The Socket.getifaddrs Edition
coe401_
4
230
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
1
3.2k
AIエージェントを最高のパートナーに育てる方法|評価と判断軸を育てる5つのステップ
koichiaoki
1
160
What the customer really needed
kawaguti
PRO
3
220
事業課題から技術的負債に向き合う
sansantech
PRO
2
2.3k
Featured
See All Featured
Everyday Curiosity
cassininazir
0
320
How to Ace a Technical Interview
jacobian
281
24k
The Cult of Friendly URLs
andyhume
79
7k
Building Applications with DynamoDB
mza
96
7.2k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Code Review Best Practice
trishagee
74
20k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
260
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
520
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
410
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
370
Transcript
JAWS-UG 名古屋 マネージドサービスで作る認証機能 2023年5月2日
自己紹介 名前:田中 隆博(すえぞう) ついったー:@led_suezou Note:https://note.com/ledsue 仕事:ユーザ系IT子会社にてインフラ構築、運用を担当
好きなAWSサービス:EC2、CDK
はじめに 今日お話しすること Webアプリケーションにおけるユーザ認証の難しい点 Cognitoを利用して解決できる課題
ログイン、ユーザ管理って面倒 OWASP Top10の中にも「A07 識別と認証の失敗」として、ユーザ認証に関する脆弱性がランクインして います。認証機能として、対応する必要がある課題として、以下のようなものが列挙されいます。 パスワードリスト攻撃、ブルートフォース攻撃などの自動化された攻撃への対応 弱いパスワード、良く使われるパスワードが使われないようにする
パスワードを亡失した場合のリセットプロセスの安全な実装 パスワード保存を適切なハッシュ化をして保存する。 多要素認証への対応
ログイン、ユーザ管理って面倒 OWASP Top10の中にも「A07 識別と認証の失敗」として、ユーザ認証に関する脆弱性がランクインして います。認証機能として、対応する必要がある課題として、以下のようなものが列挙されいます。 パスワードリスト攻撃、ブルートフォース攻撃などの自動化された攻撃への対応 弱いパスワード、良く使われるパスワードが使われないようにする
パスワードを亡失した場合のリセットプロセスの安全な実装 パスワード保存を適切なハッシュ化をして保存する。 多要素認証への対応 直接的なビジネスロジックではないので、注力して書きたい機能ではないが、 中途半端な実装をしてセキュリティ的な穴を作ると、後でひどい目を見る機能
よし!マネージドサービスに任せよう!! マネージドでこういった課題への対策を提供してくれるサービスとして「Amazon Cognito」が用意され ています。 次ページからCognitoで提供される機能を使って、以下の課題へどのように対応するかを説明します。 パスワードリスト攻撃やブルートフォース攻撃
弱いパスワードへの対策 安全なパスワードリセット方法
パスワードリスト攻撃、ブルートフォース攻撃への対策 パスワードリスト攻撃やブルートフォース攻撃に対して、Cognitoでは以下のような対策をすることが できます。 パスワードリスト攻撃 ブルートフォース攻撃 アプリケーションの統合>高度なセキュリティから「侵害さ れた認証情報の検出」や「アダプティブ認証」を利用して、 防御をすることができます。
標準機能として、サインインに5回失敗するとユーザを1秒間 ロックアウトし、その後、試行が1回失敗する都度、2倍にな り最大15分までロックアウト時間が延⾧されます。
弱いパスワードへの対策 Cognitoのユーザプールには、パスワードの追加要件を設定することが可能です。 Cognitoのデフォルトのパスワード要件は以下の通りです。 8文字以上、少なくとも1つの数字と1つの特殊文字が含まれ、大文字と小文字が混在していること 管理者が生成したパスワードの有効期限は7日間
サインインエクスペリエンスのパスワードポリシーでカスタムが可能 パスワードの最小文字⾧は6文字以上、99文字以下。Cognitoの最大文字⾧は256文字 数字、特殊文字、英字の大文字、小文字
Amplifyでログイン画面を実装する 以下のAmplify SNS Workshopの導入部分「MVPを作ろう!」までを 実施すると、ログイン機能+DynamoDBに対しての書き込み機能 までが作れます。 https://amplify-sns.workshop.aws/ja/
作られるログイン画面は右のような画面になります。 この機能はAmplifyのAuthモジュールを利用して実装されています。 次ページ以降でAuthモジュールについて見てみましょう。
Amplifyで認証モジュール(Auth)を利用すると Amplifyで「add auth」を使って、認証モジュールを追加すると、以下のCloud Formantionスタックが Amplifyの初期スタックにネストする形で作成されます。
ネストされたスタックの中には 右のようにCognito関連のリソースがCound Formationのスタックとして展開されます。
Cognitoでのサインアップのフロー Cognitoを使ってサインアップ機能を実装する場合、以下のようなユーザ確認フローになります。 登録済 (未確認) 確認済 パスワード リセット が必要 強制
パスワード リセット 無効化 管理者による確認 Eメールor SMS による確認 サインアップ 無効化 有効化 パスワードの リセット ユーザをインポート 管理者がユーザを作成 Lambdaをトリガー (確認部分をカスタマイズできる)
??確認に必要なリソースがスタックにない?? Cloud Formationのスタックの中にはSESに関するリソースがないにも関わらず、確認メールがSESで送付 されている。 SNSロールはあるけど、SNSのトピックが作成された形跡がない。
CognitoのAPIとしてラッピングされている Cognitoのデベロッパーガイドを見てみると、ユーザ登録時には「ConfirmSignUp」APIを呼び出すことに よって、メールやSMSによるユーザ検証を実施します。 同様に「ConfirmForgotPassword」や「ResendConfirmationCode」といったAPIが用意され、パスワード亡 失時のユーザ確認や確認コードの再送などの操作が可能となっています。
まとめ マネージドなサービスを使うと安全なユーザ認証画面を比較的簡単に実装ができます。 最初から全部盛りにしていなくてもCognitoの設定変更で認証画面のセキュリティを強固にすることが できるので、使える状況であれば使わない手はないかと思います。