Google Cloud Armor로 봇 관리 + reCAPTCHA

1. 소개

Google Cloud HTTP(S) 부하 분산은 전 세계 Google 접속 지점 (POP)의 Google 네트워크 에지에 배포됩니다. HTTP(S) 부하 분산기로 전달된 사용자 트래픽은 사용자에게 가장 가까운 POP로 유입되고, 이어서 Google의 글로벌 네트워크를 통해 사용 가능한 용량이 충분한 가장 가까운 백엔드로 부하가 분산됩니다.

Cloud Armor는 Google의 분산 서비스 거부 및 웹 애플리케이션 방화벽 (WAF) 감지 시스템입니다. Cloud Armor는 Google Cloud HTTP 부하 분산기와 긴밀하게 결합되어 인터넷 공격으로부터 Google Cloud 고객의 애플리케이션을 보호합니다. reCAPTCHA Enterprise는 스팸과 악용으로부터 사이트를 보호하는 서비스로, 고급 위험 분석 기술을 사용하여 사람과 봇을 구분하는 기존 reCAPTCHA API를 기반으로 합니다. Cloud Armor 봇 관리는 다운스트림 애플리케이션을 보호하기 위해 Cloud Armor가 네트워크 에지에 시행하는 reCAPTCHA Enterprise 봇 감지 및 점수 산정을 통합하는 엔드 투 엔드 솔루션을 제공합니다.

이 실습에서는 아래 다이어그램과 같이 백엔드가 있는 HTTP 부하 분산기를 구성합니다. 그런 다음 reCAPTCHA 세션 토큰 사이트 키를 설정하고 웹사이트에 삽입하는 방법을 알아봅니다. reCAPTCHA Enterprise 수동 챌린지로 리디렉션을 설정하는 방법도 알아봅니다. 그런 다음 봇 감지가 악성 봇 트래픽으로부터 애플리케이션을 보호하는 방법을 보여주는 Cloud Armor 봇 관리 정책을 구성합니다.

8b46e6728996bc0c.png

학습 내용

  • 적절한 상태 점검으로 HTTP 부하 분산기를 설정하는 방법
  • reCAPTCHA WAF 챌린지 페이지 사이트 키를 만들어 Cloud Armor 보안 정책과 연결하는 방법
  • reCAPTCHA 세션 토큰 사이트 키를 만들어 웹페이지에 설치하는 방법
  • Cloud Armor 봇 관리 정책을 만드는 방법
  • 구성된 규칙에 따라 봇 관리 정책이 트래픽을 처리하고 있는지 확인하는 방법

필요한 항목

  • 기본 네트워킹 및 HTTP 지식
  • 기본 Unix/Linux 명령줄 지식

2. 설정 및 요구사항

자습형 환경 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유해야 하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud Console은 고유한 문자열을 자동으로 생성합니다. 일반적으로 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID를 참조해야 하며(일반적으로 PROJECT_ID로 식별됨), 마음에 들지 않는 경우 임의로 다시 생성하거나 직접 지정해서 사용할 수 있는지 확인하세요. 프로젝트가 생성되면 프로젝트 ID가 '고정'됩니다.
  • 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참조하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud Console에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼을 마친 후 비용이 결제되지 않도록 리소스를 종료하려면 Codelab의 끝에 있는 '삭제' 안내를 따르세요. Google Cloud 새 사용자에게는 미화 $300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

GCP 콘솔에서 오른쪽 상단 툴바의 Cloud Shell 아이콘을 클릭합니다.

55efc1aaa7a4d3ad.png

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

7ffe5cbb04455448.png

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉토리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 실습의 모든 작업은 브라우저만으로 수행할 수 있습니다.

시작하기 전에

Cloud Shell 내에서 프로젝트 ID가 설정되어 있는지 확인합니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
echo $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

3. 백엔드에 대한 HTTP 및 SSH 트래픽을 허용하도록 방화벽 규칙 구성

