このドキュメントでは、ウェブサイトで WAF 用 reCAPTCHA を Google Cloud Armor と統合する方法について説明します。
統合を完了するには、WAF 用 reCAPTCHA の 1 つ以上の機能を実装し、Google Cloud Armor セキュリティ ポリシーを構成する必要があります。
始める前に
reCAPTCHA API を有効にします。
WAF 用 reCAPTCHA の機能を実装してウェブサイトを保護する方法を計画します。
- ユースケースに最も適した WAF 機能を 1 つ以上選択します。
- 保護するページと、そのページで実装する WAF 機能のタイプを特定します。
WAF 用 reCAPTCHA の機能を実装する
要件に応じて、1 つのアプリケーションで WAF 用 reCAPTCHA の 1 つ以上の機能を使用できます。
1 つ以上の機能を使用する場合は、これらの機能ごとに reCAPTCHA キーを作成し、アプリケーションで使用する必要があります。たとえば、reCAPTCHA アクション トークンと reCAPTCHA による確認ページを使用する場合は、アクション トークンキーと確認ページキーを作成してアプリケーションで使用する必要があります。
reCAPTCHA アクション トークンを実装する
アクション トークンを生成するには、reCAPTCHA をウェブページで実行する必要があります。checkout
などのユーザー アクションを保護する必要がある場合、reCAPTCHA がアクション トークンを生成したら、事前定義されたリクエスト ヘッダーにアクション トークンを添付します。デフォルトでは、アクション トークンは 30 分間有効ですが、トラフィックによって異なる場合があります。トークンの有効期限が切れる前に、アクション トークンを事前定義されたリクエスト ヘッダーに添付する必要があります。これにより、Google Cloud Armor がトークン属性を評価できます。
reCAPTCHA アクション トークンを実装するには、次の手順を実行します。
ウェブサイトのアクション トークンキーを作成します。
Console
Google Cloud コンソールで、[reCAPTCHA] ページに移動します。
ページの上部にあるプロジェクト セレクタにリソース名が表示されていることを確認します。
プロジェクトの名前が表示されない場合は、リソース セレクタをクリックしてプロジェクトを選択します。
- [鍵を作成] をクリックします。
- [表示名] フィールドに、キーの表示名を入力します。
- WAF 用 reCAPTCHA キーを作成するプラットフォームに応じて、適切なアクションを実行します。
- [プラットフォーム タイプを選択] メニューから、[ウェブサイト] を選択します。
[ドメインリスト] セクションが表示されます。
-
お使いのウェブサイトのドメイン名を入力してください。
- [ドメインリスト] セクションで、[ドメインを追加] をクリックします。
- [ドメイン] フィールドにドメインの名前を入力します。
省略可: ドメインを追加するには、[ドメインを追加] をクリックし、[ドメイン] フィールドに別のドメインの名前を入力します。最大 250 個のドメインを追加できます。
ウェブサイトの場合、reCAPTCHA キーは、指定したドメインとサブドメインに固有のものです。複数のドメインからウェブサイトを提供する場合は、複数のドメインを指定できます。あるドメイン(たとえば
examplepetstore.com
)を指定すると、そのサブドメイン(たとえばsubdomain.examplepetstore.com
)を指定する必要はありません。
- [ウェブ アプリケーション ファイアウォール(WAF)、ドメインの所有権の証明、AMP ページ、本人確認] セクションを展開します。
- [ウェブ アプリケーション ファイアウォール(WAF)] 切り替えをオンにします。
[機能] メニューから [アクション トークン] を選択します。
-
省略可: [チェックボックスによる本人確認を使用する] をオンにします。
- [鍵を作成] をクリックします。
新しく作成された鍵は、[reCAPTCHA のキー] ページにリストされています。
gcloud
reCAPTCHA キーを作成するには、gcloud recaptcha keys create コマンドを使用します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- DISPLAY_NAME: キーの名前。通常はサイトの名前です。
- INTEGRATION_TYPE: 統合の種類
score
またはcheckbox
を指定します。 - DOMAIN_NAME: キーの使用を許可されたウェブサイトのドメインまたはサブドメイン。
複数のドメインをカンマ区切りのリストとして指定します。 省略可:
--allow-all-domains
を指定して、ドメインの所有権の証明を無効にします。サイトの制限はないため、ドメインの所有権の証明の無効化はセキュリティ リスクとなります。したがって、reCAPTCHA キーは誰でもアクセスして使用できます。
- WAF_FEATURE: WAF 機能の名前。
action-token
を実行します。 - WAF_SERVICE: WAF サービス プロバイダの名前。
Google Cloud Armor に
CA
を指定します。
gcloud recaptcha keys create コマンドを実行します。
Linux、macOS、Cloud Shell
gcloud recaptcha keys create \ --web \ --display-name=DISPLAY_NAME \ --integration-type=INTEGRATION_TYPE \ --domains=DOMAIN_NAME \ --waf-feature=WAF_FEATURE \ --waf-service=WAF_SERVICE
Windows(PowerShell)
gcloud recaptcha keys create ` --web ` --display-name=DISPLAY_NAME ` --integration-type=INTEGRATION_TYPE ` --domains=DOMAIN_NAME ` --waf-feature=WAF_FEATURE ` --waf-service=WAF_SERVICE
Windows(cmd.exe)
gcloud recaptcha keys create ^ --web ^ --display-name=DISPLAY_NAME ^ --integration-type=INTEGRATION_TYPE ^ --domains=DOMAIN_NAME ^ --waf-feature=WAF_FEATURE ^ --waf-service=WAF_SERVICE
レスポンスには、新しく作成された reCAPTCHA キーが含まれます。
REST
キーの種類と統合タイプに関する API リファレンス情報については、鍵と統合タイプをご覧ください。リクエストのデータを使用する前に、次のように置き換えます。
- DISPLAY_NAME: キーの名前。通常はサイトの名前です。
- INTEGRATION_TYPE: 統合の種類
score
またはcheckbox
を指定します。 - DOMAIN_NAME: キーの使用を許可されたウェブサイトのドメインまたはサブドメイン。
複数のドメインをカンマ区切りのリストとして指定します。 省略可:
--allow-all-domains
を指定して、ドメインの所有権の証明を無効にします。サイトの制限はないため、ドメインの所有権の証明の無効化はセキュリティ リスクとなります。したがって、reCAPTCHA キーは誰でもアクセスして使用できます。
- WAF_FEATURE: WAF 機能の名前。
action-token
を実行します。 - WAF_SERVICE: WAF サービス プロバイダの名前。
Google Cloud Armor に
CA
を指定します。
HTTP メソッドと URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys
リクエストの本文(JSON):
{ "displayName": "DISPLAY_NAME", 'wafSettings': " { "wafService": "WAF_SERVICE", "wafFeature": "WAF_FEATURE" } "webSettings": { "allowedDomains": "DOMAINS", "integrationType": "TYPE_OF_INTEGRATION" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
{ "name": "projects/project-id/keys/7Ldqgs0UBBBBBIn4k7YxEB-LwEh5S9-Gv6QQIWB8m", "displayName": "DISPLAY_NAME, "webSettings": { "allowAllDomains": true, "allowedDomains": [ "localhost" ], "integrationType": "SCORE", }, "wafSettings": { "wafService": "CA", "wafFeature": "ACTION_TOKEN" } }
ウェブページの reCAPTCHA JavaScript を、作成したアクション トークン キーと統合します。手順については、アクション トークンキーの統合タイプに対応するドキュメントをご覧ください。
SCORE
統合タイプについては、スコアベース キーをフロントエンドに統合するをご覧ください。CHECKBOX
統合タイプについては、フロントエンドで reCAPTCHA ウィジェットをレンダリングするをご覧ください。
reCAPTCHA からトークンを受信したら、次の形式の事前定義されたリクエスト ヘッダーにトークンを添付します。
X-Recaptcha-Token: value-of-your-action-token
XHR、Ajax、Fetch API などの言語および Fetch API を使用して、事前定義されたリクエスト ヘッダーにトークンを添付できます。
次のサンプル スクリプトでは、JavaScript と XHR を使用して、
execute
アクションを保護し、事前定義されたリクエスト ヘッダーにトークンを添付する方法を示します。<script> src="https://www.google.com/recaptcha/enterprise.js?render=ACTION_TOKEN_KEY"></script> <script> function onSuccess(action_token) { const xhr = new XMLHttpRequest(); xhr.open('GET','YOUR_URL', false); // Attach the action-token to the predefined request header xhr.setRequestHeader("X-Recaptcha-Token", action_token); xhr.send(null); } function onError(reason) { alert('Response promise rejected: ' + reason); grecaptcha.enterprise.ready(function () { document.getElementById("execute-button").onclick = () => { grecaptcha.enterprise.execute('ACTION_TOKEN_KEY', { }).then(onSuccess, onError); }; }); } </script>
reCAPTCHA セッション トークンを実装する
reCAPTCHA JavaScript は、評価後に reCAPTCHA セッション トークンをエンドユーザーのブラウザの Cookie として設定します。エンドユーザーのブラウザには Cookie が添付され、reCAPTCHA JavaScript がアクティブである限り、その Cookie は更新されます。
セッション トークンを Cookie として提供するには、次の要件を満たすウェブページの少なくとも 1 つにセッション トークン キーをインストールします。
- このウェブページは、保護の必要なページの前にエンドユーザーが閲覧するページである必要があります。たとえば、購入手続きページを保護するには、セッション トークン キーをホームページまたは商品ページにインストールします。
- ウェブページが Google Cloud Armor セキュリティ ポリシーで保護されます。
この Cookie を使用すると、エンドユーザーの後続のリクエストや特定のドメインでのページの読み込みを保護できます。セッション トークンはデフォルトで 30 分間有効です。ただし、エンドユーザーがセッション トークンを実装したページにとどまる場合、reCAPTCHA はセッション トークンを定期的に更新して期限切れにならないようにします。
reCAPTCHA で保護する必要がある各ページにセッション トークンをインストールします。すべてのページを reCAPTCHA で保護し、Google Cloud Armor ルールを使用して、エンドユーザーが最初に閲覧するページを除くすべてのページにアクセス権を適用することをおすすめします。
reCAPTCHA セッション トークンの例を次に示します。recaptcha-ca-t=value-of-your-session-token;domain=domain;expires=expiration_time
reCAPTCHA セッション トークンを実装するには、次の手順を行います。
ウェブサイトのセッション トークンキーを作成します。
Console
Google Cloud コンソールで、[reCAPTCHA] ページに移動します。
ページの上部にあるプロジェクト セレクタにリソース名が表示されていることを確認します。
プロジェクトの名前が表示されない場合は、リソース セレクタをクリックしてプロジェクトを選択します。
- [鍵を作成] をクリックします。
- [表示名] フィールドに、キーの表示名を入力します。
- WAF 用 reCAPTCHA キーを作成するプラットフォームに応じて、適切なアクションを実行します。
- [プラットフォーム タイプを選択] メニューから、[ウェブサイト] を選択します。
[ドメインリスト] セクションが表示されます。
-
お使いのウェブサイトのドメイン名を入力してください。
- [ドメインリスト] セクションで、[ドメインを追加] をクリックします。
- [ドメイン] フィールドにドメインの名前を入力します。
省略可: ドメインを追加するには、[ドメインを追加] をクリックし、[ドメイン] フィールドに別のドメインの名前を入力します。最大 250 個のドメインを追加できます。
ウェブサイトの場合、reCAPTCHA キーは、指定したドメインとサブドメインに固有のものです。複数のドメインからウェブサイトを提供する場合は、複数のドメインを指定できます。あるドメイン(たとえば
examplepetstore.com
)を指定すると、そのサブドメイン(たとえばsubdomain.examplepetstore.com
)を指定する必要はありません。
- [ウェブ アプリケーション ファイアウォール(WAF)、ドメインの所有権の証明、AMP ページ、本人確認] セクションを展開します。
- [ウェブ アプリケーション ファイアウォール(WAF)] 切り替えをオンにします。
[機能] メニューから [セッション トークン] を選択します。
- 省略可: [ドメインの所有権の証明を無効化] をオンにします。
サイトの制限はないため、ドメインの所有権の証明の無効化はセキュリティ リスクとなります。したがって、reCAPTCHA キーは誰でもアクセスして使用できます。
- [鍵を作成] をクリックします。
新しく作成された鍵は、[reCAPTCHA のキー] ページにリストされています。
gcloud
reCAPTCHA キーを作成するには、gcloud recaptcha keys create コマンドを使用します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- DISPLAY_NAME: キーの名前。通常はサイトの名前です。
- INTEGRATION_TYPE: 統合の種類
score
を実行します。 - DOMAIN_NAME: キーの使用を許可されたウェブサイトのドメインまたはサブドメイン。
複数のドメインをカンマ区切りのリストとして指定します。 省略可:
--allow-all-domains
を指定して、ドメインの所有権の証明を無効にします。サイトの制限はないため、ドメインの所有権の証明の無効化はセキュリティ リスクとなります。したがって、reCAPTCHA キーは誰でもアクセスして使用できます。
- WAF_FEATURE: WAF 機能の名前。
session-token
を実行します。 - WAF_SERVICE: WAF サービス プロバイダの名前。
Google Cloud Armor に
CA
を指定します。
gcloud recaptcha keys create コマンドを実行します。
Linux、macOS、Cloud Shell
gcloud recaptcha keys create \ --web \ --display-name=DISPLAY_NAME \ --integration-type=INTEGRATION_TYPE \ --domains=DOMAIN_NAME \ --waf-feature=WAF_FEATURE \ --waf-service=WAF_SERVICE
Windows(PowerShell)
gcloud recaptcha keys create ` --web ` --display-name=DISPLAY_NAME ` --integration-type=INTEGRATION_TYPE ` --domains=DOMAIN_NAME ` --waf-feature=WAF_FEATURE ` --waf-service=WAF_SERVICE
Windows(cmd.exe)
gcloud recaptcha keys create ^ --web ^ --display-name=DISPLAY_NAME ^ --integration-type=INTEGRATION_TYPE ^ --domains=DOMAIN_NAME ^ --waf-feature=WAF_FEATURE ^ --waf-service=WAF_SERVICE
レスポンスには、新しく作成された reCAPTCHA キーが含まれます。
REST
キーの種類と統合タイプに関する API リファレンス情報については、鍵と統合タイプをご覧ください。リクエストのデータを使用する前に、次のように置き換えます。
- DISPLAY_NAME: キーの名前。通常はサイトの名前です。
- INTEGRATION_TYPE: 統合の種類
score
を実行します。 - DOMAIN_NAME: キーの使用を許可されたウェブサイトのドメインまたはサブドメイン。
複数のドメインをカンマ区切りのリストとして指定します。 省略可:
--allow-all-domains
を指定して、ドメインの所有権の証明を無効にします。サイトの制限はないため、ドメインの所有権の証明の無効化はセキュリティ リスクとなります。したがって、reCAPTCHA キーは誰でもアクセスして使用できます。
- WAF_FEATURE: WAF 機能の名前。
session-token
を実行します。 - WAF_SERVICE: WAF サービス プロバイダの名前。
Google Cloud Armor に
CA
を指定します。
HTTP メソッドと URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys
リクエストの本文(JSON):
{ "displayName": "DISPLAY_NAME", 'wafSettings': " { "wafService": "WAF_SERVICE", "wafFeature": "WAF_FEATURE" } "webSettings": { "allowedDomains": "DOMAINS", "integrationType": "TYPE_OF_INTEGRATION" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
{ "name": "projects/project-id/keys/7Ldqgs0UBBBBBIn4k7YxEB-LwEh5S9-Gv6QQIWB8m", "displayName": "DISPLAY_NAME, "webSettings": { "allowAllDomains": true, "allowedDomains": [ "localhost" ], "integrationType": "SCORE", }, "wafSettings": { "wafService": "CA", "wafFeature": "SESSION_TOKEN" } }
セッション トークン キーと
waf=session
を reCAPTCHA JavaScript に追加します。次のサンプル スクリプトは、セッション トークンをウェブページに実装する方法を示しています。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>reCAPTCHA WAF Session Token</title> <script src="https://www.google.com/recaptcha/enterprise.js?render=SESSION_TOKEN_KEY&waf=session" async defer></script> <body></body> </head> </html>
Implement a reCAPTCHA challenge page
When you implement a reCAPTCHA challenge page, reCAPTCHA redirects to an interstitial page where it determines if it's necessary to show a CAPTCHA challenge to a user. Therefore, CAPTCHA challenges might not be visible to all users.
To implement a reCAPTCHA challenge page, create a challenge-page key for your website.
Console
In the Google Cloud console, go to the reCAPTCHA page.
Verify that the name of your project appears in the resource selector at the top of the page.
If you don't see the name of your project, click the resource selector, then select your project.
- Click Create key.
- In the Display name field, enter a display name for the key.
- Depending on the platform for which you want to create reCAPTCHA keys for WAF, perform the appropriate action:
- From the Choose platform type menu, select Website.
- Expand the Web application firewall (WAF), Domain verification, AMP pages, and challenge
section.
- Turn on the Web application firewall (WAF) toggle.
From the Feature menu, select Challenge page.
- Turn on Disable domain verification.
When you disable domain verification for challenge-page keys, Google Cloud Armor verifies the domain.
- Click Create key.
The newly created key is listed on the reCAPTCHA keys page.
gcloud
To create reCAPTCHA keys, use the gcloud recaptcha keys create command.
Before using any of the command data below, make the following replacements:
- DISPLAY_NAME: Name for the key. Typically a site name.
- INTEGRATION_TYPE: Type of integration.
Specify
invisible
. - DOMAIN_NAME: Domains or subdomains of websites allowed to use
the key.
Specify
--allow-all-domains
. - WAF_FEATURE: Name of the WAF feature.
Specify
challenge-page
. - WAF_SERVICE: Name of the
WAF service provider.
Specify
CA
for Google Cloud Armor.
Execute the gcloud recaptcha keys create command:
Linux, macOS, or Cloud Shell
gcloud recaptcha keys create \ --web \ --display-name=DISPLAY_NAME \ --integration-type=INTEGRATION_TYPE \ --domains=DOMAIN_NAME \ --waf-feature=WAF_FEATURE \ --waf-service=WAF_SERVICE
Windows(PowerShell)
gcloud recaptcha keys create ` --web ` --display-name=DISPLAY_NAME ` --integration-type=INTEGRATION_TYPE ` --domains=DOMAIN_NAME ` --waf-feature=WAF_FEATURE ` --waf-service=WAF_SERVICE
Windows(cmd.exe)
gcloud recaptcha keys create ^ --web ^ --display-name=DISPLAY_NAME ^ --integration-type=INTEGRATION_TYPE ^ --domains=DOMAIN_NAME ^ --waf-feature=WAF_FEATURE ^ --waf-service=WAF_SERVICE
レスポンスには、新しく作成された reCAPTCHA キーが含まれます。
REST
キーの種類と統合タイプに関する API リファレンス情報については、鍵と統合タイプをご覧ください。リクエストのデータを使用する前に、次のように置き換えます。
- DISPLAY_NAME: キーの名前。通常はサイトの名前です。
- INTEGRATION_TYPE: 統合の種類
invisible
を実行します。 - DOMAIN_NAME: キーの使用を許可されたウェブサイトのドメインまたはサブドメイン。
--allow-all-domains
を実行します。 - WAF_FEATURE: WAF 機能の名前。
challenge-page
を実行します。 - WAF_SERVICE: WAF サービス プロバイダの名前。
Google Cloud Armor に
CA
を指定します。
HTTP メソッドと URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys
リクエストの本文(JSON):
{ "displayName": "DISPLAY_NAME", 'wafSettings': " { "wafService": "WAF_SERVICE", "wafFeature": "WAF_FEATURE" } "webSettings": { "allowedDomains": "DOMAINS", "integrationType": "TYPE_OF_INTEGRATION" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys"
PowerShell
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name": "projects/project-id/keys/7Ldqgs0UBBBBBIn4k7YxEB-LwEh5S9-Gv6QQIWB8m", "displayName": "DISPLAY_NAME, "webSettings": { "allowAllDomains": true, "allowedDomains": [ "localhost" ], "integrationType": "INVISIBLE", }, "wafSettings": { "wafService": "CA", "wafFeature": "CHALLENGE_PAGE" } }
Google Cloud Armor セキュリティ ポリシーを構成する
WAF 用 reCAPTCHA の機能を実装したら、bot 管理用に Google Cloud Armor セキュリティ ポリシーを構成する必要があります。
reCAPTCHA 確認ページを実装する場合は、次のことを行う必要があります。
- 確認ページキーをセキュリティ ポリシーに関連付けます。
- リクエストを reCAPTCHA 評価にリダイレクトするようにセキュリティ ポリシー ルールを構成します。
reCAPTCHA アクション トークンまたはセッション トークンを実装した場合は、reCAPTCHA トークンを評価するセキュリティ ポリシー ルールを構成する必要があります。
Google Cloud Armor セキュリティ ポリシーを構成する前に、Google Cloud Armor の reCAPTCHA トークン属性について理解しておいてください。
Google Cloud Armor セキュリティ ポリシーを構成し、セキュリティ ポリシーで WAF 用の reCAPTCHA キーを使用する方法については、bot 管理のルールを構成するをご覧ください。
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-12-22 UTC。