การจัดการบ็อตด้วย Google Cloud Armor + reCAPTCHA

1. บทนำ

ระบบทำให้การจัดสรรภาระงาน HTTP(S) ของ Google Cloud ใช้งานได้ที่ Edge ของเครือข่าย Google ในจุดแสดงตัวตน (POP) ของ Google ทั่วโลก การรับส่งข้อมูลของผู้ใช้ซึ่งส่งไปยังตัวจัดสรรภาระงาน HTTP(S) จะป้อน POP ที่อยู่ใกล้กับผู้ใช้มากที่สุด จากนั้นจะมีการจัดสรรภาระงานผ่านเครือข่ายทั่วโลกของ Google ไปยังแบ็กเอนด์ที่ใกล้ที่สุดที่มีความจุเพียงพอ

Cloud Armor คือระบบตรวจจับการปฏิเสธการให้บริการและไฟร์วอลล์เว็บแอปพลิเคชัน (WAF) แบบกระจายของ Google Cloud Armor ทำงานได้อย่างราบรื่นกับตัวจัดสรรภาระงาน HTTP ของ Google Cloud และช่วยปกป้องแอปพลิเคชันของลูกค้า Google Cloud จากการโจมตีจากอินเทอร์เน็ต reCAPTCHA Enterprise เป็นบริการที่ปกป้องเว็บไซต์ของคุณจากสแปมและการละเมิด โดยต่อยอดจาก reCAPTCHA API ที่มีอยู่ซึ่งใช้เทคนิคการวิเคราะห์ความเสี่ยงขั้นสูงเพื่อแยกแยะมนุษย์และบ็อตออกจากกัน การจัดการบ็อต Cloud Armor มอบโซลูชันแบบครบวงจรที่ผสานรวมการตรวจหาบ็อต reCAPTCHA Enterprise และการให้คะแนนกับการบังคับใช้โดย Cloud Armor ที่ขอบของเครือข่ายเพื่อปกป้องแอปพลิเคชันปลายทาง

ในห้องทดลองนี้ คุณจะได้กำหนดค่าตัวจัดสรรภาระงาน 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 APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น PROJECT_ID) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" หลังจากสร้างโปรเจ็กต์แล้ว
  • มีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้

จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้

55efc1aaa7a4d3ad.png

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้

7ffe5cbb04455448.png

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ใช้งานได้ต่อเนื่องและทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานทั้งหมดใน Lab นี้สามารถทำได้โดยใช้เบราว์เซอร์

ก่อนเริ่มต้น

ตรวจสอบว่าตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว

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 กับแบ็กเอนด์

กำหนดค่ากฎไฟร์วอลล์เพื่ออนุญาตการรับส่งข้อมูล HTTP ไปยังแบ็กเอนด์จากการตรวจสอบประสิทธิภาพของ Google Cloud และตัวจัดสรรภาระงาน นอกจากนี้ ให้กำหนดค่ากฎไฟร์วอลล์เพื่ออนุญาตให้ SSH เข้าสู่อินสแตนซ์

เราจะใช้เครือข่าย VPC เริ่มต้นที่สร้างขึ้นในโปรเจ็กต์ของคุณ สร้างกฎไฟร์วอลล์เพื่ออนุญาตให้มีการรับส่งข้อมูล HTTP กับแบ็กเอนด์ การตรวจสอบประสิทธิภาพการทำงานจะเป็นตัวกำหนดอินสแตนซ์ของตัวจัดสรรภาระงานที่จะรับการเชื่อมต่อใหม่ได้ สำหรับการจัดสรรภาระงาน HTTP การตรวจสอบประสิทธิภาพการทำงานของอินสแตนซ์ที่มีการจัดสรรภาระงานมาจากที่อยู่ในช่วง 130.211.0.0/22 และ 35.191.0.0/16 กฎไฟร์วอลล์ VPC ต้องอนุญาตการเชื่อมต่อเหล่านี้ นอกจากนี้ ตัวจัดสรรภาระงานจะสื่อสารกับแบ็กเอนด์ในช่วง IP เดียวกันด้วย

  1. ใน Cloud Console ให้ไปที่เมนูการนำทาง ( mainmenu.png) > เครือข่าย VPC > ไฟร์วอลล์

131fb495c9242335.png

  1. โปรดสังเกตกฎไฟร์วอลล์ ICMP, ภายใน, RDP และ SSH ที่มีอยู่ โปรเจ็กต์ Google Cloud แต่ละโปรเจ็กต์จะเริ่มต้นด้วยเครือข่ายเริ่มต้นและกฎไฟร์วอลล์เหล่านี้
  2. คลิกสร้างกฎไฟร์วอลล์
  3. ตั้งค่าต่อไปนี้ และปล่อยให้ค่าอื่นๆ เป็นค่าเริ่มต้น

