将 reCAPTCHA for WAF 与 Fastly 集成

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

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

准备工作

  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. 确保您的 Google Cloud 项目已启用结算功能

  3. 启用 reCAPTCHA Enterprise API。

    启用 API

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

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

      进入“凭据”页面

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

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

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

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

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

实现 reCAPTCHA for WAF 的功能

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

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

操作令牌

您的网页必须运行 reCAPTCHA 才能生成操作令牌。 reCAPTCHA 生成操作令牌后,您可以在需要保护任何用户操作的位置将操作令牌附加到预定义的请求标头,例如 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 收到令牌后,请按以下格式将令牌附加到预定义的请求标头:
     X-Recaptcha-Token: value-of-your-action-token
    

    您可以使用 XHR、Ajax 或 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 JavaScript 会将 reCAPTCHA 会话令牌设置为最终用户浏览器上的 Cookie。只要 reCAPTCHA JavaScript 保持活跃状态,最终用户的浏览器就会附加 Cookie 并刷新 Cookie。

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

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

您可以使用此 Cookie 保护最终用户在特定网域上的后续请求和网页加载。默认情况下,会话令牌的有效期为 30 分钟。但是,如果最终用户停留在您实现了会话令牌的网页上,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 服务提供商的名称。为 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 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"
      
      }
      }
      
      

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

    创建 reCAPTCHA 防火墙政策

    您必须创建一项防火墙政策,为要在网站上保护的每个网页指定规则。您可以使用 reCAPTCHA 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 API 的公开预览版,请运行以下命令:
          gcloud config set api_endpoint_overrides/recaptchaenterprise https://public-preview-recaptchaenterprise.googleapis.com/
          
    5. 如需创建 reCAPTCHA 防火墙政策,请使用 gcloud recaptcha fire-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 后端服务器的来源名称:Recaptcha Enterprise
    • Google 后端服务器的来源名称:Google
    • 您为身份验证创建的 API 密钥
    • 您的 Google Cloud 项目 ID
    • 您为 WAF 功能创建的 reCAPTCHA 密钥

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

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

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

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

        • 源站名称 = 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 极速密钥。如果您使用 reCAPTCHA WAF Express 保护网页,则必须使用此密钥。

    后续步骤