「Amazon Cognito」とは
「Amazon Cognito」は、Webアプリケーションやモバイルアプリケーションの認証、許可、ユーザ管理をしてくれるサービスです。
アプリユーザは、Cognitoのユーザディレクトリである「ユーザプール」を通じて直接サインインしたり、サードパーティーのIDプロバイダー(IdP) を通じて連携してサインインすることもできます。
まとめると、Cognitoを使うことで下記のようなメリットがあります。
・外部IDプロバイダーを介してユーザを認証することもできる
・AWS内のアプリケーションのバックエンドリソースにアクセスするための一時的な認証情報を付与できる
Cognitoが提供する基本的な機能については下記のブログエントリを参照ください。
Cognitoには「アカウントロック機能」はある?
Webアプリやモバイルアプリのセキュリティ要件として「アカウントロック(ロックアウト)機能」が必要な場合があります。
「アカウントロック」とは、銀行やECサイトなどのログインが必要なシステムで(悪意のある第三者の不正ログインを防ぐために)何度もログインに失敗すると一時的にログイン不能にされちゃうアレですね。
Cognitoを使ってユーザの認証機能を実装した場合、この「アカウントロック機能」は標準で提供されるのでしょうか?
AWSドキュメントを探してみてもそのような記載が見当たらなかったので、AWSサポートに問い合わせてみました。
Cognitoが提供するアカウントロック機能とその挙動
AWSサポートからの回答では「Cognitoには連続して認証が失敗するとアカウントをロックする機能がある」ということです。
内容を要約すると以下になります。
・Cognitoユーザプールでは、ユーザから連続した認証の失敗が発生すると、そのユーザのリクエストを制限してアカウントをロックする挙動がある
・アカウントがロックされている場合には「NotAuthorizedException」が発生し、メッセージとして “Password attempts exceeded” が返される
・ロックされる具体的な条件や期間については内部仕様のため公開していない
・サインインに失敗した回数に応じて指数関数的に期間が増加するような仕組みになっている
これからCognitoを使ってユーザ認証の仕組みやセキュリティ対策を検討される方のご参考になれば幸いです。
Amazon Cognitoの高度なセキュリティ(アドバンスドセキュリティ)については下記のエントリもご参考ください。
【Amazon Cognito】ユーザープールのアドバンスドセキュリティ機能(ASF:Advanced Security Feature)について