พร็อพเพอร์ตี้

ค่า (พิมพ์ค่าหรือเลือกตัวเลือกที่ระบุ)

ชื่อ

default-allow-health-check

เครือข่าย

ค่าเริ่มต้น

เป้าหมาย

แท็กเป้าหมายที่ระบุ

แท็กเป้าหมาย

allow-health-check

ตัวกรองแหล่งที่มา

ช่วง IP

ช่วง IP ต้นทาง

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 Console ให้ไปที่เมนูการนำทาง ( mainmenu.png) > Compute Engine > เทมเพลตอินสแตนซ์ แล้วคลิกสร้างเทมเพลตอินสแตนซ์
  2. สำหรับ Name ให้พิมพ์ lb-backend-template
  3. สำหรับ Series ให้เลือก N1
  4. คลิก Networking, Disks, Security, Management , Sole-Tenancy

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)

แท็กเครือข่าย

allow-health-check

  1. คลิกสร้าง
  2. รอให้มีการสร้างเทมเพลตอินสแตนซ์

สร้างกลุ่มอินสแตนซ์ที่มีการจัดการ

  1. ขณะยังอยู่ในหน้า Compute Engine ให้คลิกกลุ่มอินสแตนซ์ในเมนูด้านซ้าย

ed419061ad2b982c.png

  1. คลิกสร้างกลุ่มอินสแตนซ์ เลือกกลุ่มอินสแตนซ์ที่มีการจัดการใหม่ (ไม่เก็บสถานะ)
  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

กำหนดค่าตัวจัดสรรภาระงาน HTTP เพื่อส่งการจราจรของข้อมูลไปยัง lb-backend-example: แบ็กเอนด์

เริ่มต้นการกำหนดค่า

  1. ใน Cloud Console ให้คลิกเมนูการนำทาง ( mainmenu.png) > คลิกบริการเครือข่าย > การจัดสรรภาระงาน แล้วคลิกสร้างตัวจัดสรรภาระงาน
  2. ใน HTTP(S) Load Balancing ให้คลิกเริ่มการกำหนดค่า

4f8b8cb10347ecec.png

  1. เลือกจากอินเทอร์เน็ตไปยัง VM ของฉัน ตัวจัดสรรภาระงาน HTTP(S) แบบคลาสสิก แล้วคลิกต่อไป
  2. ตั้งชื่อเป็น http-lb

กำหนดค่าแบ็กเอนด์

บริการแบ็กเอนด์กำหนดเส้นทางการจราจรของข้อมูลขาเข้าไปยังแบ็กเอนด์ที่แนบอย่างน้อย 1 รายการ แบ็กเอนด์แต่ละรายการประกอบด้วยกลุ่มอินสแตนซ์และข้อมูลเมตาความสามารถในการแสดงผลเพิ่มเติม

  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 สำหรับแบ็กเอนด์แล้ว ให้ตรวจสอบว่ามีการส่งต่อการรับส่งข้อมูลไปยังบริการแบ็กเอนด์แล้ว หากต้องการทดสอบการเข้าถึง IPv4 ในตัวจัดสรรภาระงาน HTTP ให้เปิดแท็บใหม่ในเบราว์เซอร์และไปที่ http://[LB_IP_v4] อย่าลืมแทนที่ [LB_IP_v4] ด้วยที่อยู่ IPv4 ของตัวจัดสรรภาระงาน

7. สร้างและทำให้โทเค็นเซสชัน reCAPTCHA และคีย์ของเว็บไซต์หน้าทดสอบใช้งานได้

การผสานรวม reCAPTCHA Enterprise for WAF กับ Google Cloud Armor มีฟีเจอร์ต่อไปนี้ หน้าทดสอบ reCAPTCHA, โทเค็นการดำเนินการ reCAPTCHA และโทเค็นเซสชันของ reCAPTCHA ใน Code Lab นี้ เราจะใช้คีย์เว็บไซต์โทเค็นเซสชัน reCATCHA และเว็บไซต์หน้าทดสอบ reCAPTCHA WAF

สร้างโทเค็นเซสชัน reCAPTCHA และ คีย์ของเว็บไซต์หน้าทดสอบ WAF

ก่อนที่จะสร้างคีย์เว็บไซต์สำหรับโทเค็นเซสชันและคีย์เว็บไซต์ของหน้าทดสอบ ให้ตรวจสอบอีกครั้งว่าคุณได้เปิดใช้ reCAPTCHA Enterprise API ตามที่ระบุไว้ใน "เปิดใช้ API" แล้ว ในช่วงต้น

