WAF용 reCAPTCHA를 Cloudflare와 통합

이 문서에서는 WAF용 reCAPTCHA를 Cloudflare와 통합하는 방법을 보여줍니다.

통합을 완료하려면 WAF용 reCAPTCHA 기능을 하나 이상 구현하고 reCAPTCHA 방화벽 정책을 만들고 Cloudflare 작업자 서버리스 애플리케이션을 배포하고 구성하여 Cloudflare와 통합해야 합니다.

시작하기 전에

  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. WAF용 reCAPTCHA 기능을 구현하여 웹사이트를 보호하는 방법을 계획합니다.

    1. 사용 사례에 가장 적합한 WAF 기능을 하나 이상 선택합니다.
    2. 보호하려는 페이지를 식별합니다.
    3. 식별된 페이지에서 구현하려는 WAF 기능 유형을 선택합니다.
    4. 사용자 액세스를 관리하기 위한 조건을 식별합니다.
    5. reCAPTCHA 방화벽 정책을 만드는 데 도움이 되는 reCAPTCHA 방화벽 정책 구성요소 및 해당 속성을 알아봅니다. 예시는 reCAPTCHA 방화벽 정책 예시를 참조하세요.
  6. Cloudflare 작업자 기능이 포함된 Cloudflare 계정을 만들거나 선택합니다.

  7. Cloudflare 웹사이트를 만들거나 선택합니다.

  8. Cloudflare recaptcha_cloudflare_client_0.0.2.tar.gz용 reCAPTCHA 패키지를 다운로드합니다.

WAF용 reCAPTCHA 기능 구현

요구사항에 따라 단일 애플리케이션에서 WAF용 reCAPTCHA 기능을 하나 이상 사용할 수 있습니다.

기능을 두 개 이상 사용하려면 기능마다 reCAPTCHA 키를 만들고 애플리케이션에서 사용해야 합니다. 예를 들어 reCAPTCHA 작업 토큰과 reCAPTCHA 테스트 페이지를 사용하려면 작업 토큰 키와 테스트 페이지 키를 만들고 애플리케이션에서 사용해야 합니다.

작업 토큰

작업 토큰을 생성하려면 웹페이지에서 reCAPTCHA를 실행해야 합니다. reCAPTCHA에서 작업 토큰을 생성한 후에는 checkout과 같은 사용자 작업을 보호해야 하는 사전 정의된 요청 헤더에 작업 토큰을 연결합니다. 기본적으로 작업 토큰은 30분 동안 유효하지만 트래픽에 따라 달라질 수 있습니다. cloudflare가 토큰 속성을 평가할 수 있도록 토큰이 만료되기 전에 작업 토큰을 사전 정의된 요청 헤더에 연결해야 합니다.

reCAPTCHA 작업 토큰을 구현하려면 다음 안내를 따르세요.

  1. 웹사이트용 작업 토큰 키를 만듭니다.

    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 서비스 제공업체의 이름입니다. cloudflare에 cloudflare를 지정합니다.

    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 서비스 제공업체의 이름입니다. cloudflare에 cloudflare를 지정합니다.

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

    나중에 사용할 수 있도록 작업 토큰 키를 기록합니다.

  2. 웹페이지에서 만든 작업 토큰 키와 reCAPTCHA JavaScript를 통합합니다. 자세한 내용은 작업 토큰 키 통합 유형에 해당하는 문서를 참조하세요.
  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>
      
      

세션 토큰

reCAPTCHA JavaScript는 평가 후 최종 사용자 브라우저에서 reCAPTCHA 세션 토큰을 쿠키로 설정합니다. reCAPTCHA JavaScript가 활성 상태로 유지되는 동안 최종 사용자 브라우저는 쿠키를 연결하고 새로고침합니다.

세션 토큰을 쿠키로 제공하려면 보호해야 하는 페이지 앞에 최종 사용자가 탐색하는 웹페이지 최소 하나 이상에 세션 토큰 키를 설치합니다. 예를 들어 결제 페이지를 보호하려면 홈페이지나 제품 페이지에 세션 토큰 키를 설치합니다.

