GSP877
개요
Google Cloud HTTP(S) 부하 분산은 전 세계 Google 접속 지점(POP)의 Google 네트워크 에지에서 구현됩니다. HTTP(S) 부하 분산기로 전달된 사용자 트래픽은 사용자에게 가장 가까운 POP로 유입되고, 이어서 Google의 전역 네트워크를 통해 사용 가능한 용량이 충분한 가장 가까운 백엔드로 부하가 분산됩니다.
Cloud Armor는 Google의 DDoS 및 웹 애플리케이션 방화벽(WAF) 탐지 시스템입니다. Cloud Armor는 Google Cloud HTTP 부하 분산기와 긴밀하게 연동되어 인터넷 공격으로부터 Google Cloud 고객의 애플리케이션을 보호합니다.
reCAPTCHA Enterprise는 reCAPTCHA API를 기반으로 하며, 고급 위험 분석 기술을 사용하여 사람과 봇을 구분함으로써 스팸 및 악용으로부터 사이트를 보호하는 서비스입니다. Cloud Armor 봇 관리는 reCAPTCHA Enterprise 봇 탐지 및 스코어링을 네트워크 에지에서 Cloud Armor 시행과 통합하여 다운스트림 애플리케이션을 보호하는 엔드 투 엔드 솔루션을 제공합니다.
이 실습에서는 아래 다이어그램과 같이 백엔드가 있는 HTTP 부하 분산기를 구성합니다. reCAPTCHA 세션 토큰 사이트 키를 설정하고 웹사이트에 삽입합니다. 또한 reCAPTCHA Enterprise 수동 테스트로의 리디렉션을 설정합니다. 그런 다음 Cloud Armor 봇 관리 정책을 구성하여 봇 탐지가 악의적인 봇 트래픽으로부터 애플리케이션을 어떻게 보호하는지 확인합니다.

