reCAPTCHA WAF 익스프레스 보호 설정

이 문서에서는 reCAPTCHA 자바스크립트(웹) 또는 기본 모바일(iOS 또는 Android) SDK를 통합하지 않고 애플리케이션 서버에서 reCAPTCHA WAF 익스프레스 보호(reCAPTCHA WAF 익스프레스)를 설정하는 방법을 보여줍니다.

reCAPTCHA WAF 표현식은 백엔드 신호만 사용하여 reCAPTCHA 위험 점수를 생성합니다. 이 위험 점수를 사용하여 요청을 제공할지, 테스트 페이지로 리디렉션할지, 나중에 분석할 수 있도록 로깅할지 결정할 수 있습니다.

시작하기 전에

  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. Enable the reCAPTCHA Enterprise API.

    Enable the API

  4. 인증을 위한 API 키를 만듭니다.

    1. Google Cloud 콘솔에서 사용자 인증 정보 페이지로 이동합니다.

      사용자 인증 정보로 이동

    2. 사용자 인증 정보 만들기를 클릭한 후 API 키를 선택합니다.

    3. 나중에 사용할 수 있도록 API 키를 기록합니다.

reCAPTCHA WAF 익스프레스 키 만들기

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

  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: 키 이름입니다. 일반적으로 사이트 이름입니다.
    • 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 메서드 및 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": "",
      "wafFeature": "EXPRESS"
    
    }
    }
    
    

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

평가 작성

애플리케이션 서버에서 reCAPTCHA Enterprise에 요청하려면 projects.assessments.create 메서드를 사용하여 평가를 작성합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • API_KEY: 인증을 위해 만든 API 키
  • EXPRESS_KEY: 애플리케이션을 위해 만든 reCAPTCHA WAF 익스프레스 키
  • USER_IP_ADDRESS: 이 이벤트와 관련된 사용자 기기의 요청에 있는 IP 주소
  • HEADER_INFO: (선택사항) 클라이언트가 애플리케이션 서버로 전송한 HTTP 헤더
  • JA3_FINGERPRINT: (선택사항) JA3는 TLS 클라이언트 Hello 패킷의 특정 필드에 대한 MD5 지문. 자세한 내용은 JA3 - SSL/TLS 클라이언트 프로파일링 방법을 참조하세요.
  • URI_NAME: (선택사항) 사용자가 액세스하는 URI
  • USER_AGENT: (선택사항) 이 이벤트와 관련된 사용자 기기의 요청에 있는 사용자 에이전트
  • ACCOUNT_ID: (선택사항) 해싱된 계정 이름과 같은 사용자 계정의 고유한 영구 식별자

HTTP 메서드 및 URL:

POST https://public-preview-recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY

JSON 요청 본문:


{
  "event": {
    "siteKey": "EXPRESS_KEY",
    "express": true,
    "userIpAddress": "USER_IP_ADDRESS",
    "headers": ["HEADER_INFO"],
    "ja3": "JA3_FINGERPRINT",
    "requestedUri": "URI_NAME",
    "userAgent": "USER_AGENT",
    "user_info": {
      "account_id": "ACCOUNT_ID"
    }
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://public-preview-recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$headers = @{  }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://public-preview-recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY" | Select-Object -Expand Content

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "name": "projects/123456789/assessments/abcdef1234000000",
  "event": {
    "token": "",
    "siteKey": "6L...",
    "userAgent": "Mozilla/5.0 (X11; CrOS x86_64 13816.55.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.86 Safari/537.36",
    "userIpAddress": "1.2.3.4",
    "express": true,
    "requestedUri": "https://example.com/",
    "firewallPolicyEvaluation": false,
    "user_info": {
      "account_id": "123456789"
    }
  },
  "riskAnalysis": {
    "score": 0.7,
    "reasons": []
  }
}

다음 단계