Google Cloud 상태 점검 및 부하 분산기에서 백엔드로의 HTTP 트래픽을 허용하도록 방화벽 규칙을 구성합니다. 또한 인스턴스에 SSH를 통해 연결할 수 있도록 방화벽 규칙을 구성합니다.

프로젝트에서 생성된 default VPC 네트워크를 사용합니다. 백엔드에 HTTP 트래픽을 허용하는 방화벽 규칙을 만듭니다. 상태 점검을 통해 새 연결을 수신할 수 있는 부하 분산기 인스턴스를 판별합니다. HTTP 부하 분산의 경우 130.211.0.0/22 및 35.191.0.0/16 범위 내의 주소에서 부하 분산된 인스턴스의 상태 점검 프로브를 가져옵니다. VPC 방화벽 규칙에서 이 연결을 허용해야 합니다. 또한 부하 분산기는 동일한 IP 범위에서 백엔드와 통신합니다.

  1. Cloud 콘솔에서 탐색 메뉴 ( mainmenu.png) > VPC 네트워크 > 방화벽으로 이동합니다.

131fb495c9242335.png

  1. 기존 ICMP, 내부, RDP, SSH 방화벽 규칙을 확인합니다.각 Google Cloud 프로젝트는 기본 네트워크와 이러한 방화벽 규칙으로 시작합니다.
  2. 방화벽 규칙 만들기를 클릭합니다.
  3. 다음 값을 설정하고 나머지 값은 모두 기본값으로 유지합니다.

속성

값 (지정된 대로 값 입력 또는 옵션 선택)

이름

default-allow-health-check

네트워크

기본값

대상

지정된 대상 태그

대상 태그

상태 점검 허용

소스 필터

IP 범위

소스 IP 범위

130.211.0.0/22, 35.191.0.0/16

프로토콜 및 포트

지정된 프로토콜 및 포트, TCP를 체크 포트 번호로 80을 입력합니다.

  1. 만들기를 클릭합니다.

또는 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
  1. 마찬가지로 인스턴스로의 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

4. 인스턴스 템플릿 구성 및 관리형 인스턴스 그룹 만들기

관리형 인스턴스 그룹에서는 인스턴스 템플릿을 사용하여 동일한 인스턴스 그룹을 만들 수 있습니다. 이를 사용하여 HTTP 부하 분산기의 백엔드를 만듭니다.

인스턴스 템플릿 구성

인스턴스 템플릿은 VM 인스턴스 및 관리형 인스턴스 그룹을 만드는 데 사용하는 리소스입니다. 인스턴스 템플릿은 머신 유형, 부팅 디스크 이미지, 서브넷, 라벨, 기타 인스턴스 속성을 정의합니다. 아래와 같이 인스턴스 템플릿을 만듭니다.

  1. Cloud 콘솔에서 탐색 메뉴 ( mainmenu.png) > Compute Engine > 인스턴스 템플릿으로 이동한 다음 인스턴스 템플릿 만들기를 클릭합니다.
  2. 이름lb-backend-template을 입력합니다.
  3. 시리즈에서 N1을 선택합니다.
  4. 네트워킹, 디스크, 보안, 관리 , 단독 테넌시를 클릭합니다.

1d0b7122f4bb410d.png

  1. 관리 섹션으로 이동하여 시작 스크립트 필드에 다음 스크립트를 삽입합니다.
#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo a2ensite default-ssl
sudo a2enmod ssl
sudo vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
sudo echo "Page served from: $vm_hostname" | \
tee /var/www/html/index.html
  1. 네트워킹 탭을 클릭하고 allow-health-check 네트워크 태그를 추가합니다.
  2. 다음 값을 설정하고 나머지 값은 모두 기본값으로 유지합니다.

속성

값 (지정된 대로 값 입력 또는 옵션 선택)

네트워크 (네트워크 인터페이스 아래)

기본값

서브넷 (네트워크 인터페이스 아래)

기본값 (us-east1)

네트워크 태그

상태 점검 허용

  1. 만들기를 클릭합니다.
  2. 인스턴스 템플릿이 생성될 때까지 기다립니다.