학습할 내용
이 실습에서는 다음을 수행하는 방법을 알아봅니다.
- 적절한 상태 점검으로 HTTP 부하 분산기 설정
- reCAPTCHA WAF 테스트-페이지 사이트 키를 만들고 Cloud Armor 보안 정책과 연결
- reCAPTCHA 세션 토큰 사이트 키를 만들고 웹페이지에 설치
- Cloud Armor 봇 관리 정책 생성
- 봇 관리 정책이 구성된 규칙에 따라 트래픽을 처리하는지 확인
설정 및 요건
실습 시작 버튼을 클릭하기 전에
다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지를 표시합니다.
실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.
이 실습을 완료하려면 다음을 준비해야 합니다.
- 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드(권장) 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학습자 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
- 실습을 완료하기에 충분한 시간(실습을 시작하고 나면 일시중지할 수 없음)
참고: 이 실습에는 학습자 계정만 사용하세요. 다른 Google Cloud 계정을 사용하는 경우 해당 계정에 비용이 청구될 수 있습니다.
실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법
-
실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 대화상자가 열립니다.
오른쪽에는 다음과 같은 항목이 포함된 실습 설정 및 액세스 패널이 있습니다.
-
Google Cloud 콘솔 열기 버튼
- 이 실습에 사용해야 하는 임시 사용자 인증 정보(사용자 이름 및 비밀번호)
- 필요한 경우 실습 진행을 위한 기타 정보
실습 타이머는 페이지 상단에 있으며 남은 시간을 표시합니다.
-
Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).
실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.
팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.
참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
-
필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.
{{{user_0.username | "Username"}}}
실습 설정 및 액세스 패널에서도 사용자 이름을 확인할 수 있습니다.
-
다음을 클릭합니다.
-
아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.
{{{user_0.password | "Password"}}}
실습 설정 및 액세스 패널에서도 비밀번호를 확인할 수 있습니다.
-
다음을 클릭합니다.
중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요.
참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
-
이후에 표시되는 페이지를 클릭하여 넘깁니다.
- 이용약관에 동의하세요.
- 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 마세요.
- 무료 체험판을 신청하지 마세요.
잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.
참고: Google Cloud 제품 및 서비스에 액세스하려면 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다.
시작하기 전에
- Cloud Shell에서 프로젝트 ID를 설정합니다.
export PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID
gcloud config set project $PROJECT_ID
API 사용 설정
gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com
gcloud services enable recaptchaenterprise.googleapis.com
이제 첫 번째 작업을 시작할 준비가 되었습니다.
작업 1. 백엔드로 들어오는 HTTP 및 SSH 트래픽을 허용하도록 방화벽 규칙 구성
이 실습에서는 실습이 시작될 때 프로젝트에서 생성된 기본 VPC 네트워크를 사용합니다.
이 섹션에서는 Google Cloud 상태 점검 및 부하 분산기에서 백엔드로의 HTTP 트래픽을 허용하도록 방화벽 규칙을 구성합니다. 그런 다음 인스턴스에 대한 SSH를 허용하도록 방화벽 규칙을 구성합니다.
백엔드에 HTTP 트래픽을 허용하는 방화벽 규칙을 만듭니다.
상태 점검을 통해 새 연결을 수신할 수 있는 부하 분산기 인스턴스를 판별합니다. HTTP 부하 분산의 경우 130.211.0.0/22 및 35.191.0.0/16 범위 내의 주소에서 부하 분산 인스턴스의 상태 점검 프로브를 가져옵니다. VPC 방화벽 규칙에서 이러한 연결을 허용해야 합니다. 또한 부하 분산기는 동일한 IP 범위에서 백엔드와 통신합니다.
백엔드에 HTTP 트래픽을 허용하는 방화벽 규칙을 만드는 방법은 다음과 같습니다.
- Google Cloud 콘솔의 기본 메뉴에서 제품 섹션 아래의 VPC 네트워크로 이동한 다음 방화벽을 선택합니다.
- 기존 ICMP, 내부, RDP, SSH 방화벽 규칙을 확인합니다. 각 Google Cloud 프로젝트는 기본 네트워크와 이러한 방화벽 규칙으로 시작합니다.
-
방화벽 규칙 만들기를 클릭합니다.
- 다음 값을 설정하고, 나머지 값은 모두 기본값으로 유지합니다.
| 속성 |
값(지정된 대로 값 입력 또는 옵션 선택) |
| 이름 |
default-allow-health-check |
| 네트워크 |
기본값 |
| 대상 |
지정된 대상 태그 |
| 대상 태그 |
allow-health-check |
| 소스 필터 |
IPv4 범위 |
| 소스 IPv4 범위 |
130.211.0.0/22, 35.191.0.0/16 |
| 프로토콜 및 포트 |
지정된 프로토콜 및 포트를 선택한 다음, TCP에 체크합니다. 포트 번호에 80을 입력합니다. |
참고: 두 개의 소스 IPv4 범위를 하나씩 입력하고 그 사이에 스페이스 바를 누릅니다.
-
만들기를 클릭합니다.
또는 gCloud 명령줄에서 다음 명령어를 사용합니다.
gcloud compute firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:80 --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=allow-health-check
- 마찬가지로 인스턴스에 SSH를 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create allow-ssh --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:22 --source-ranges=0.0.0.0/0 --target-tags=allow-health-check
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
백엔드로 들어오는 HTTP 및 SSH 트래픽을 허용하도록 방화벽 규칙 구성
작업 2. 인스턴스 템플릿 구성 및 관리형 인스턴스 그룹 만들기
관리형 인스턴스 그룹에서는 인스턴스 템플릿을 사용하여 동일한 인스턴스 그룹을 만들 수 있습니다. 이를 사용하여 HTTP 부하 분산기의 백엔드를 만듭니다.
인스턴스 템플릿 구성
인스턴스 템플릿은 VM 인스턴스 및 관리형 인스턴스 그룹을 만드는 데 사용할 수 있는 리소스입니다. 인스턴스 템플릿은 머신 유형과 부팅 디스크 이미지, 서브넷, 라벨, 기타 인스턴스 속성을 정의합니다.
인스턴스 템플릿을 만드는 방법은 다음과 같습니다.
- 콘솔의 기본 메뉴에서 제품 섹션 아래의 Compute Engine으로 이동한 다음, 가상 머신 섹션에서 인스턴스 템플릿을 선택합니다.
-
인스턴스 템플릿 페이지 헤더에서 인스턴스 템플릿 만들기를 클릭합니다.
-
이름에 lb-backend-template을 입력합니다.
-
위치에서 전역을 선택합니다.
-
시리즈에서 E2를 선택합니다.
-
고급 옵션을 클릭합니다.
-
관리 탭에서 자동화 섹션까지 아래로 스크롤한 후 시작 스크립트 필드에 다음 스크립트를 삽입합니다.
#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo a2ensite default-ssl
sudo a2enmod ssl
sudo su
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://metadata.google.internal/computeMetadata/v1/instance/name)"
echo "Page served from: $vm_hostname" | \
tee /var/www/html/index.html
-
고급 옵션에서 네트워킹 탭을 클릭하고 네트워크 태그 텍스트 상자에 allow-health-check를 입력합니다.
- 다음 값을 설정하고, 나머지 값은 모두 기본값으로 유지합니다.
| 속성 |
값(지정된 대로 값 입력 또는 옵션 선택) |
| 네트워크(네트워크 인터페이스 아래) |
기본값 |
| 서브네트워크(네트워크 인터페이스 아래) |
기본값() |
참고: 네트워크 태그 allow-health-check는 HTTP 상태 점검 및 SSH 방화벽 규칙이 해당 인스턴스에 적용되도록 합니다.
-
만들기를 클릭합니다.
인스턴스 템플릿이 생성될 때까지 기다립니다.
관리형 인스턴스 그룹 만들기
관리형 인스턴스 그룹을 만드는 방법은 다음과 같습니다.
-
Compute Engine 탐색 메뉴에서 인스턴스 그룹 섹션 아래의 인스턴스 그룹을 클릭합니다.
-
인스턴스 그룹 만들기를 클릭합니다.
-
새 관리형 인스턴스 그룹(스테이트리스, Stateless)이 선택되어 있는지 확인합니다.
-
다음 값을 설정하고, 나머지 값은 모두 기본값으로 유지합니다.
| 속성 |
값(지정된 대로 값 입력 또는 옵션 선택) |
| 이름 |
lb-backend-example |
| 인스턴스 템플릿 |
lb-backend-template |
| 위치 |
단일 영역 |
| 리전 |
|
| 영역 |
|
| 자동 확장 |
자동 확장 모드를 사용 안함: 자동 확장 안함으로 설정 |
| 최소 인스턴스 수 |
1 |
-
만들기를 클릭합니다.
인스턴스 그룹에 이름이 지정된 포트 추가
- 인스턴스 그룹에 HTTP 서비스를 정의하고 다음 코드 스니펫을 Cloud Shell에 붙여넣어 관련 포트에 포트 이름을 매핑합니다.
gcloud compute instance-groups set-named-ports lb-backend-example \
--named-ports http:80 \
--zone {{{project_0.startup_script.lab_zone|lab_zone}}}
부하 분산 서비스가 이름이 지정된 포트로 트래픽을 전달합니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
인스턴스 템플릿 구성 및 관리형 인스턴스 그룹 만들기
작업 3. HTTP 부하 분산기 구성
이 섹션에서는 HTTP 부하 분산기를 구성하여 트래픽을 백엔드 lb-backend-example로 보냅니다.
구성 시작
-
콘솔에서 탐색 메뉴(
)로 이동하여 모든 제품 보기를 클릭하고 네트워킹에서 네트워크 서비스 > 부하 분산을 클릭합니다.
-
부하 분산기 만들기를 클릭합니다.
-
애플리케이션 부하 분산기(HTTP/HTTPS)가 선택되어 있는지 확인하고 다음을 클릭합니다.
-
공개(외부)가 선택되어 있는지 확인하고 다음을 클릭합니다.
-
전역 워크로드에 적합이 선택되어 있는지 확인하고 다음을 클릭합니다.
-
전역 외부 애플리케이션 부하 분산기가 선택되어 있는지 확인하고 다음을 클릭합니다.
-
구성을 선택합니다.
-
부하 분산기 이름 텍스트 상자에 http-lb를 입력합니다.
프런트엔드 구성
-
프런트엔드 구성을 클릭합니다.
- 다음을 지정하고 나머지 값은 모두 기본값으로 유지합니다.
| 속성 |
값(지정된 대로 값 입력 또는 옵션 선택) |
| 프로토콜 |
HTTP |
| IP 버전 |
IPv4 |
| IP 주소 |
임시 |
| 포트 |
80 |
-
완료를 클릭합니다.
백엔드 구성
백엔드 서비스는 수신 트래픽을 하나 이상의 연결된 백엔드에 전달합니다. 각 백엔드는 인스턴스 그룹과 추가 제공 용량 메타데이터로 구성됩니다.
-
전역 외부 애플리케이션 부하 분산기 만들기 페이지에서 백엔드 구성을 클릭합니다.
-
백엔드 서비스 및 백엔드 버킷에서 백엔드 서비스 만들기를 클릭합니다.
- 다음 값을 설정하고, 나머지 값은 모두 기본값으로 유지합니다.
| 속성 |
값(지정된 대로 옵션 선택) |
| 이름 |
http-backend |
| 프로토콜 |
HTTP |
| 이름이 지정된 포트 |
http |
| 인스턴스 그룹(새 백엔드 아래) |
lb-backend-example |
| 포트 번호 |
80 |
| 캐시 모드 |
Cache-Control 헤더를 기준으로 출처 설정 사용 |
| 상태 점검 |
상태 점검 만들기 |
-
상태 점검 페이지에서 다음 값을 설정하고, 나머지 값은 모두 기본값으로 유지합니다.

