将 reCAPTCHA for WAF 与 Akamai 集成

本文档介绍了如何将 reCAPTCHA for WAF 与 Akamai 集成。

如需完成集成,您必须实现 reCAPTCHA for WAF 的一项或多项功能,创建 reCAPTCHA 防火墙政策,并通过创建和配置 Akamai EdgeWorkers 服务与 Akamai 集成。

准备工作

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

    记下您的 Google Cloud 项目 ID,以备日后使用。

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the reCAPTCHA Enterprise API.

    Enable the API

  4. 创建用于身份验证的 API 密钥:

    1. 在 Google Cloud 控制台中,前往凭据页面。

      进入“凭据”页面

    2. 点击 创建凭据,然后选择 API 密钥
    3. 记录 API 密钥以备后用。

  5. 规划您希望如何实现 reCAPTCHA 的功能 WAF,可保护您的网站。

    1. 选择最适合您的使用情形的一项或多项 WAF 功能
    2. 确定要保护的网页。
    3. 选择您要在 特定网页
    4. 确定管理用户访问权限的条件。
    5. 了解 reCAPTCHA 防火墙政策组件及其属性 可帮助您创建 reCAPTCHA 防火墙政策。如需查看示例,请参阅 reCAPTCHA 防火墙政策示例
  6. 对于 Akamai 配置,请确保您拥有以下内容:

    1. 一个 Akamai 账号和应用的 Akamai 媒体资源

    2. 通过 Akamai Marketplace 访问 Akamai EdgeWorkers。

    3. 能够创建 EdgeWorker

  7. 下载适用于 Akamai 的 reCAPTCHA 软件包 recaptcha_akamai_client_0.0.2.tgz

实现 reCAPTCHA for WAF 的功能

根据您的要求,您可以使用 在单个应用中集成 reCAPTCHA for WAF。

如果您想使用多项功能,则必须为每项功能分别创建 reCAPTCHA 密钥,并在应用中使用这些密钥。例如,如果您 使用 reCAPTCHA 操作令牌和 reCAPTCHA 验证页面,那么您必须 创建操作令牌密钥和挑战页面密钥, 应用。

action-token

您的网页必须运行 reCAPTCHA 才能生成操作令牌。 reCAPTCHA 生成操作令牌后,您将操作令牌附加到预定义的 请求标头以保护任何用户操作,例如 checkout。默认情况下,操作令牌的有效期为 30 分钟,但可能会因流量而异。您必须在操作令牌到期之前将它附加到预定义的请求标头,使得 Akamai 可以评估令牌属性。

如需实现 reCAPTCHA 操作令牌,请执行以下操作:

  1. 为您的网站创建操作令牌密钥。

    gcloud

    如需创建 reCAPTCHA 密钥,请使用 gcloud recaptcha keys create 命令。

    在使用下面的命令数据之前,请先进行以下替换:

    • DISPLAY_NAME:密钥的名称。通常是网站名称。
    • INTEGRATION_TYPE:集成类型。 指定 scorecheckbox
    • DOMAIN_NAME:获准使用该密钥的网站的网域或子网域。

      以英文逗号分隔的列表形式指定多个网域。 可选:指定 --allow-all-domains 来停用域名验证。

      停用域名验证会带来安全风险,因为 因此您的 reCAPTCHA 密钥可供访问和使用 由任何人创建。

    • WAF_FEATURE:WAF 功能的名称。 指定 action-token
    • WAF_SERVICE: WAF 服务提供商。 为 Akamai 指定 akamai

    执行 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:集成类型。 指定 scorecheckbox
    • DOMAIN_NAME:获准使用该密钥的网站的网域或子网域。

      以英文逗号分隔的列表形式指定多个网域。 可选:指定 --allow-all-domains 来停用域名验证。

      停用域名验证会带来安全风险,因为 因此您的 reCAPTCHA 密钥可供访问和使用 由任何人创建。

    • WAF_FEATURE:WAF 功能的名称。 指定 action-token
    • WAF_SERVICE:WAF 服务提供商的名称。 为 Akamai 指定 akamai

    HTTP 方法和网址:

    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": "akamai",
    
      "wafFeature": "ACTION_TOKEN"
      
    
    }
    }
    
    

    记录您的操作令牌密钥以供日后使用。

  2. 在网页上集成 reCAPTCHA JavaScript 与操作令牌密钥, 创建项目。如需查看相关说明,请参阅与您的 Action-Token 键的集成类型对应的文档。
  3. 从 reCAPTCHA 收到令牌后,请将令牌附加到 预定义的请求标头,格式如下:
     X-Recaptcha-Token: value-of-your-action-token
    

    您可以使用 XHR、Ajax 或 Fetch API 等语言来附加令牌 预定义的请求标头

    以下示例脚本展示了如何保护 execute 操作并附加 使用 JavaScript + XHR 将令牌传递给预定义的请求标头:

      
      <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>
      
      

