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
200
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
260
Amazon Verified PermissionsのWorkshopをやってみた
ledsue
0
250
Other Decks in Technology
See All in Technology
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
1k
ブロックチェーン / Blockchain
ks91
PRO
0
120
FDE という解 ― 暗黙知と明示知をつなぐ、伴走型エンジニアリング ―
otanet
0
110
データ基盤をDataformで整えた話 〜 開発環境を添えて 〜
takapy
0
140
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
510
Amazon Bedrock AgentCore ワークショップ JAWS UG TOHOKU / amazon-bedrock-agentcore-workshop-jawsug-tohoku-2026
gawa
9
580
手塩にかけりゃいいってもんじゃない
ming_ayami
0
160
Reliability in the Age of AI: Engineering for AI Velocity
rrreeeyyy
0
120
LLMと共に進化するプロセスを目指して
ymatsuwitter
12
3.8k
Claude Code×Terraform IaC テンプレート駆動開発
itouhi
1
470
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
2.4k
Featured
See All Featured
Believing is Seeing
oripsolob
1
140
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
A better future with KSS
kneath
240
18k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
160
So, you think you're a good person
axbom
PRO
2
2.1k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
580
GraphQLとの向き合い方2022年版
quramy
50
15k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
ラッコキーワード サービス紹介資料
rakko
1
3.6M
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
550
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の設定変更で認証画面のセキュリティを強固にすることが できるので、使える状況であれば使わない手はないかと思います。