관리형 인스턴스 그룹 만들기

  1. 아직 Compute Engine 페이지에 있는 상태로 왼쪽 메뉴의 인스턴스 그룹을 클릭합니다.

ed419061ad2b982c.png

  1. 인스턴스 그룹 만들기를 클릭합니다. 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다.
  2. 다음 값을 설정하고 나머지 값은 모두 기본값으로 유지합니다.

속성

값 (지정된 대로 값 입력 또는 옵션 선택)

이름

lb-backend-example

위치

단일 영역

지역

us-east1

영역

us-east1-b

인스턴스 템플릿

lb-backend-template

자동 확장

자동 확장 안함

인스턴스 수

1

  1. 만들기를 클릭합니다.

인스턴스 그룹에 이름이 지정된 포트 추가

인스턴스 그룹에 HTTP 서비스를 정의하고 해당 포트에 포트 이름을 매핑합니다. 부하 분산 서비스는 이름이 지정된 포트로 트래픽을 전달합니다.

gcloud compute instance-groups set-named-ports lb-backend-example \
    --named-ports http:80 \
    --zone us-east1-b

5. HTTP 부하 분산기 구성

백엔드 lb-backend-example:으로 트래픽을 전송하도록 HTTP 부하 분산기를 구성합니다.

구성 시작

  1. Cloud 콘솔에서 탐색 메뉴 ( mainmenu.png) > 네트워크 서비스 > 부하 분산을 클릭한 다음 부하 분산기 만들기를 클릭합니다.
  2. HTTP(S) 부하 분산에서 구성 시작을 클릭합니다.

4f8b8cb10347ecec.png

  1. 인터넷 트래픽을 VM으로 분산, 기본 HTTP(S) 부하 분산기를 선택하고 계속을 클릭합니다.
  2. 이름을 http-lb로 설정합니다.

백엔드 구성

백엔드 서비스는 수신 트래픽을 하나 이상의 연결된 백엔드에 전달합니다. 각 백엔드는 인스턴스 그룹과 추가 제공 용량 메타데이터로 구성됩니다.

  1. 백엔드 구성을 클릭합니다.
  2. 백엔드 서비스 및 백엔드 버킷에서 백엔드 서비스 만들기를 클릭합니다.
  3. 다음 값을 설정하고 나머지 값은 모두 기본값으로 유지합니다.

속성

값 (지정된 대로 옵션 선택)

이름

http-backend

프로토콜

HTTP

이름이 지정된 포트

HTP

인스턴스 그룹

lb-backend-example

포트 번호

80

  1. 완료를 클릭합니다.
  2. 백엔드 추가를 클릭합니다.
  3. 상태 점검에서 상태 점검 만들기를 선택합니다.

168a9ba1062b1f45.png

  1. 다음 값을 설정하고 나머지 값은 모두 기본값으로 유지합니다.

속성

값 (지정된 대로 옵션 선택)

이름

http-health-check

프로토콜

TCP

포트

80

dc45bc726bb4dfad.png

  1. 저장을 클릭합니다.
  2. 로깅 사용 설정 체크박스를 선택합니다.
  3. 샘플링 레이트를 1로 설정합니다.

c8f884fa4a8cd50.png

  1. 만들기를 클릭하여 백엔드 서비스를 만듭니다.

1fd2ad21b1d32a95.png

프런트엔드 구성

호스트 및 경로 규칙은 트래픽의 전달 방식을 결정합니다. 예를 들어 동영상 트래픽을 한 백엔드에 전달하고 정적 트래픽을 다른 백엔드에 전달할 수 있습니다. 그러나 이 실습에서는 호스트 및 경로 규칙을 구성하지 않습니다.

  1. 프런트엔드 구성을 클릭합니다.
  2. 다음을 지정하고 나머지 값은 모두 기본값으로 유지합니다.

속성

값 (지정된 대로 값 입력 또는 옵션 선택)

프로토콜

HTTP

IP 버전

IPv4

IP 주소

임시

포트

80

  1. 완료를 클릭합니다.

HTTP 부하 분산기 검토 및 만들기

  1. 검토 및 완료를 클릭합니다.