- 다음 값을 설정하고, 나머지 값은 모두 기본값으로 유지합니다.
| 속성 |
값(지정된 대로 옵션 선택) |
| 이름 |
http-health-check |
| 프로토콜 |
TCP |
| 포트 |
80 |
참고: 상태 점검은 새 연결을 수신할 수 있는 인스턴스를 판별합니다.
이 HTTP 상태 점검은 5초마다 인스턴스를 폴링하고 최대 5초 동안 응답을 기다립니다. 성공한 시도 2회는 정상, 실패한 시도 2회는 비정상으로 간주됩니다.
-
만들기를 클릭하여 상태 점검을 만듭니다.
-
로깅 사용 설정 체크박스를 선택합니다.
-
샘플링 레이트가 1로 설정되어 있는지 확인합니다.
-
만들기를 클릭하여 백엔드 서비스를 만들고 확인을 클릭합니다.
HTTP 부하 분산기 검토 및 만들기
호스트 및 경로 규칙은 트래픽의 전달 방식을 결정합니다. 예를 들어, 동영상 트래픽을 한 백엔드에 전달하고 정적 트래픽을 다른 백엔드에 전달할 수 있습니다. 그러나 이 실습에서는 호스트 및 경로 규칙을 구성하지 않습니다.
-
검토 및 완료(선택사항)를 클릭합니다.

