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
210
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
270
Amazon Verified PermissionsのWorkshopをやってみた
ledsue
0
250
Other Decks in Technology
See All in Technology
データエンジニアこそ組織のオントロジーに向き合うべき — 問いに答えるAIから、事業を動かすAIへ
gappy50
7
2.9k
LLMリーダーボードアップデートに向けたAgentic Math_SWEのトレースについて
nejumi
0
180
「休む」重要さ
smt7174
7
1.8k
AWS環境のセキュリティ不安を解消した企業事例 ~よくある課題と対策を一挙公開~
asanoharuki
0
260
AI エージェント時代のデジタルアイデンティティ
fujie
2
1.3k
基調講演:人とAIをつなぐIoTの今と未来 ー 「フィジカル」と「デジタル」が出会うその先へ【SORACOM Discovery 2026】
soracom
PRO
0
370
DevOps Agentで運用判断をチーム資産にする~Agent InstructionsとAgent Skillを継続的に育てる~
fujioka6789
0
180
AI ネイティブな組織に Gemini Enterprise Agent Platform がなぜ必要なのか
asei
1
130
20260724 情シスAI #1 「全従業員をAIネイティブにする」ために情シスがやっていること(公開版)
frtckty
0
110
コンポーネント名には何を含めるべきなのか? / what-should-be-included-in-component-names
airrnot1106
0
200
データ活用研修 データマネジメント【MIXI 26新卒技術研修】
mixi_engineers
PRO
4
850
数値で見る Microsoft MVP 〜Spec Kit と GitHub Copilot Agent で作るデータ可視化ダッシュボード〜
yutakaosada
0
180
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
470
Code Reviewing Like a Champion
maltzj
528
40k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
380
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
A better future with KSS
kneath
240
18k
Claude Code のすすめ
schroneko
67
230k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Skip the Path - Find Your Career Trail
mkilby
1
170
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
YesSQL, Process and Tooling at Scale
rocio
174
15k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
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の設定変更で認証画面のセキュリティを強固にすることが できるので、使える状況であれば使わない手はないかと思います。