reCAPTCHA WAF 익스프레스 보호 설정

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

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

시작하기 전에

  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 키를 기록합니다.

reCAPTCHA WAF 익스프레스 키 만들기

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

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  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: (선택사항) 이 이벤트와 관련된 사용자 기기의 요청에 있는 사용자 에이전트입니다.

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

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

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
  },
  "riskAnalysis": {
    "score": 0.7,
    "reasons": []
  }
}

다음 단계