session-token

reCAPTCHA JavaScript 会将一个 reCAPTCHA 会话令牌设置为 最终用户的浏览器最终用户的浏览器会将 并刷新该 Cookie reCAPTCHA JavaScript 仍然有效。

如需以 Cookie 形式提供会话令牌,请在至少其中一个最终用户在访问需要保护的网页之前浏览的网页上安装会话令牌密钥。例如,如果您想保护结账页面,请在首页或商品页面上安装会话令牌密钥。

如需了解如何在网页上安装会话令牌密钥,请参阅将基于得分的密钥与前端集成

您可以使用此 Cookie 保护在特定网域中最终用户的后续请求和页面加载。会话令牌的有效期默认为 30 分钟。但是,如果最终用户留在实施 session-token, reCAPTCHA 会定期刷新会话令牌,以防发生会话令牌 避免过期。

在需要受 reCAPTCHA 保护的每个页面上安装会话令牌。 建议您使用 reCAPTCHA 保护每个网页,并使用 Google Cloud Armor 规则强制实施对所有网页(最终用户浏览的第一页除外)的访问权限。

以下是一个 reCAPTCHA 会话令牌示例:
   recaptcha-ca-t=value-of-your-session-token;domain=domain;expires=expiration_time

如需实现 reCAPTCHA 会话令牌,请执行以下操作:

  1. 为您的网站创建会话令牌密钥。

    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 服务提供商。 为 Akamai 指定 akamai

    执行 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 服务提供商的名称。 为 Akamai 指定 akamai

    HTTP 方法和网址:

    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": "akamai",
    
      "wafFeature": "SESSION_TOKEN"
    
    
    }
    }
    
    

    记录您的会话令牌密钥以备后用。

    如果您想从 Akamai 注入 reCAPTCHA JavaScript,请跳过 下一步,并配置 Akamai 媒体资源管理器中的媒体资源

  2. 将会话令牌密钥和 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>

挑战页面

实现 reCAPTCHA 质询页面后,reCAPTCHA 会重定向到插页式页面,在该页面中,reCAPTCHA 会确定是否有必要向用户显示人机识别系统质询。因此,并非所有用户都可以看到人机识别系统质询。

如需实现 reCAPTCHA 质询页面,请执行以下操作:

  1. 为您的网站创建挑战页密钥。

    gcloud

    如需创建 reCAPTCHA 密钥,请使用 gcloud recaptcha keys create 命令。

    在使用下面的命令数据之前,请先进行以下替换:

    • DISPLAY_NAME:密钥的名称。通常是网站名称。
    • INTEGRATION_TYPE:集成类型。 指定 invisible
    • DOMAIN_NAME:获准使用该密钥的网站的网域或子网域。 指定 --allow-all-domains
    • WAF_FEATURE:WAF 功能的名称。 指定 challenge-page
    • WAF_SERVICE:WAF 服务提供商的名称。 为 Akamai 指定 akamai

    执行 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:集成类型。 指定 invisible
    • DOMAIN_NAME:获准使用该密钥的网站的网域或子网域。 指定 --allow-all-domains
    • WAF_FEATURE:WAF 功能的名称。 指定 challenge-page
    • WAF_SERVICE:WAF 服务提供商的名称。 为 Akamai 指定 akamai

    HTTP 方法和网址:

    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": "akamai",
    
      "wafFeature": "CHALLENGE_PAGE"
      
    
    }
    }
    
    

    记录您的挑战页面密钥供稍后使用。

  2. 如需将用户重定向到 reCAPTCHA 质询页面并接收 reCAPTCHA 令牌,请在受保护的网页上使用 redirect 操作创建防火墙政策

快速

