Hejdaの見る夢

一人前のエンジニアを目指して頑張ったこととかをつらつら書くブログ

Cloud Armor でお手軽に reCAPTCHA を実装してみる

概要

Google Cloud で reCAPTCHA Enterprise を気軽に実装出来る記事を読んだので試してみました ( 2022/1 時点では pre-GA ( Preview ) の機能です )

  • 元記事 ( 日本語翻訳 Ver )

cloud.google.com

  • 実際にやってみた Gif

https://raw.githubusercontent.com/iganari/zatsu/main/reCAPTCHA-Enterprise-on-Cloud-armor/movie/main.gif

注意点

この記事の内容は 2022/1 時点での情報になります ( 読んでいる時点では最新の情報では無い可能性があり、記事の内容と実際の仕様が変更している可能性があります )

また Cloud Armor を使った実装なので、 PATH 単位で reCAPTCHA をつけることになります ( よくある 特定の場所をクリックしたら reCAPTCHA が起動する では無いです )

この reCAPTCHA Enterprise は Google Cloud 以外にデプロイしているアプリケーションでも使用出来るようです

詳細: reCAPTCHA Enterprise のセットアップ方法の選択

https://cloud.google.com/recaptcha-enterprise/images/flowchart.png

準備

GCLB を使った Web アプリを用意しておきます

以下のハンズオンを利用して以下のような Web アプリを事前に用意しておきました

Hands On Serverless Network Endpoint Group

https://raw.githubusercontent.com/iganari/handson-serverless-neg/main/multi-serverless-application/_img/neg-serverless-00.png

公式ドキュメント

この記事の操作などは以下の公式ドキュメントを参考にして実行しています

cloud.google.com

環境変数を用意しておく

export _gcp_pj_id='Your GCP Project ID'
export _common='check-serverless-neg'
export _region='asia-northeast1'

API の有効化

  • 自分の GCP Project 内で reCAPTCHA Enterprise の API の有効化します
gcloud beta services enable recaptchaenterprise.googleapis.com --project ${_gcp_pj_id}
  • 有効化出来ているかの確認します
gcloud services list --enabled --project ${_gcp_pj_id} | grep recaptchaenterprise

Cloud Armor とそのルールを作成

  • Cloud Armor を作成します
gcloud beta compute security-policies create ${_common} --project ${_gcp_pj_id}
  • Cloud Armor 内のルールを作成します
gcloud beta compute security-policies rules create 1000 \
  --security-policy ${_common} \
  --expression "request.path.matches('/app')" \
  --action redirect \
  --redirect-type google-recaptcha \
  --project ${_gcp_pj_id}
  • ルールの確認します
    • ローカルに吐き出します
gcloud beta compute security-policies export ${_common} --file-name=${_common}.json --file-format=json --project ${_gcp_pj_id}
cat ${_common}.json

Cloud Armror をアタッチ

  • App Engine 用の Backend Service check-serverless-neg-backend-service-app に Cloud Armor を設定します
gcloud compute backend-services update check-serverless-neg-backend-service-app \
  --security-policy ${_common} \
  --global \
  --project ${_gcp_pj_id}

---> 設定はこれで完了です :)

Web ブラウザで確認する

ブラウザにて

  1. TOP ページ ( / ) を確認
  2. Functions の URL ( /func ) を確認
  3. Cloud Run の URL ( /run ) を確認
  4. App Engine の URL ( /app ) を確認 ---> reCAPTCHA Enterprise にリダイレクトしてリクエストを評価する
  5. Cloud Run の URL ( /run ) を確認
  6. App Engine の URL ( /app ) を確認 ---> 先程 reCAPTCHA でリクエストを評価しているので次は直ぐに表示される

https://raw.githubusercontent.com/iganari/zatsu/main/reCAPTCHA-Enterprise-on-Cloud-armor/movie/main.gif

https://raw.githubusercontent.com/iganari/zatsu/main/reCAPTCHA-Enterprise-on-Cloud-armor/photo/main.png

---> 意図した通りに実装することが出来ました :)

まとめ

Cloud Armor のルール 1つ追加するだけで、自分のサイトに reCAPTCHA を実装することが出来ました :)

他にも reCAPTCHA Enterprise を実装する方法があるので、自分のサイトに reCAPTCHA を設定したいと考えた場合は是非検討してみてください ;)

cloud.google.com

Have fan !! :)