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
230
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
330
Amazon Verified PermissionsのWorkshopをやってみた
ledsue
0
260
Other Decks in Technology
See All in Technology
Sizing, Benchmarking and Performance Tuning Apache Flink Clusters
rmetzger
0
140
「AIチャットからもできないの?」と言われたら ~業務アプリをMCP対応するときの認証・認可の勘所
oidfj
0
250
Active Directory と Entra ID のむむむな関係
murachiakira
PRO
4
1.7k
視野はAIに、視座は人に / ai-for-breadth-humans-for-perspective
nkzn
6
3.2k
An Introduction to Context Ontology Accelerator (teaching AI agents what your data means)
inariku
PRO
1
200
「いつか使う」の「いつか」は来ない 〜AI駆動開発における「作らない」判断について〜
ikki0006
0
180
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
210
顧客合意を取りながら進めるAWSコスト削減の実践
optim
0
150
ゼロから作るWebアプリの新定番!?Amplify Gen 2 × AWS Blocksで実現する「開発速度とRDBの柔軟性のいいとこ取り」
amixedcolor
1
190
令和の今、あらためて IAM を考える。アクセスキーを「無くせない現実」との向き合い方
kazzpapa3
0
540
Kiro Crew 入門 (手を離しても進む仕事) | 目指せ Kiro マスター 11
inariku
PRO
4
650
Kiro Crew の Bot (続く役目を任せる窓口) | 目指せ Kiro マスター 12
inariku
PRO
2
350
Featured
See All Featured
Bash Introduction
62gerente
615
220k
The Language of Interfaces
destraynor
162
27k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1.1k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.3k
Why Our Code Smells
bkeepers
PRO
340
58k
The Invisible Side of Design
smashingmag
301
52k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
70
68k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
460
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
510
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の設定変更で認証画面のセキュリティを強固にすることが できるので、使える状況であれば使わない手はないかと思います。