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

1. บทนำ

การจัดสรรภาระงาน HTTP(S) ของ Google Cloud จะได้รับการติดตั้งใช้งานที่ขอบของเครือข่าย 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 ด้วยการตรวจสอบประสิทธิภาพการทำงานที่เหมาะสม
  • วิธีสร้างคีย์ของเว็บไซต์หน้าการทดสอบ WAF ของ reCAPTCHA และเชื่อมโยงกับนโยบายความปลอดภัยของ 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 ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดแหล่งข้อมูลเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตามวิธีการ "ล้างข้อมูล" ที่ตอนท้ายของ Codelab ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

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

ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์ใน 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, internal, RDP และ SSH ที่มีอยู่ โปรเจ็กต์ Google Cloud แต่ละโปรเจ็กต์จะเริ่มต้นด้วยเครือข่ายเริ่มต้นและกฎไฟร์วอลล์เหล่านี้
  2. คลิกสร้างกฎไฟร์วอลล์
  3. ตั้งค่าต่อไปนี้ โดยปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น

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

ค่า (ป้อนค่าประเภทหรือเลือกตัวเลือกตามที่ระบุ)

ชื่อ

default-allow-health-check

เครือข่าย

ค่าเริ่มต้น

เป้าหมาย

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

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

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 Console ให้ไปที่เมนูการนำทาง ( 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)

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

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) ให้คลิกเริ่มการกำหนดค่า

4f8b8cb10347ecec.png

  1. เลือกจากอินเทอร์เน็ตไปยัง VM ของฉัน ตัวจัดสรรภาระงาน HTTP(S) แบบคลาสสิก แล้วคลิกต่อไป
  2. ตั้งค่า Name เป็น 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

กำหนดค่าฟรอนท์เอนด์

กฎของโฮสต์และเส้นทางจะระบุการกำหนดเส้นทางการรับส่งข้อมูล เช่น คุณกำหนดเส้นทางการรับส่งข้อมูลวิดีโอไปยังแบ็กเอนด์หนึ่ง และการรับส่งข้อมูลแบบคงที่ไปยังแบ็กเอนด์อื่นได้ อย่างไรก็ตาม คุณไม่ได้กำหนดค่ากฎของโฮสต์และเส้นทางใน Lab นี้

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

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

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

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

  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. สร้างคีย์ของเว็บไซต์หน้าการทดสอบ WAF ของ reCAPTCHA และเปิดใช้ฟีเจอร์ 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 คุณควรเห็นคีย์ที่สร้างไว้ในส่วนคีย์ขององค์กร -

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. อัปเดตหน้า index.html ของหน้า Landing Page และฝังคีย์เว็บไซต์โทเค็นเซสชัน reCAPTCHA ระบบจะตั้งค่าคีย์เว็บไซต์โทเค็นเซสชันในส่วนหัวของหน้า Landing Page ดังนี้

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

b7b1712642cf092b.png

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

c28f96d83056725a.png

8c4803d75a77142c.png

โปรดสังเกตว่า configuredAction จะตั้งค่าเป็น ALLOW, DENY หรือ GOOGLE_RECAPTCHA โดยมีชื่อ recaptcha-policy

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

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

10. การล้างข้อมูลใน Lab

  1. ไปที่การรักษาความปลอดภัยของเครือข่าย >> Cloud Armor >> %ชื่อนโยบาย% แล้วเลือก "ลบ"

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