Cloudflare용 reCAPTCHA 패키지를 설치할 때 wrangler.toml 파일을 구성하여 웹페이지에 reCAPTCHA JavaScript를 포함하거나 웹페이지에 세션 키를 설치할 수 있습니다. Cloudflare의 reCAPTCHA JavaScript를 포함하면 웹페이지에 키를 수동으로 설치할 필요 없이 세션 토큰 키를 통해 reCAPTCHA가 통합됩니다.

이 쿠키를 사용하여 특정 도메인에서 최종 사용자의 후속 요청 및 페이지 로드를 보호할 수 있습니다. 세션 토큰은 기본적으로 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 서비스 제공업체의 이름입니다. cloudflare에 cloudflare를 지정합니다.

    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 서비스 제공업체의 이름입니다. cloudflare에 cloudflare를 지정합니다.

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

    나중에 사용할 수 있도록 세션 토큰 키를 기록합니다.

    Cloudflare에서 reCAPTCHA JavaScript를 삽입하려면 다음 단계를 건너뛰고 wranger.toml을 구성합니다.

  2. 세션 토큰 키와 waf=session을 reCAPTCHA 자바스크립트에 추가합니다.

    다음 샘플 스크립트는 웹페이지에 세션 토큰을 구현하는 방법을 보여줍니다.

    <!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 테스트 페이지를 구현하려면 다음 단계를 따르세요.

  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 서비스 제공업체의 이름입니다. cloudflare에 cloudflare를 지정합니다.

    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 서비스 제공업체의 이름입니다. cloudflare에 cloudflare를 지정합니다.

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

    나중에 사용할 수 있도록 테스트 페이지 키를 기록합니다.

  2. 사용자를 reCAPTCHA 테스트 페이지로 리디렉션하고 reCAPTCHA 토큰을 받으려면 보호된 페이지에서 redirect 작업을 사용하여 방화벽 정책을 만듭니다.

express

reCAPTCHA 익스프레스를 구현하려면 익스프레스 키를 만듭니다.

  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 서비스 제공업체의 이름입니다. cloudflare에 cloudflare를 지정합니다.

    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 서비스 제공업체의 이름입니다. cloudflare에 cloudflare를 지정합니다.

    HTTP 메서드 및 URL:

    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": "cloudflare",
    
      
    
    }
    }
    
    

    나중에 사용할 수 있도록 익스프레스 키를 기록합니다.

Cloudflare와 통합

reCAPTCHA 방화벽 정책을 사용하려면 Cloudflare 작업자 서버리스 애플리케이션을 배포하고 구성해야 합니다.

통합 프로세스를 시작하기 전에 다음을 수행합니다.

  1. CLOUDFLARE_API_TOKEN을 만들고 Cloudflare 작업자 수정 템플릿을 선택합니다. 나중에 사용할 수 있도록 API 토큰을 기록합니다.

  2. Cloudflare API 계정 ID를 가져오고 나중에 사용할 수 있도록 기록합니다.