-
백엔드 서비스와 프런트엔드를 검토합니다.
-
만들기를 클릭합니다.
부하 분산기가 생성될 때까지 기다립니다.
- 부하 분산기 이름(http-lb)을 클릭합니다.
- 다음 작업을 위해 부하 분산기의 IPv4 주소를 기록해 두세요. 이 실습에서는
[LB_IP_v4]로 지칭합니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
HTTP 부하 분산기 구성
HTTP 부하 분산기 테스트
백엔드의 HTTP 부하 분산기를 만들었으므로 트래픽이 백엔드 서비스로 전달되는지 확인합니다.
- HTTP 부하 분산기에 대한 IPv4 액세스를 테스트하려면 브라우저에서 새 탭을 열고 http://[LB_IP_v4]로 이동합니다.
[LB_IP_v4]를 부하 분산기의 IPv4 주소로 바꿔야 합니다.
참고: HTTP 부하 분산기에 액세스하는 데 최대 5분이 걸릴 수 있습니다. 그 사이 404 오류나 502 오류가 표시될 수 있습니다. 페이지가 로드될 때까지 계속 시도하세요.
작업 4. reCAPTCHA 세션 토큰 및 테스트-페이지 사이트 키 생성 및 배포
WAF 및 Google Cloud Armor 통합을 위한 reCAPTCHA Enterprise는 reCAPTCHA 테스트 페이지, reCAPTCHA 작업 토큰, reCAPTCHA 세션 토큰 기능을 제공합니다. 이 작업에서는 reCAPTCHA 세션 토큰 사이트 키와 reCAPTCHA WAF 테스트-페이지 사이트를 구현합니다.
reCAPTCHA 세션 토큰 및 WAF 테스트-페이지 사이트 키 만들기
세션 토큰 사이트 키와 테스트 페이지 사이트 키를 만들기 전에, 앞서 API 사용 설정 섹션에 설명된 대로 reCAPTCHA Enterprise API를 사용 설정했는지 다시 한번 확인합니다.
reCAPTCHA JavaScript는 평가 후 최종 사용자 브라우저에서 reCAPTCHA 세션 토큰을 쿠키로 설정합니다. reCAPTCHA JavaScript가 활성 상태로 유지되는 동안 최종 사용자 브라우저는 이 쿠키를 연결하고 새로고침합니다.
- reCAPTCHA 세션 토큰 사이트 키를 만들고 키에 대해 WAF 기능을 사용 설정합니다.
gcloud recaptcha keys create --display-name=test-key-name \
--web --allow-all-domains --integration-type=score --testing-score=0.5 \
--waf-feature=session-token --waf-service=ca
위 명령어를 실행하면 생성한 세션 토큰 사이트 키가 출력됩니다. 이 작업 후반부에서 사용할 수 있도록 기록해 두세요.
또한 Cloud Armor 통합을 사용 설정하기 위해 WAF 서비스를 Cloud Armor로 설정합니다.
참고: Cloud Armor 정책에서 활용되는 통합 유형 score를 사용하고 있습니다. 또는 checkbox와 invisible을 사용할 수도 있습니다.
또한 키를 만들 때 테스트 점수를 설정하여 Cloud Armor로 만든 봇 관리 정책이 의도한 대로 작동하는지 검증할 수 있습니다. 봇 트래픽을 재현하기는 쉽지 않으므로 이 방법은 기능을 테스트하는 데 유용합니다.
- reCAPTCHA WAF 테스트-페이지 사이트 키를 만들고 키에 대해 WAF 기능을 사용 설정합니다. reCAPTCHA 테스트 페이지 기능을 사용하여 수신 요청을 reCAPTCHA Enterprise로 리디렉션함으로써 각 요청이 잠재적으로 허위인지 또는 정상인지 확인할 수 있습니다. 나중에 이 키를 Cloud Armor 보안 정책과 연결하여 수동 테스트를 사용 설정합니다. 이 실습에서는 이 키를 이후 단계에서
CHALLENGE-PAGE-KEY로 지칭합니다.
gcloud recaptcha keys create --display-name=challenge-page-key \
--web --allow-all-domains --integration-type=INVISIBLE \
--waf-feature=challenge-page --waf-service=ca
-
탐색 메뉴(
) > 보안 > reCAPTCHA로 이동합니다. reCAPTCHA 키 목록에 생성한 키가 표시됩니다.
reCAPTCHA 세션 토큰 사이트 키 구현
- Google Cloud 콘솔의 기본 메뉴에서 Compute Engine으로 이동한 다음 VM 인스턴스를 선택합니다. 인스턴스 그룹에서 VM을 찾고 연결 열 아래의 SSH를 클릭합니다. 리디렉션된 페이지에서 승인을 클릭합니다.