478e5e51057af3a3.png

  1. 백엔드 서비스프런트엔드를 검토합니다.
  2. 만들기를 클릭합니다.
  3. 부하 분산기가 생성될 때까지 기다립니다.
  4. 부하 분산기 이름(http-lb)을 클릭합니다.
  5. 다음 작업을 위해 부하 분산기의 IPv4 주소를 기록해 둡니다. 여기서는 이를 [LB_IP_v4]라고 부르겠습니다.

6. HTTP 부하 분산기 테스트

백엔드의 HTTP 부하 분산기를 만들었으므로 트래픽이 백엔드 서비스로 전달되는지 확인합니다. HTTP 부하 분산기에 대한 IPv4 액세스를 테스트하려면 브라우저에서 새 탭을 열고 http://[LB_IP_v4]로 이동합니다. [LB_IP_v4] 를 부하 분산기의 IPv4 주소로 바꿔야 합니다.

7. reCAPTCHA 세션 토큰과 챌린지 페이지 사이트 키 생성 및 배포

WAF용 reCAPTCHA Enterprise와 Google Cloud Armor 통합은 reCAPTCHA 챌린지 페이지, reCAPTCHA 작업 토큰, reCAPTCHA 세션 토큰의 기능을 제공합니다. 이 Codelab에서는 reCATCHA 세션 토큰 사이트 키와 reCAPTCHA WAF 챌린지 페이지 사이트를 구현합니다.

reCAPTCHA 세션 토큰과 WAF 챌린지 페이지 사이트 키 만들기

세션 토큰 사이트 키와 챌린지 페이지 사이트 키를 만들기 전에 앞부분의 'API 사용 설정' 섹션에 설명된 대로 reCAPTCHA Enterprise API를 사용 설정했는지 다시 한번 확인합니다.

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

  1. reCAPTCHA 세션 토큰 사이트 키를 만들고 키에 WAF 기능을 사용 설정합니다. 또한 Cloud Armor 통합을 사용 설정하기 위해 WAF 서비스를 Cloud Armor로 설정합니다.
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
  1. 위 명령어의 출력에 생성된 키가 제공됩니다. 다음 단계에서 웹사이트에 추가할 것이므로 기록해 두세요.
  2. 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
  1. 탐색 메뉴 ( mainmenu.png) > 보안 > reCAPTCHA Enterprise로 이동합니다. 생성한 키가 Enterprise Keys 아래에 표시됩니다.

4e2567aae0eb92d7.png

reCAPTCHA 세션 토큰 사이트 키 구현

  1. 탐색 메뉴 ( mainmenu.png) > Compute Engine > VM 인스턴스로 이동합니다. 인스턴스 그룹에서 VM을 찾아 SSH에 연결합니다.

6d7b0fd12a667b5f.png

  1. webserver 루트 디렉터리로 이동하여 사용자를 루트로 변경합니다.
@lb-backend-example-4wmn:~$ cd /var/www/html/
@lb-backend-example-4wmn:/var/www/html$ sudo su
  1. 방문 index.html 페이지를 업데이트하고 reCAPTCHA 세션 토큰 사이트 키를 삽입합니다. 세션 토큰 사이트 키는 아래와 같이 방문 페이지의 헤드 섹션에서 설정됩니다.

<script src="https://www.google.com/recaptcha/enterprise.js?render=<REPLACE_TOKEN_HERE>&waf=session" async defer></script>

아래에 표시된 대로 index.html 파일을 업데이트하기 전에 토큰을 교체해야 합니다.

root@lb-backend-example-4wmn:/var/www/html# echo '<!doctype html><html><head><title>ReCAPTCHA Session Token</title><script src="https://www.google.com/recaptcha/enterprise.js?render=<REPLACE_TOKEN_HERE>&waf=session" async defer></script></head><body><h1>Main Page</h1><p><a href="/good-score.html">Visit allowed link</a></p><p><a href="/bad-score.html">Visit blocked link</a></p><p><a href="/median-score.html">Visit redirect link</a></p></body></html>' > index.html
  1. 다음 세 가지 샘플 페이지를 만들어 봇 관리 정책을 테스트합니다.
  • good-score.html