如需实现 reCAPTCHA WAF express protection,请创建 Express 键。

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. gcloud

    如需创建 reCAPTCHA 键,请使用 gcloud recaptcha keys create 命令。

    在使用下面的命令数据之前,请先进行以下替换:

    • DISPLAY_NAME:密钥的名称。通常是网站名称。
    • WAF_SERVICE: WAF 服务提供商。 为 Akamai 指定 akamai

    执行 gcloud recaptcha keys create 命令:

    Linux、macOS 或 Cloud Shell

    gcloud recaptcha keys create \
    --express \
    --display-name=DISPLAY_NAME  \
    --waf-service=WAF_SERVICE

    Windows (PowerShell)

    gcloud recaptcha keys create `
    --express `
    --display-name=DISPLAY_NAME  `
    --waf-service=WAF_SERVICE

    Windows (cmd.exe)

    gcloud recaptcha keys create ^
    --express ^
    --display-name=DISPLAY_NAME  ^
    --waf-service=WAF_SERVICE

    响应中包含新创建的 reCAPTCHA 密钥。

    REST

    如需了解密钥类型和集成类型的 API 参考信息,请参阅密钥集成类型

    在使用任何请求数据之前,请先进行以下替换:

    • DISPLAY_NAME:密钥的名称。通常是网站名称。
    • WAF_SERVICE:WAF 服务提供商的名称。 为 Akamai 指定 akamai

    HTTP 方法和网址:

    POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys

    请求 JSON 正文:

    
    {
      "displayName": "DISPLAY_NAME",
       'wafSettings': "  {
           "wafService": "WAF_SERVICE",
      
    }
    

    如需发送请求,请选择以下方式之一:

    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,
    
    },
    "wafSettings": {
      "wafService": "akamai",
    
      
    
    }
    }
    
    

    请录制您的极速密钥以供日后使用。

与 Akamai 集成

要与 Akamai 集成,您必须设置 EdgeWorker 服务并 在属性管理器中为 EdgeWorker 服务配置属性。

设置 EdgeWorker 服务

  1. 在 Akamai 控制中心内,创建 EdgeWorker ID,并将“编辑者”角色分配给您创建的 EdgeWorker ID。

  2. 如需为 Akamai 上传 reCAPTCHA 软件包,请使用您下载的 reCAPTCHA 软件包创建 EdgeWorker 版本

  3. 激活 EdgeWorker 版本

在“媒体资源管理器”中配置媒体资源

  1. 启动房源管理器

  2. 选择要保护的 Akamai 媒体资源,然后创建该媒体资源的新版本。

  3. 根据您实现的 WAF 功能,创建全局用户定义的变量。您要添加的全局变量 以 PMUSER_ 前缀开头。

    下表列出了您可以在 “媒体资源变量”部分:

    变量名称 说明 安全设置
    RECAPTCHAJSINSTALL 注入 reCAPTCHA JavaScript。您希望 Akamai 调用 reCAPTCHA API 来评估 reCAPTCHA 得分并执行防火墙政策中配置的操作的网页的网址。 指定 以 glob 模式表示的路径 并使用 `;` 作为分隔符。 隐藏
    RECAPTCHACHALLENGESITEKEY reCAPTCHA 验证页面密钥。如果您希望 将用户重定向到 reCAPTCHA 验证页面。 隐藏
    RECAPTCHAACTIONSITEKEY reCAPTCHA 操作令牌密钥。如果您使用 用于保护网页的 reCAPTCHA 操作令牌。 隐藏
    RECAPTCHASESSIONSITEKEY reCAPTCHA 会话令牌密钥。如果您使用 reCAPTCHA 会话令牌保护网页,则必须使用此变量。您需要使用此 变量(如果 RECAPTCHAJSINSTALL 设置为配置) Akamai 提供的 reCAPTCHA JavaScript。 隐藏
    RECAPTCHAEXPRESSSITEKEY reCAPTCHA Express 密钥。如果您使用 reCAPTCHA 极速版保护网页,则必须使用此变量。 隐藏
    GCPPROJECTNUMBER

    您的 Google Cloud 项目 ID。

    隐藏
    GCPAPIKEY

    您为身份验证创建的 API 密钥。

    隐藏

    如需了解相关说明,请参阅创建变量

  4. 要启用 EdgeWorker 服务,请添加规则 空白规则模板,在其中包含以下信息:

    • 标准

      • 名称reCAPTCHA EdgeWorkers rule
      • 条件与所有
        匹配 如果
        路径
        与以下任一
        匹配 /*

        matches one of 条件必须与需要 reCAPTCHA 保护的网址的超集相匹配。路径 /* 包含所有路径您可以选择添加特定页面。

      • 可选:如果您想添加其他条件来限制文件扩展名, 请使用以下代码:

        如果
        文件扩展名
        为以下之一
        html

    • 行为

      • 启用开启
      • 标识符Your_EdgeWorker_ID
      • 启用 mPulse 报告关闭
  5. 为了将调用从 EdgeWorker 服务转发到 reCAPTCHA createAssessment API,添加新规则 (包含以下信息的空白规则模板):

    • 标准

      • 名称reCAPTCHA assessment rule
      • 条件全部匹配
        如果
        路径
        与以下之一匹配
        /v1/projects/*/assessments
    • 行为

      • 来源类型您的来源
      • 源服务器主机名public-preview-recaptchaenterprise.googleapis.com
      • 转发主机标头自定义值
      • Custom Forward Host Header(自定义转发主机标头):public-preview-recaptchaenterprise.googleapis.com
      • 缓存键主机名源主机名
      • 支持 Gzip 压缩
      • Send True Client IP HeaderYes
      • True Client IP Header Name(真正客户端 IP 标头名称):True-Client-IP
      • 允许客户端设置 True Client-IP 标头
      • 验证设置使用平台设置
      • 使用 SNI TLS 扩展
      • HTTP 端口80
      • HTTPS 端口443
  6. 可选:将调用从 EdgeWorker 服务转发到 reCAPTCHA 质询页面,添加新规则 使用以下信息将流量重定向到挑战页面:

    • 标准

      • 名称reCAPTCHA challenge page rule
      • 条件全部匹配
        如果
        路径
        与以下之一匹配
        /recaptcha/challengepage
    • 行为

      • 来源类型您的来源
      • 源服务器主机名www.google.com
      • Forward Host Header(转发主机标头):Custom Value(自定义值)
      • Custom Forward Host Header(自定义转发主机标头):www.google.com
      • 缓存键主机名源主机名
      • 支持 Gzip 压缩
      • Send True Client IP HeaderYes
      • True Client IP Header Name(真正客户端 IP 标头名称):True-Client-IP
      • 允许客户端设置 True Client-IP 标头
      • 验证设置使用平台设置
      • 使用 SNI TLS 扩展
      • HTTP 端口80
      • HTTPS 端口443
  7. 启用更改:

    1. 在暂存环境中启用更改
    2. 在预演环境中测试更改
    3. 在生产环境中启用更改

创建 reCAPTCHA 防火墙政策

您必须创建防火墙政策,为您要保护的网站上的每个网页指定规则。您可以创建具有单个或 reCAPTCHA for WAF 的更多功能

在 reCAPTCHA 防火墙政策中,按预期的优先级顺序添加规则。第 1 条规则的顺序最高。您还可以使用 ReorderFirewallPoliciesRequest 重新排列优先级。对于传入请求,当政策条件与指定路径匹配时,您的 WAF 服务提供商会实现定义的操作,系统不会评估后续规则。

  1. 根据您选择的功能,执行以下操作:
    • 确定要保护的路径。
    • 确定允许、重定向或屏蔽访问的条件。
    • 确定规则的优先次序。
  2. 了解防火墙政策组件及其属性
  3. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  4. 如需替换 gcloud CLI 以访问 reCAPTCHA API 的公开预览版,请运行以下命令:
        gcloud config set api_endpoint_overrides/recaptchaenterprise https://public-preview-recaptchaenterprise.googleapis.com/
        
  5. 如需创建 reCAPTCHA 防火墙政策,请使用 gcloud recaptchafirewall-policies create 命令:

    在 reCAPTCHA 防火墙政策中,按预期优先级顺序添加规则。您必须先添加优先级最高的规则。对于 传入的请求,当政策条件与指定路径匹配时, 您的 WAF 服务提供商将实现定义的操作,然后 规则。默认规则是允许访问。

       gcloud recaptcha firewall-policies create \
          --actions=ACTION \
          --condition=CONDITION \
          --description=DESCRIPTION \
          --path=PATH
      

    请提供以下值:

    • ACTION:您的 WAF 服务提供商必须针对传入请求执行的操作。它最多只能包含一个终端操作, 是强制做出响应的操作。 指定以下其中一项操作:
      • allow:允许访问请求的网页。这是终止性操作。
      • block:拒绝对请求的网页的访问权限。这是终止性操作。
      • redirect:将传入的用户请求重定向到 reCAPTCHA 质询页面。 这是终止性操作。
      • substitute:针对欺诈性用户请求提供的页面与请求的页面不同。这是一项终端操作。
      • set_header:设置自定义标头,并允许传入的用户请求继续发送到 后端。然后,后端可以触发自定义保护。这是一个非终止操作。
    • CONDITIONCEL (通用表达式语言)条件表达式,用于指定是否指定 reCAPTCHA 防火墙政策适用于传入的用户请求。如果此条件的求值结果为 true,并且请求的路径与路径模式匹配,则 WAF 服务提供商会执行关联的操作。系统会在创建条件字符串时检查其 CEL 语法是否正确。如需详细了解语言定义,请参阅 CEL 语言定义
    • DESCRIPTION:对 reCAPTCHA 防火墙政策旨在实现的目标的说明。说明不得超过 256 个 UTF-8 字符。
    • PATH:适用于 reCAPTCHA 防火墙政策的路径。 必须将其指定为通配模式。如需详细了解 glob,请参阅手册页面

    成功执行该命令后,系统会显示类似以下内容的输出:

         Created [100].
       

    以下示例创建了 reCAPTCHA 防火墙政策,以便在得分低于 0.1 时屏蔽目标为 /example/page.html 的流量。

       gcloud recaptcha firewall-policies create \
         --description="example policy" \
         --path="/example/page.html" \
         --condition="recaptcha.score < 0.1" \
         --actions="block"
       

后续步骤