reCAPTCHA JavaScript จะตั้งค่าโทเค็นเซสชัน reCAPTCHA เป็นคุกกี้ในเบราว์เซอร์ของผู้ใช้ปลายทางหลังการประเมิน เบราว์เซอร์ของผู้ใช้ปลายทางจะแนบคุกกี้และรีเฟรชคุกกี้ตราบใดที่ reCAPTCHA JavaScript ยังคงใช้งานได้อยู่

  1. สร้างคีย์เว็บไซต์สำหรับโทเค็นเซสชัน reCAPTCHA และเปิดใช้ฟีเจอร์ WAF สำหรับคีย์ นอกจากนี้เราจะตั้งค่าบริการ WAF เป็น Cloud Armor เพื่อเปิดใช้การผสานรวม 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 ไปยัง VM

6d7b0fd12a667b5f.png

  1. ไปที่ไดเรกทอรีรากของเว็บเซิร์ฟเวอร์และเปลี่ยนผู้ใช้เป็นราก -
@lb-backend-example-4wmn:~$ cd /var/www/html/
@lb-backend-example-4wmn:/var/www/html$ sudo su
  1. อัปเดตหน้า Landing Page.html และฝังคีย์เว็บไซต์โทเค็นเซสชัน reCAPTCHA มีการตั้งค่าคีย์ของเว็บไซต์สำหรับโทเค็นเซสชันในส่วนหัวของหน้า Landing Page ดังต่อไปนี้

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

อย่าลืมแทนที่โทเค็นก่อนที่จะอัปเดตไฟล์ 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. สร้างหน้าตัวอย่างอีก 3 หน้าเพื่อทดสอบนโยบายการจัดการบ็อต
  • 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. เพิ่มกฎการจัดการบ็อตเพื่อเปลี่ยนเส้นทางการเข้าชมไปยัง Google reCAPTCHA หากเส้นทาง URL ตรงกับค่ามัธยฐาน-score.html และมีคะแนนเท่ากับ 0.5
  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-policy นโยบายของคุณควรมีลักษณะดังต่อไปนี้

74852618aaa96786.png

9. ตรวจสอบการจัดการบ็อตด้วย Cloud Armor

  1. เปิดเบราว์เซอร์และป้อน URL http://[LB_IP_v4]/index.html ไปที่ "ลิงก์อนุญาตการเข้าชม" คุณควรได้รับอนุญาตผ่าน

edf3e6ca238d2ee7.png

  1. เปิดหน้าต่างใหม่ในโหมดไม่ระบุตัวตนเพื่อให้แน่ใจว่าเรามีเซสชันใหม่ ป้อน URL http://[LB_IP_v4]/index.html และไปที่ "เข้าชมลิงก์ที่บล็อก" คุณควรได้รับข้อผิดพลาด 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. ด้านล่างนี้คือ Query MQL(การตรวจสอบภาษาของคำค้นหา) คุณสามารถคัดลอกและวางลงในตัวแก้ไข Query -
resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:(recaptcha-policy)
  1. คลิกเรียกใช้คำค้นหา
  2. ค้นหารายการบันทึกในผลการค้นหาที่มีคำขอสำหรับ http://[LB_IP_v4]/good-score.html ขยาย jsonPayload.ExpandEnforcementPolicyPolicy

b7b1712642cf092b.png

  1. ทำเช่นเดียวกันนี้กับ http://[LB_IP_v4]/bad-score.html และ http://[LB_IP_v4]/median-score.html

c28f96d83056725a.png

8c4803d75a77142c.png

โปรดทราบว่าการดำเนินการที่กำหนดค่าไว้ตั้งค่าเป็น ALLOW, DENY หรือ GOOGLE_RECAPTCHA ด้วยชื่อ recaptcha-policy

ยินดีด้วย คุณเสร็จสิ้น Lab นี้ในการจัดการบ็อตด้วย Cloud Armor แล้ว

©2020 Google LLC สงวนลิขสิทธิ์ Google และโลโก้ของ Google เป็นเครื่องหมายการค้าของ Google LLC ชื่อบริษัทและผลิตภัณฑ์อื่นๆ ทั้งหมดอาจเป็นเครื่องหมายการค้าของบริษัทที่เป็นเจ้าของ

10. ทำความสะอาดห้องปฏิบัติการ

  1. ไปที่ Network Security >> ชุดเกราะระบบคลาวด์ >> %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