Cloudflare용 reCAPTCHA 패키지 설치

  1. Cloudflare용 reCAPTCHA 패키지를 다운로드하고 설치합니다.

    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. wrangler 패키지를 설치합니다.

       npm install -g wrangler
      
    3. Cloudflare용 reCAPTCHA 패키지를 다운로드합니다.

      wget --load-cookies /tmp/cookies.txt https://dl.google.com/recaptchaenterprise/cloudflare_client/releases/recaptcha_cloudflare_client_0.0.2.tar.gz -O recaptcha_cloudflare_client_0.0.2.tar.gz && rm -rf /tmp/cookies.txt
      
    4. Cloudflare용 reCAPTCHA 패키지를 압축해제합니다.

      tar -xvzf recaptcha_cloudflare_client_0.0.2.tar.gz
      
  2. wrangler.toml 파일의 vars 섹션에서 다음 변수를 구성합니다.

    • GCP_API_KEY: 인증을 위해 만든 Google Cloud API 키입니다.
    • GCP_PROJECT_NUMBER: Google Cloud 프로젝트 번호입니다.
    • RECAPTCHA_EXPRESS_SITE_KEY: reCAPTCHA 익스프레스를 사용하는 경우 익스프레스 키입니다.
    • RECAPTCHA_SESSION_SITE_KEY: reCAPTCHA 세션 토큰을 사용하는 경우 세션 토큰 키입니다.
    • RECAPTCHA_ACTION_SITE_KEY: reCAPTCHA 작업 토큰을 사용하는 경우 작업 토큰 키입니다.
    • RECAPTCHA_CHALLENGE_SITE_KEY: reCAPTCHA 테스트 페이지를 사용하는 경우 테스트 페이지 키입니다.
    • RECAPTCHA_JS_INSTALL: Cloudflare 작업자가 세션 토큰 키를 사용하여 reCAPTCHA JavaScript를 설치할 페이지의 URL입니다. 경로를 glob 패턴으로 지정하고 ;을 구분 기호로 사용합니다. 이 옵션은 reCAPTCHA 세션 토큰에만 사용 가능합니다.
    • RECAPTCHA_ASSESSMENT_CALL: Cloudflare 작업자가 reCAPTCHA Enterprise API를 호출하여 reCAPTCHA 점수를 평가하고 방화벽 정책에 구성된 작업을 수행할 페이지의 URL입니다. 경로를 glob 패턴으로 지정하고 ;을 구분 기호로 사용합니다.

  3. 애플리케이션 배포:

    wrangler deploy
    

작업자 애플리케이션에 대한 Cloudflare 경로 구성

  1. Cloudflare 대시보드에 로그인하고 계정을 선택합니다.
  2. 탐색 메뉴에서 작업자 및 페이지를 클릭한 후 작업자 애플리케이션을 선택합니다.
  3. 트리거 탭을 클릭한 후 경로 추가를 클릭합니다.
  4. 경로 추가 대화상자에서 reCAPTCHA로 보호해야 하는 웹페이지의 경로를 입력하고 적절한 영역을 선택한 후 경로 추가를 클릭합니다.

reCAPTCHA 방화벽 정책 만들기

웹사이트에서 보호하려는 모든 페이지에 대한 규칙을 지정하는 방화벽 정책을 만들어야 합니다. WAF용 reCAPTCHA 기능을 하나 이상 사용하여 방화벽 정책을 만들 수 있습니다.

reCAPTCHA 방화벽 정책에서 원하는 우선순위에 따라 규칙을 추가합니다. 첫 번째 규칙이 순서가 가장 높은 규칙입니다. 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 recaptcha firewall-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: 커스텀 헤더를 설정하고 수신되는 사용자 요청이 백엔드까지 계속되도록 허용합니다. 그러면 백엔드가 맞춤설정된 보호를 트리거할 수 있습니다. 이는 터미널 작업이 아닌 작업입니다.
    • CONDITION: reCAPTCHA 방화벽 정책이 수신되는 사용자 요청에 적용되는지 여부를 지정하는 CEL(Common Expression Language) 조건식입니다. 이 조건이 true로 평가되고 요청된 경로가 경로 패턴과 일치하면 WAF 서비스 제공업체에서 관련 작업을 실행합니다. 조건 문자열에서 생성 시 CEL 문법 정확성을 확인합니다. 언어 정의에 대한 자세한 내용은 CEL 언어 정의를 참조하세요.
    • DESCRIPTION: reCAPTCHA 방화벽 정책이 달성하려는 목표에 대한 설명입니다. 설명은 UTF-8 형식의 최대 256자(영문 기준)여야 합니다.
    • PATH: reCAPTCHA 방화벽 정책이 적용되는 경로입니다. glob 패턴으로 지정해야 합니다. glob에 대한 자세한 내용은 수동 페이지를 참조하세요.

    명령어 실행이 성공적으로 완료되면 다음과 비슷한 출력이 표시됩니다.

         Created [100].
       

    다음 예시에서는 점수가 0.1 미만일 때 /example/page.html의 트래픽 타겟팅을 차단하는 reCAPTCHA 방화벽 정책을 만듭니다.

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

다음 단계