root@lb-backend-example-4wmn:/var/www/html# echo '<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></head><body><h1>Congrats! You have a good score!!</h1></body></html>' > good-score.html
  • bad-score.html
root@lb-backend-example-4wmn:/var/www/html# echo '<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></head><body><h1>Sorry, You have a bad score!</h1></body></html>' > bad-score.html
  • median-score.html
root@lb-backend-example-4wmn:/var/www/html# echo '<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></head><body><h1>You have a median score that we need a second verification.</h1></body></html>' > median-score.html
  1. 브라우저에서 웹페이지를 열어 모든 웹페이지에 액세스할 수 있는지 확인합니다. [LB_IP_v4] 를 부하 분산기의 IPv4 주소로 바꿔야 합니다.
  • http://[LB_IP_v4]/index.html을 엽니다. 페이지 오른쪽 하단에 'reCAPTCHA에 의해 보호됨'이 표시되면 reCAPTCHA 구현이 작동하고 있는지 확인할 수 있습니다.

d695ad23d91ae4e9.png

  • 각 링크를 클릭합니다.

4a2ad1b2f10b4c86.png

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

481f63bf5e6f244.png

8. 봇 관리를 위한 Cloud Armor 보안 정책 규칙 만들기

이 섹션에서는 Cloud Armor 봇 관리 규칙을 사용하여 reCAPTCHA 점수를 기준으로 요청을 허용, 거부, 리디렉션합니다. 세션 토큰 사이트 키를 만들 때 테스트 점수를 0.5로 설정합니다.

  1. Cloud Shell('설정 및 요구사항'의 'Cloud Shell 시작'에서 Cloud Shell 사용 방법 안내 참조)에서 gcloud를 통해 보안 정책을 만듭니다.
gcloud compute security-policies create recaptcha-policy \
    --description "policy for bot management"
  1. reCAPTCHA Enterprise 수동 본인 확인 요청을 사용하여 실제 클라이언트와 자동 클라이언트를 구분하려면 수동 확인을 위해 만든 reCAPTCHA WAF 챌린지 사이트 키를 보안 정책과 연결합니다. 'CHALLENGE-PAGE-KEY'를 앞서 만든 키로 바꿉니다.
gcloud compute security-policies update recaptcha-policy \
   --recaptcha-redirect-site-key "CHALLENGE-PAGE-KEY"
  1. 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
  1. 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"
  1. URL 경로가 중앙값-점수.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
  1. 백엔드 서비스 http-backend에 보안 정책을 연결합니다.
gcloud compute backend-services update http-backend \
    --security-policy recaptcha-policy –-global
  1. 콘솔에서 탐색 메뉴 > 네트워크 보안 > Cloud Armor로 이동합니다.
  2. reCAPTCHA 정책을 클릭합니다. 다음과 유사한 정책이 표시됩니다.

74852618aaa96786.png

9. Cloud Armor로 봇 관리 검증하기

  1. 브라우저를 열고 URL http://[LB_IP_v4]/index.html을 입력합니다. '방문 허용 링크'로 이동합니다. 다음을 통과해야 합니다.

edf3e6ca238d2ee7.png

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

ecef5655b291dbb0.png

  1. 시크릿 모드에서 새 창을 열어 새 세션을 확보합니다. URL http://[LB_IP_v4]/index.html을 입력하고 '방문 리디렉션 링크'로 이동합니다. 아래와 같이 Google reCAPTCHA 및 수동 챌린지 페이지가 나타납니다.

53ed2b4067b55436.png

Cloud Armor 로그 확인하기

보안 정책 로그를 살펴보고 봇 관리가 예상대로 작동하는지 확인하세요.

  1. 콘솔에서 탐색 메뉴 > 네트워크 보안 > Cloud Armor로 이동합니다.
  2. recaptcha-policy를 클릭합니다.
  3. 로그를 클릭합니다.