- 웹 서버 루트 디렉터리로 이동한 후 브라우저 내 SSH 셸에 다음 코드를 입력하여 사용자를 루트로 변경합니다.
cd /var/www/html/
sudo su
- 랜딩
index.html 페이지를 업데이트하고 reCAPTCHA 세션 토큰 사이트 키를 삽입합니다. 앞서 기록해 둔 세션 토큰 사이트 키는 아래와 같이 방문 페이지의 head 섹션에 설정됩니다.
src="https://www.google.com/recaptcha/enterprise.js?render=<SESSION_TOKEN_SITE_KEY>&waf=session" async defer>
다음 명령어를 실행하기 전에 <SESSION_TOKEN_SITE_KEY>를 사이트 토큰으로 바꿔야 합니다.
echo '<!doctype html><html><head><title>ReCAPTCHA Session Token</title><script src="https://www.google.com/recaptcha/enterprise.js?render=<SESSION_TOKEN_SITE_KEY>&waf=session" async defer></script></head><body><h1>Main Page</h1><p><a href="/good-score.html">허용된 링크 방문</a></p><p><a href="/bad-score.html">차단된 링크 방문</a></p><p><a href="/median-score.html">리디렉션 링크 방문</a></p></body></html>' > index.html
- 봇 관리 정책을 테스트하기 위해 다른 샘플 페이지 3개를 만듭니다.
echo '<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></head><body><h1>축하합니다! 좋은 점수를 받았어요.</h1></body></html>' > good-score.html
echo '<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></head><body><h1>아쉽지만 점수가 낮습니다.</h1></body></html>' > bad-score.html
echo '<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></head><body><h1>점수가 중앙값에 해당하여 추가 확인이 필요합니다.</h1></body></html>' > median-score.html
브라우저에서 웹페이지를 열어 모든 웹페이지에 액세스할 수 있는지 확인합니다. [LB_IP_v4]를 부하 분산기의 IPv4 주소로 바꿔야 합니다.
-
http://[LB_IP_v4]/index.html을 엽니다. 페이지 오른쪽 하단에 'reCAPTCHA로 보호됨'이 표시되면 reCAPTCHA 구현이 작동하는 것입니다.

