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
マネージドサービスで作る認証機能
Search
Takahiro Tanaka
May 03, 2023
Technology
0
110
マネージドサービスで作る認証機能
AWSのCognitoを使うことで、安全なWebアプリの認証機能を作ってみようという発表です。
Takahiro Tanaka
May 03, 2023
Tweet
Share
More Decks by Takahiro Tanaka
See All by Takahiro Tanaka
Amazon Verified PermissionsのWorkshopをやってみた
ledsue
0
150
Other Decks in Technology
See All in Technology
Dungeons and Dragons and Rails
joelq
0
150
uvを使ってストレスフリーな Python開発をしよう!
r74tech
0
260
成長をサポートするピープルマネジメントのやり方
sioncojp
9
1.4k
自らを知り外と繋がる、日経のエンジニア採用とDevRel活動/devreljp92
nishiuma
2
190
Microsoft for Startups Founders Hub_20240429 update
daikikanemitsu
1
2.5k
エンジニア候補者向け資料2024.04.24.pdf
macloud
0
3.4k
TailwindCSSでUIライブラリを作る際のハマりどころ
shuta13
0
140
サービス開発におけるVue3とTypeScriptの親和性について
tsukuha
1
140
同じ様なUIをiOS/Android間で合わせるヒントNo.2
fumiyasac0921
1
110
生成AIの変革の時代に、直近1年で直面した課題とその解決策
ktc_wada
1
800
リテール金融(キャッシュレス・ネット銀行・ネット証券)の競争環境と経済圏
8maki
0
1.8k
.NET Profiler in 2024.
kkamegawa
2
2.6k
Featured
See All Featured
Creatively Recalculating Your Daily Design Routine
revolveconf
211
11k
GraphQLの誤解/rethinking-graphql
sonatard
56
9.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.1k
Clear Off the Table
cherdarchuk
85
310k
Code Reviewing Like a Champion
maltzj
515
39k
Building an army of robots
kneath
300
41k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Producing Creativity
orderedlist
PRO
338
39k
A designer walks into a library…
pauljervisheath
201
23k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
34
6.1k
How to train your dragon (web standard)
notwaldorf
75
5.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
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の設定変更で認証画面のセキュリティを強固にすることが できるので、使える状況であれば使わない手はないかと思います。