46fd825d8506d355.png

  1. 정책 로그 보기를 클릭합니다.
  2. 다음은 쿼리 편집기에 복사하여 붙여넣을 수 있는 MQL(쿼리 언어 모니터링) 쿼리입니다.
resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:(recaptcha-policy)
  1. 이제 쿼리 실행을 클릭합니다.
  2. 쿼리 결과에서 http://[LB_IP_v4]/good-score.html에 대한 요청 로그 항목을 찾습니다. jsonPayload.ExpandforceSecurityPolicy를 펼칩니다.

b7b1712642cf092b.png

  1. http://[LB_IP_v4]/bad-score.html 및 http://[LB_IP_v4]/median-score.html에도 같은 작업을 반복합니다.

c28f96d83056725a.png

8c4803d75a77142c.png

configurationAction이 recaptcha-policy라는 이름과 함께 ALLOW, DENY 또는 GOOGLE_RECAPTCHA로 설정된 것을 볼 수 있습니다.

축하합니다! Cloud Armor를 사용한 봇 관리에 대한 이 실습을 완료했습니다.

©2020 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

10. 실습 정리

  1. 네트워크 보안 >> Cloud Armor >> %POLICY NAME%로 이동하여 삭제를 선택합니다.

2646f9c1df093f90.png

  1. 네트워킹 >> 네트워크 서비스 >> 부하 분산으로 이동합니다. 생성된 부하 분산기를 선택하고 삭제를 클릭합니다.

8ad4f55dc06513f7.png

삭제할 추가 리소스로 백엔드 서비스 및 상태 점검을 선택합니다.

f6f02bb56add6420.png

  1. 탐색 메뉴 ( mainmenu.png) > Compute Engine > 인스턴스 그룹으로 이동합니다. 관리형 인스턴스 그룹을 선택하고 삭제를 클릭합니다.

2116b286954fd6.png

텍스트 상자에 '삭제'를 입력하여 삭제를 확인합니다.

관리형 인스턴스 그룹이 삭제될 때까지 기다립니다. 이렇게 하면 그룹의 인스턴스도 삭제됩니다. 인스턴스 그룹이 삭제된 후에만 템플릿을 삭제할 수 있습니다.

  1. 왼쪽 창에서 인스턴스 템플릿으로 이동합니다**.** 인스턴스 템플릿을 선택하고 삭제를 클릭합니다.
  2. 탐색 메뉴 ( mainmenu.png) > VPC 네트워크 > 방화벽으로 이동합니다. default-allow-health-check 및 allow-ssh 규칙을 선택하고 삭제를 클릭합니다.
  3. 탐색 메뉴 ( mainmenu.png) > 보안 > reCAPTCHA Enterprise로 이동합니다. 생성된 키를 선택하고 삭제합니다. 삭제하려면 텍스트 상자에 'DELETE'를 입력하세요.

e71ecd11baf262ca.png

11. 수고하셨습니다

Cloud Armor로 봇 관리를 성공적으로 구현했습니다. HTTP 부하 분산기를 구성했습니다. 그런 다음 웹페이지에서 reCAPTCHA 세션 토큰 사이트 키를 만들고 구현했습니다. 챌린지 페이지 사이트 키를 만드는 방법도 배웠습니다. Cloud Armor 봇 관리 정책을 설정하고 규칙에 따라 요청을 처리하는 방식을 검증했습니다. 보안 정책 로그를 살펴보며 트래픽이 허용, 차단 또는 리디렉션된 이유를 확인할 수 있었습니다.

학습한 내용

  • 인스턴스 템플릿을 설정하고 관리형 인스턴스 그룹을 만드는 방법
  • HTTP 부하 분산기를 설정하는 방법
  • Cloud Armor 봇 관리 정책을 만드는 방법
  • reCAPTCHA 세션 토큰 사이트 키를 만들고 구현하는 방법
  • reCAPTCHA 챌린지 페이지 사이트 키를 만들고 구현하는 방법
  • 봇 관리 정책이 의도한 대로 작동하는지 확인하는 방법

다음 단계

  • reCAPTCHA 작업 토큰을 설정해 보세요.