- 각 링크를 클릭합니다.

- 모든 페이지에 액세스할 수 있는지 확인합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
reCAPTCHA 세션 토큰 및 테스트-페이지 사이트 키 배포
작업 5. 봇 관리를 위한 Cloud Armor 보안 정책 규칙 만들기
이 섹션에서는 Cloud Armor 봇 관리 규칙을 사용하여 reCAPTCHA 점수를 기반으로 요청을 허용, 거부, 리디렉션합니다.
- Cloud Shell에서 gcloud를 통해 보안 정책을 만듭니다.
gcloud compute security-policies create recaptcha-policy \
--description "봇 관리 정책"
- reCAPTCHA Enterprise 수동 테스트를 사용하여 인간과 자동 클라이언트를 구분하려면 이전에 수동 테스트를 위해 만든 reCAPTCHA WAF 테스트 사이트 키(CHALLENGE-PAGE-KEY)를 보안 정책과 연결합니다. 다음 스크립트에서 "CHALLENGE-PAGE-KEY"를 이전에 만든 키로 바꾸는 것을 잊지 마세요.
gcloud compute security-policies update recaptcha-policy \
--recaptcha-redirect-site-key "CHALLENGE-PAGE-KEY"
- URL 경로가 good-score.html과 일치하고 점수가 0.4보다 큰 경우 트래픽을 허용하는 봇 관리 규칙을 추가합니다.
gcloud compute security-policies rules create 2000 \
--security-policy recaptcha-policy\
--expression "request.path.matches('good-score.html') && token.recaptcha_session.score > 0.4"\
--action allow
- URL 경로가 bad-score.html과 일치하고 점수가 0.6 미만인 경우 트래픽을 거부하는 봇 관리 규칙을 추가합니다.
gcloud compute security-policies rules create 3000 \
--security-policy recaptcha-policy\
--expression "request.path.matches('bad-score.html') && token.recaptcha_session.score < 0.6"\
--action "deny-403"
- URL 경로가 median-score.html과 일치하고 점수가 0.5인 경우 트래픽을 Google reCAPTCHA로 리디렉션하는 봇 관리 규칙을 추가합니다.
gcloud compute security-policies rules create 1000 \
--security-policy recaptcha-policy\
--expression "request.path.matches('median-score.html') && token.recaptcha_session.score == 0.5"\
--action redirect \
--redirect-type google-recaptcha
- 보안 정책을 백엔드 서비스
http-backend에 연결합니다.
gcloud compute backend-services update http-backend \
--security-policy recaptcha-policy --global
-
콘솔에서 탐색 메뉴(
)로 이동하여 모든 제품 보기를 클릭하고 네트워킹에서 네트워크 보안 > Cloud Armor 정책을 클릭합니다.
-
recaptcha-policy를 클릭합니다.
정책은 다음과 같이 표시되어야 합니다.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
봇 관리를 위한 Cloud Armor 보안 정책 규칙 만들기
작업 6. Cloud Armor로 봇 관리 검증
- 브라우저를 열고 URL
http://[LB_IP_v4]/index.html을 입력합니다. '허용된 링크 방문'으로 이동합니다.

-
시크릿 모드로 새 창을 열어 새 세션을 시작합니다.
-
URL http://[LB_IP_v4]/index.html을 입력하고 '차단된 링크 방문'으로 이동합니다. HTTP 403 오류가 표시됩니다.

