将 reCAPTCHA Enterprise for WAF 与 Fastly 集成

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

如需完成集成,您必须实现 reCAPTCHA Enterprise for WAF 的一项或多项功能,创建 reCAPTCHA 防火墙政策,并与 Fastly 计算服务集成。

准备工作

  1. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

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

  2. 确保您的 Google Cloud 项目已启用结算功能

  3. 启用 reCAPTCHA Enterprise API。

    启用 API

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

    1. 在 Google Cloud 控制台中,转到凭据页面。

      进入“凭据”页面

    2. 点击 创建凭据,然后选择 API 密钥

    3. 记录 API 密钥以供日后使用。

  5. 规划如何实现 reCAPTCHA Enterprise for WAF 的功能来保护您的网站。

    1. 选择一个或多个与您的使用场景最相符的 WAF 功能
    2. 确定要保护的网页以及要在这些网页上实现的 WAF 功能类型。
    3. 确定允许或禁止访问的条件。
    4. 了解 reCAPTCHA 防火墙政策组件及其属性,以帮助您创建 reCAPTCHA 防火墙政策。如需查看示例,请参阅 reCAPTCHA 防火墙政策示例
  6. 下载适用于 Fastly recaptcha_fastly_client_0.1.0.tar.gz 的 reCAPTCHA 软件包。

  7. 创建具备 Compute@Edge 功能的 Fastly 帐号

实现 reCAPTCHA Enterprise for WAF 的功能

根据您的要求,您可以在单个应用中使用 reCAPTCHA Enterprise for WAF 的一项或多项功能。

如果您想使用多项功能,则必须为每个功能创建 reCAPTCHA 密钥并在您的应用中使用它们。例如,如果您要使用 reCAPTCHA 操作令牌和 reCAPTCHA 验证页面,则必须创建操作令牌密钥和质询页面密钥,并在您的应用中使用它们。

操作令牌

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

如需实现 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 服务提供商的名称。为 Fastly 指定 fastly

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

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

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

  2. 在网页上使用您创建的操作令牌密钥集成 reCAPTCHA JavaScript。有关说明,请参阅与您的操作令牌密钥集成类型对应的文档。
  3. 从 reCAPTCHA Enterprise 收到令牌后,请按照以下格式将令牌附加到预定义的请求标头:
     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>
      
      

会话令牌

reCAPTCHA JavaScript 会在评估后将 reCAPTCHA 会话令牌设置为最终用户浏览器上的 Cookie。只要 reCAPTCHA JavaScript 保持活跃状态,最终用户的浏览器就会附加 Cookie 并刷新 Cookie。

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

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

您可以使用此 Cookie 保护最终用户在特定网域上的后续请求和网页加载。默认情况下,会话令牌的有效期为 30 分钟。但是,如果最终用户停留在您实现了会话令牌的网页上,reCAPTCHA Enterprise 会定期刷新会话令牌,以免过期。

在需要受 reCAPTCHA Enterprise 保护的每个页面上安装会话令牌。我们建议您使用 reCAPTCHA Enterprise 保护每个网页,并使用 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 服务提供商的名称。为 Fastly 指定 fastly

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

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

    记录您的会话令牌密钥以供日后使用。

  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>
    
    
    

challenge-page

When you implement a reCAPTCHA challenge page, reCAPTCHA Enterprise 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, do the following:

  1. Create a challenge-page key for your website.

    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 fastly for Fastly.

    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 服务提供商的名称。为 Fastly 指定 fastly

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

记录挑战页密钥以供日后使用。

  • 如需将用户重定向到 reCAPTCHA 验证页面并接收 reCAPTCHA 令牌,请创建防火墙政策并在受保护的页面上执行 redirect 操作。
  • 快递

    如需实施 reCAPTCHA WAF express protection,请创建极速密钥。

    1. 在 Google Cloud 控制台中,激活 Cloud Shell。

      激活 Cloud Shell

      Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

    2. gcloud

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

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

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

      执行 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
      • WAF_FEATURE:WAF 功能的名称。指定 express
      • WAF_SERVICE:WAF 服务提供商的名称。

      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": "fastly",
        "wafFeature": "EXPRESS"
      
      }
      }
      
      

      记录您的 Express 密钥以备日后使用。

    创建 reCAPTCHA 防火墙政策

    您必须创建防火墙政策,为您要在网站上保护的每个网页指定规则。您可以创建使用 reCAPTCHA Enterprise for WAF 的一项或多项功能的防火墙政策。

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

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

      激活 Cloud Shell

      Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

    4. 如需替换 gcloud CLI 以访问 reCAPTCHA Enterprise 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 模式。如需详细了解 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"
         

    与 Fastly 计算服务集成

    如需使用 reCAPTCHA 防火墙政策,您必须设置 Fastly 计算服务来拦截和处理请求。

    您可以创建和配置新的计算服务,也可以通过式将 reCAPTCHA 防火墙政策与现有 Fastly 服务集成。如果要使用链,reCAPTCHA 服务必须是最远的上游 Fastly 服务或其他代理,以便实现正确的 IP 检测。

    如需创建计算服务,您必须了解以下信息:

    • 您的域名
    • FASTLY 的 reCAPTCHA 软件包(ZIP 格式)
    • 后端服务器的来源名称
    • reCAPTCHA Enterprise 后端服务器的来源名称:Recaptcha Enterprise
    • Google 后端服务器的来源名称:Google
    • 您为身份验证创建的 API 密钥
    • 您的 Google Cloud 项目 ID
    • 您为 WAF 功能创建的 reCAPTCHA 密钥

    如需使用 reCAPTCHA 防火墙政策设置 Fastly 服务,请执行以下操作:

    1. 登录 Fastly
    2. 如需创建计算服务,请按照创建新的计算服务中的说明进行操作。

      创建计算服务时,请执行以下操作:

      • 如需为 reCAPTCHA Enterprise 后端服务器创建源,请指定以下值:

        • 来源名称 = Recaptcha Enterprise
        • 源服务器的 IP 地址(或主机名)= public-preview-recaptchaenterprise.googleapis.com
      • 如需为 Google 后端服务器创建源,请指定以下值:

        • 来源名称 = Google
        • 源服务器的 IP 地址(或主机名)= www.google.com:443
      • 如需为后端服务器创建来源,请指定以下值:

        • 源名称 = 后端服务器的任何有意义的名称。
        • 源服务器的 IP 地址(或主机名)= 后端服务器的主机名。
      • 为 Fastly recaptcha_fastly_client_0.1.0.tar.gz 上传 reCAPTCHA 软件包。

      • 使用 recaptcha 作为字典的名称,并将以下信息作为键值对添加到字典中:

        customer_backend_name 您在为后端服务器创建来源时指定的名称。
        recaptcha_backend_name reCAPTCHA Enterprise
        google_backend_name Google
        cloud_api_key 您为身份验证创建的 API 密钥。
        cloud_project_number 您的 Google Cloud 项目 ID。
        action_site_key reCAPTCHA WAF 操作令牌密钥。如果您使用操作令牌保护您的页面,则必须使用此密钥。
        session_site_key reCAPTCHA WAF 会话令牌密钥。如果您使用会话令牌保护您的页面,则必须使用此密钥。
        challengepage_site_key reCAPTCHA WAF 质询页面密钥。如果您使用 reCAPTCHA 验证页面保护您的网页,则必须使用此密钥。
        express_site_key reCAPTCHA WAF Express 密钥。如果您使用 reCAPTCHA WAF Express 来保护您的网页,则必须使用此密钥。

    后续步骤