みなさん、おはようございます。こんばんは以外の挨拶が新鮮な小寺です。 AWS WAF CaptchaがGAになったのが2022年6月でして、今度はJavaScript APIがサポートされました!

https://aws.amazon.com/about-aws/whats-new/2023/04/aws-waf-captcha-javascript-api-support/

どのようなアップデートなのかお伝えしたいと思います。

そもそもAWS WAF Captchaについて振り返る

まずは公式の内容です。
AWS WAF Captcha は、ウェブリクエストが AWS WAF で保護されたリソースに到達することが許可される前に、ユーザーがチャレンジを正常に完了することを要求することで、望ましくないボットトラフィックをブロックするのに役立ちます。

https://aws.amazon.com/jp/about-aws/whats-new/2022/06/aws-waf-captcha-generally-available/

すごく簡単にお伝えすると「わたしはロボットではありません」的なパズル(CAPTCHA)機能がAWS WAFでも対応するようになっています。
最初は英語版でだけでのリリースでしたが、今年2月には多言語対応もしています。ここでアラビア語、ドイツ語、スペイン語、フランス語、イタリア語、オランダ語、日本語、ポルトガル語、トルコ語、中国語 (簡体字) の 10 言語がサポートされるようになり、日本語対応もOKになりました。

そもそもCAPTCHAとは?

CAPTCHAは「Completely Automated Public Turing Test To Tell Computers and Humans Apart(コンピュータと人間を区別するための完全自動化された公開チューリングテスト)」の略で「キャプチャ」と発音します。

みなさんもインターネット上CAPTCHAおよびreCAPTCHAをよく見かけると思います。

CAPTCHAは画像の中に書いてある文字や数字を入力したり、画面上にある図形を特定の位置に移動させたり、人間が操作すると簡単にできるけど、プログラムには難しそうな操作をさせることによって「今、この画面を操作しているのは人間で、プログラムじゃないよね?」ってことを確認し、操作しているのがプログラムだったら先に進めないようにする仕組みです。

また、reCAPTCHAとよばれるGoogle社が提供する同様の仕組みもあります。
reCAPTCHAとは、CAPTCHと同様にAbotによるWebサイトへの攻撃を防ぐためのもので、お問い合わせフォームの送信画面やログイン画面で、「私はロボットではありません」の文言とともに表示されるチェックボックスを見たことがある方は多いのではないでしょうか。バージョンによっては、「reCAPTCHAで保護されています」の表示がされる場合もあります。

アップデート内容

今回のアップデート内容に移っていきましょう。
JavaScript APIを使用して Captchaワークフローでの制御をより強化できるようになりました。
ワークフローの制御??とは、今までのAWS WAF Captcha は Captcha対応させるため、アクセスされた方を別のページにリダイレクトする仕様でした。
本アップデートにより、開発者側で Captcha機能を既存の Web ページ (シングル ページ アプリケーション (SPA) など) に埋め込むことで、Captchaのカスタマーエクスペリエンスの向上を図ることができます。

確認してみた

(1)AWS WAFのコンソールから「Application integration」を選びます。

(2)「CATPCHA Integration」を選びます。WAF Captcha JS API の使用を開始できます。

(3)AWS アカウントごとに複数の API キーを生成できます。
各 API キーは最大 5 つのドメイン名で使用できるため、AWS アカウント内の WebACL 全体でキーを使用できます。

JavaScript タグをダウンロードを行い、ドキュメントに従って構成を完了させると、すべての APIキーが、サポートされているドメイン名とキーがCaptcha用のページに一覧表示されます。

まとめ

AWS WAF Captcha機能でJSがサポートされました。パズルを解くというのはユーザ側にとっては少し手間もあるので、開発側はカスタマイズが若干入りますが、有効な機能だなーと感じました。キーは毎回APIキーになってしまうんですね。。他にロールが出るといいなーと思うところではありますが、今後に注目していきたいと思います。