참고: 403 Forbidden 오류가 표시되지 않으면 reCAPTCHA 규칙이 적용될 때까지 다소 기다려야 할 수 있습니다. 5분 정도 기다린 후 이 단계를 다시 시도해 보세요. 각 링크를 테스트할 때는 반드시 새 시크릿 창을 사용해야 합니다.
-
시크릿 모드로 새 창을 열어 새 세션을 시작합니다.
-
URL http://[LB_IP_v4]/index.html을 입력하고 '리디렉션 링크 방문'으로 이동합니다. 아래와 같이 Google reCAPTCHA로 리디렉션되고 수동 테스트 페이지가 표시됩니다.

참고: 사용자 상호작용이 평가를 통과하면 reCAPTCHA Enterprise에서 예외 쿠키를 생성합니다. 브라우저는 쿠키가 만료될 때까지 동일한 사이트에 대한 사용자의 후속 요청에 이 예외 쿠키를 연결합니다. 기본적으로 예외 쿠키는 3시간 후에 만료됩니다.
참고: 자동화된 소프트웨어가 사이트에서 악의적인 행위를 하지 못하도록 reCAPTCHA는 고급 위험 분석 엔진과 적응형 CAPTCHA를 사용합니다. 유효한 사용자는 이러한 조치를 쉽게 통과할 수 있습니다. 알고리즘이 사용자를 사람으로 판단하면 사용자의 추가 조치 없이 reCaptcha를 검증합니다. 그렇지 않은 경우 다양한 이미지가 표시되며 계속하려면 이미지를 분류해야 합니다. 기본적으로 가장 의심스러운 트래픽에 대해서만 CAPTCHA를 풀도록 요청합니다.
해결해야 할 테스트가 표시되지 않은 경우에도 정책 로그를 확인하여 테스트 해결이 면제되었는지 확인할 수 있습니다.
Cloud Armor 로그 확인
보안 정책 로그를 살펴보고 봇 관리가 예상대로 작동하는지 확인합니다.
- 콘솔에서 탐색 메뉴(
)로 이동하여 모든 제품 보기를 클릭하고 네트워킹에서 네트워크 보안 > Cloud Armor 정책을 클릭합니다.
-
recaptcha-policy를 클릭합니다.
-
로그 탭을 클릭합니다.
-
정책 로그 보기를 클릭합니다.
- 아래는 MQL(모니터링 쿼리 언어) 쿼리입니다. 복사하여 쿼리 편집기에 붙여넣습니다.
resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:(recaptcha-policy)
- 이제 쿼리 실행을 클릭합니다.
- 쿼리 결과에서 요청이
http://[LB_IP_v4]/good-score.html인 로그 항목을 찾습니다. jsonPayload.Expand enforcedSecurityPolicy를 펼칩니다.

참고: 로그 항목이 표시되지 않으면 정책이 전파될 때까지 몇 분 정도 기다린 후 이전에 사용한 URL을 새로고침하고 로그를 다시 확인하세요.
-
http://[LB_IP_v4]/bad-score.html 및 http://[LB_IP_v4]/median-score.html에 대해서도 동일한 작업을 반복합니다.


configuredAction이 ALLOW, DENY 또는 GOOGLE_RECAPTCHA로 설정되어 있고 이름이 recaptcha-policy인 것을 확인합니다.
참고: Cloud Armor 보안 정책은 트래픽이 언제 거부되고 허용되는지와 트래픽의 소스를 판별할 수 있는 로그를 만듭니다.
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
Cloud Armor로 봇 관리 검증
수고하셨습니다
Cloud Armor를 사용하여 봇 관리를 성공적으로 구현했습니다. HTTP 부하 분산기를 구성했고, 웹페이지에서 reCAPTCHA 세션 토큰 사이트 키를 만들고 구현했습니다. 테스트-페이지 사이트 키도 만들었습니다. Cloud Armor 봇 관리 정책을 설정하고, 규칙에 따라 요청을 처리하는 방식을 검증했습니다. 보안 정책 로그를 살펴보고 트래픽이 허용, 차단 또는 리디렉션된 이유를 확인해 보았습니다.
설명서 최종 업데이트: 2026년 4월 2일
실습 최종 테스트: 2026년 4월 2일
Copyright 2026 Google LLC. All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.