WAF용 reCAPTCHA와 Fastly 통합

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

통합을 완료하려면 WAF용 reCAPTCHA 기능을 하나 이상 구현하고 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. 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. 보호하려는 페이지와 이러한 페이지에서 구현하려는 WAF 기능 유형을 식별합니다.
    3. 액세스를 허용하거나 차단하는 조건을 식별합니다.
    4. reCAPTCHA 방화벽 정책을 만드는 데 도움이 되는 reCAPTCHA 방화벽 정책 구성요소 및 해당 속성을 알아봅니다. 예시는 reCAPTCHA 방화벽 정책 예시를 참조하세요.
  6. Fastly용 reCAPTCHA 패키지(recaptcha_fastly_client_0.1.0.tar.gz)를 다운로드합니다.

  7. Compute@Edge 기능으로 Fastly 계정을 만듭니다.

WAF용 reCAPTCHA 기능 구현

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

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

작업 토큰

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

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 서비스 제공업체의 이름입니다. 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 또는 checkbox를 지정하세요.
    • DOMAIN_NAME: 키를 사용할 수 있는 웹사이트의 도메인이나 하위 도메인입니다.

      여러 도메인을 쉼표로 구분된 목록으로 지정합니다. 선택사항: --allow-all-domains를 지정하여 도메인 확인을 중지합니다.

      도메인 확인을 사용 중지하면 사이트에 제한이 없으므로 reCAPTCHA 키를 누구나 액세스하고 사용할 수 있어서 보안 위험이 발생합니다.

    • WAF_FEATURE: WAF 기능 이름입니다. action-token를 지정하세요.
    • WAF_SERVICE: WAF 서비스 제공업체의 이름입니다. Fastly에 fastly를 지정합니다.

    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": "fastly",
    
      "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가 활성 상태로 유지되는 동안 최종 사용자 브라우저는 쿠키를 연결하고 새로고침합니다.

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

웹페이지에 세션 토큰 키를 설치하는 방법은 점수 기반 키를 프런트엔드와 통합을 참조하세요.

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

테스트 페이지

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 서비스 제공업체의 이름입니다. 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: 통합 유형입니다. invisible를 지정하세요.
    • DOMAIN_NAME: 키를 사용할 수 있는 웹사이트의 도메인이나 하위 도메인입니다. --allow-all-domains를 지정하세요.
    • WAF_FEATURE: WAF 기능 이름입니다. challenge-page를 지정하세요.
    • WAF_SERVICE: WAF 서비스 제공업체의 이름입니다. Fastly에 fastly를 지정합니다.

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

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

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

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

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"
       

Fastly 컴퓨팅 서비스와 통합

reCAPTCHA 방화벽 정책을 사용하려면 요청을 가로채고 처리하도록 Fastly 컴퓨팅 서비스를 설정해야 합니다.

연결을 통해 새 컴퓨팅 서비스를 만들고 구성하거나 reCAPTCHA 방화벽 정책을 기존 Fastly 서비스와 통합할 수 있습니다. 체이닝을 사용하려면 reCAPTCHA 서비스가 올바른 IP 감지를 위해 가장 멀리 있는 업스트림 Fastly 서비스 또는 기타 프록시여야 합니다.

컴퓨팅 서비스를 만들려면 다음 정보가 있어야 합니다.

  • 도메인 이름
  • zip 형식의 FASTLY용 reCAPTCHA 패키지
  • 백엔드 서버의 원본 이름
  • 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 패키지(recaptcha_fastly_client_0.1.0.tar.gz)를 업로드합니다.

    • 사전의 이름으로 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 익스프레스 키입니다. 이 키는 페이지 보호를 위해 reCAPTCHA 익스프레스를 사용하는 경우 필요합니다.

다음 단계