[アップデート] Amazon CognitoでAWS WAFが利用可能になりました

AWS WAFでCognitoユーザープールを早く安く簡単に保護できるようになりました。
2022.08.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

みなさん、こんにちは。

AWS事業本部コンサルティング部の芦沢(@ashi_ssan)です。

本日のアップデートにより、Amazon CognitoでAWS WAFが利用できるようになりました。

アップデート内容

このアップデートにより、AWS WAFのweb ACLにCognitoユーザープールを関連付けできるようになり、ユーザープールおよびホストされたUIをAWS WAFで簡単に保護することができます。

Amazon Cognitoは、認証情報の漏洩チェックや適応型認証など、公衆向けアプリケーションを保護するための組み込みの保護を提供しますが、AWS WAFを利用することでAmazon CognitoのユーザープールをWebベースの攻撃や不要なボットから保護することができるようになりました。

AWS WAFがリクエストを精査するエンドポイント

  • Hosted UI
    • ユーザープール認証と認証エンドポイントリファレンスにあるすべてのエンドポイントへのリクエスト
  • Public API operations
    • アプリから Amazon Cognito API へのリクエストで、認証に AWS クレデンシャルを使用しないもの。これには、InitiateAuth、RespondToAuthChallenge、GetUser などの API 操作が含まれます。AWS WAFの適用範囲であるAPI操作は、AWSクレデンシャルによる認証を必要としない。それらは未認証であるか、セッション文字列またはアクセストークンで認証される。

注意点

  • 1つのユーザープールに1つのWeb ACLを関連付けることができます。
  • リクエストの結果、AWS WAFが検査できる限界よりも大きなペイロードが発生する可能性があります。
  • AWS WAF Fraud Controlのアカウント乗っ取り防止(ATP)を使用するWeb ACLをAmazon Cognitoのユーザープールに関連付けることはできません。AWSマネージドルールのAWS-AWSManagedRulesATPRuleSethが使用しないようにしましょう。

やってみた

検証の準備

こちらのブログを参考にCognitoの検証環境を作成しました。

Congnitoのログイン認証画面が表示できました。

WAFの検証環境はこちらのブログのCloudFormationテンプレートを参考に作成しました。

WAF設定

AWS WAFマネジメントコンソールで作成したweb ACLのページに移動し、Associated AWS resourcesタブのAdd AWS resourcesをクリックします。

Amazon Cognito User PoolsというResource Typeが追加されていますね。

CognitoユーザープールのリソースIDを選択してAddをクリックします。

作成したユーザープールを関連付けできました。

ログイン認証画面へのリクエストがWAFで検査されるか確認する

再度Congnitoのログイン認証画面にアクセスしてみます。

AWS WAFのSample requestsにリクエストの履歴が出力されていることが確認できました。WAFで検査できているようです。

WAFでIP制限をしてみる

こちらのブログを参考に、IPアドレス制限をかけるルールをWAFルールに追加してみます。

ルールを追加しました。

設定したIPアドレス範囲以外からCongnitoのログイン画面にアクセスしたところ、403 Forbidden画面が表示されました。

Sample requestsにもBlockされたリクエストの履歴が出力されていることが確認できました。

最後に

このアップデートにより、AWS WAFを利用して安価で簡単にBot対策ができるようになるため、Cognitoを利用したWEBアプリケーションを運用中、もしくはこれから構築される方にとって非常に嬉しいと思います。

このブログが皆様のお役に立てれば幸いです。

以上、AWS事業本部コンサルティング部の芦沢(@ashi_ssan)でした。