รายการ Cloud Armor NamedIP

1. บทนำ

รายการที่อยู่ IP ที่มีชื่อของ Google Cloud Armor ให้คุณอ้างอิงรายการที่อยู่ IP และช่วง IP ที่ผู้ให้บริการบุคคลที่สามเป็นผู้ดูแล คุณกำหนดค่ารายการที่อยู่ IP ที่มีชื่อภายในนโยบายความปลอดภัยได้ คุณไม่จำเป็นต้องระบุที่อยู่ IP หรือช่วง IP แต่ละรายการด้วยตนเอง

สิ่งที่คุณจะได้เรียนรู้

  • ประโยชน์ของรายการที่อยู่ IP ที่มีชื่อของ Cloud Armor
  • สร้างนโยบายความปลอดภัยของ Cloud Armor
  • ทำให้รายการที่อยู่ IP ที่มีชื่อของ Cloud Armor ใช้งานได้
  • สร้างตัวจัดสรรภาระงานส่วนกลาง
  • สร้างอินสแตนซ์ที่มีการจัดการพร้อมแอปพลิเคชันทดสอบตัวอย่าง

สิ่งที่คุณต้องมี

  • ประสบการณ์เกี่ยวกับนโยบายความปลอดภัยและตัวจัดสรรภาระงาน

2. อนุญาตเฉพาะการเข้าชมจากผู้ให้บริการบุคคลที่สามที่ได้รับอนุญาตเท่านั้น

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

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

ในตัวอย่างนี้ ผู้ให้บริการ CDN เผยแพร่รายการที่อยู่ IP 23.235.32.0/20, 43.249.72.0/22, 红, ผู้ใช้ CDN จะกำหนดค่ากฎความปลอดภัยที่อนุญาตเฉพาะการรับส่งข้อมูลที่มาจากที่อยู่ IP เหล่านี้เท่านั้น ด้วยเหตุนี้ จุดเข้าใช้งานของผู้ให้บริการ CDN 2 จุดจึงได้รับอนุญาต (23.235.32.10 และ 43.249.72.10) และด้วยเหตุนี้จึงอนุญาตการรับส่งข้อมูล การรับส่งข้อมูลจากจุดเข้าใช้งาน 198.51.100.1 ที่ไม่ได้รับอนุญาตถูกบล็อก

27243e72ee25ee16.png

ที่อยู่ IP ที่ตั้งชื่อของ Google Cloud Armor

3. ลดความซับซ้อนของการกำหนดค่าและการจัดการโดยใช้กฎที่กำหนดค่าล่วงหน้า

ผู้ให้บริการ CDN มักจะใช้ที่อยู่ IP ที่เป็นที่รู้จักและผู้ใช้ CDN จำนวนมากจำเป็นต้องใช้ รายการเหล่านี้จะเปลี่ยนแปลงเมื่อเวลาผ่านไป เมื่อผู้ให้บริการเพิ่ม นําออก และอัปเดตที่อยู่ IP

การใช้รายการที่อยู่ IP ที่มีชื่อในกฎนโยบายความปลอดภัยทำให้กระบวนการกำหนดค่าและจัดการที่อยู่ IP ง่ายขึ้น เนื่องจาก Google Cloud Armor จะซิงค์ข้อมูลจากผู้ให้บริการ CDN โดยอัตโนมัติทุกวัน ซึ่งช่วยลดขั้นตอนที่ต้องเสียเวลาและมีโอกาสเกิดข้อผิดพลาดได้ง่ายในการดูแลรายการที่อยู่ IP ขนาดใหญ่ด้วยตนเอง

ผู้ให้บริการรายการที่อยู่ IP

ผู้ให้บริการรายการที่อยู่ IP ในตารางต่อไปนี้รองรับ Google Cloud Armor ผู้ให้บริการ CDN เหล่านี้เป็นพาร์ทเนอร์กับ Google ระบบจะเผยแพร่รายการที่อยู่ IP ผ่าน URL สาธารณะแต่ละรายการ

พาร์ทเนอร์เหล่านี้จะมีรายการที่อยู่ IPv4 และที่อยู่ IPv6 แยกกัน Google Cloud Armor จะใช้ URL ที่ให้ไว้เพื่อดึงข้อมูลรายการ แล้วแปลงรายการดังกล่าวเป็นรายการที่อยู่ IP ที่มีชื่อ คุณอ้างอิงรายการตามชื่อในตาราง

7e9c09a008e04656.png

หรือใช้ Cloud Shell เพื่อรับรายการที่อยู่ IP ที่มีชื่อที่กำหนดค่าไว้ล่วงหน้า

เข้าสู่ระบบ Cloudshell และตั้งค่ารหัสโปรเจ็กต์

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]

Perform setting your projectID:
projectid=YOUR-PROJECT-ID

echo $projectid

จาก Cloud Shell

gcloud compute security-policies list-preconfigured-expression-sets \
    --filter="id:sourceiplist"

โดยจะแสดงผลลัพธ์ต่อไปนี้

EXPRESSION_SET
sourceiplist-fastly
sourceiplist-cloudflare
sourceiplist-imperva

4. โทโพโลยี Codelab

68a800f9adbf4570.png

5. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

  1. ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี)

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID ในภายหลัง

  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud

การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ซึ่งจะแนะนำคุณเกี่ยวกับวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

เริ่มต้น Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

6. สร้างเครือข่าย VPC

เครือข่าย VPC

จาก Cloud Shell

gcloud compute networks create 

named-list-vpc

 --subnet-mode custom

สร้างซับเน็ต

จาก Cloud Shell

gcloud compute networks subnets create named-ip-subnet \
        --network 

named-list-vpc

 --range 10.0.0.0/24 --region us-east1

สร้างกฎไฟร์วอลล์

จาก Cloud Shell

gcloud compute --project=$projectid firewall-rules create default-allow-http --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 
gcloud compute --project=$projectid firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=named-list-vpc --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16 

สร้างตัวจัดสรรภาระงาน

สร้างเทมเพลตอินสแตนซ์

จาก Cloud Shell

gcloud beta compute --project=$projectid instance-templates create us-east1-template --machine-type=e2-medium --subnet=projects/$projectid/regions/us-east1/subnetworks/named-ip-subnet --network-tier=PREMIUM --metadata=startup-script-url=gs://cloud-training/gcpnet/httplb/startup.sh --maintenance-policy=MIGRATE --image=debian-10-buster-v20210217 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=us-east1-template --no-shielded-secure-boot --no-shielded-vtpm --no-shielded-integrity-monitoring --reservation-affinity=any

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

จาก Cloud Shell

gcloud compute --project=$projectid  instance-groups managed create us-east1-mig --base-instance-name=us-east1-mig --template=us-east1-template --size=1 --zone=us-east1-b

7. ยืนยันแบ็กเอนด์

ยืนยันว่าระบบกำลังสร้างอินสแตนซ์ VM ในทั้ง 2 ภูมิภาคและเข้าถึงเว็บไซต์ HTTP ของอินสแตนซ์เหล่านั้น

  1. ยังคงอยู่ใน Compute Engine ให้คลิกอินสแตนซ์ VM ในเมนูด้านซ้าย
  2. สังเกตอินสแตนซ์ที่เริ่มต้นด้วย us-east1-mig อินสแตนซ์เหล่านี้เป็นส่วนหนึ่งของอินสแตนซ์ที่มีการจัดการ
  3. คลิก IP ภายนอกของอินสแตนซ์ us-east1-mig คุณควรเห็น Client IP (ที่อยู่ IP ของคุณ) ชื่อโฮสต์ (ขึ้นต้นด้วย us-east1-mig)

กำหนดค่าตัวจัดสรรภาระงาน HTTP

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

start_config.png

  1. เลือก "จากอินเทอร์เน็ตไปยัง VM ของฉัน" แล้วคลิก "ดำเนินการต่อ"
  2. ตั้งชื่อเป็น http-lb.

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

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

  1. คลิกการกำหนดค่าแบ็กเอนด์
  2. สำหรับบริการแบ็กเอนด์และ ที่เก็บข้อมูลแบ็กเอนด์ ให้คลิกสร้างหรือเลือกบริการแบ็กเอนด์และ ที่เก็บข้อมูลแบ็กเอนด์ จากนั้นคลิกบริการแบ็กเอนด์ แล้วคลิกสร้างบริการแบ็กเอนด์
  3. ประเภทแบ็กเอนด์คืออินสแตนซ์
  4. ตั้งค่าต่อไปนี้และปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น: 18bf7a852f0759ee.png
  5. คลิกเสร็จสิ้น
  6. สำหรับการตรวจสอบประสิทธิภาพการทำงาน ให้เลือก "สร้างการตรวจสอบประสิทธิภาพการทำงาน" health_check.png
    1. ตั้งค่าต่อไปนี้และปล่อยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น: d2f85af1e988532b.png
  7. คลิก บันทึกและดำเนินการต่อ
  8. คลิกสร้างเพื่อสร้างบริการแบ็กเอนด์

b00c217bf592f0.png

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

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

  1. คลิกการกำหนดค่าฟรอนท์เอนด์
  2. http-front-end
  3. ระบุรายการต่อไปนี้ โดยให้ค่าอื่นๆ ทั้งหมดเป็นค่าเริ่มต้น 51ae16211e72142f.png
  4. คลิกเสร็จสิ้น

8. ตรวจสอบและสร้างตัวจัดสรรภาระงาน HTTP

  1. คลิก "ตรวจสอบ" และดำเนินการขั้นสุดท้าย

8efe5b462a80071d.png

  1. ตรวจสอบบริการแบ็กเอนด์และฟรอนท์เอนด์

30b06910bf7fae29.png

  1. คลิก "สร้าง"
  2. รอสักครู่เพื่อสร้างตัวจัดสรรภาระงาน
  3. คลิกชื่อตัวจัดสรรภาระงาน (http-lb)
  4. จดบันทึกที่อยู่ IPv4 ของตัวจัดสรรภาระงานสำหรับงานถัดไปซึ่งเรียกว่า http-lb

9. ตรวจสอบการเข้าถึงที่ไม่ได้รับอนุญาตที่สำเร็จ

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

  1. ระบุที่อยู่ IP ของตัวจัดสรรภาระงานที่สร้างขึ้นในขั้นตอนก่อนหน้า (http-lb) และวางลงในเว็บเบราว์เซอร์ เอาต์พุตจะคล้ายกันกับภาพหน้าจอด้านล่าง

หมายเหตุ: ขั้นตอนนี้อาจใช้เวลาหลายนาที เมื่อสร้างหน้าเว็บแล้ว IP ไคลเอ็นต์จะมาจาก Google Front End ไม่ใช่ IP ของเวิร์กสเตชัน

f93410e9568f1f32.png

จากเวิร์กสเตชันจะดำเนินการตรวจสอบที่คล้ายกันตามที่ระบุไว้ด้านล่าง

bash-3.2$ curl <load-balancer-IP>

10. ตัวอย่างเอาต์พุต

bash-3.2$ curl <load-balancer-ip>
<h1>HTTP Load Balancing Lab</h1><h2>Client IP</h2>Your IP address : 35.191.0.151<h2>Hostname</h2>Server Hostname: us-east1-mig-8nqq<h2>Server Location</h2>Region and Zone: us-east1-b

11. กำหนดค่ารายการ IP ที่มีชื่อ

สร้างนโยบาย Cloud Amour ใหม่สำหรับรายการ IP ที่มีชื่อ

จาก Cloud Shell

gcloud compute --project=$projectid security-policies create ca-policy

จาก Cloud Shell

gcloud compute --project=$projectid security-policies rules update 2147483647 --action=deny-403 --security-policy=ca-policy --description="Default rule, higher priority overrides it" --src-ip-ranges=\*

ระบุที่อยู่รายการ IP ที่มีชื่อ CDN ที่ใช้ได้

จาก Cloud Shell

gcloud compute security-policies list-preconfigured-expression-sets \
    --filter="id:sourceiplist"

โดยจะแสดงผลลัพธ์ต่อไปนี้

EXPRESSION_SET
sourceiplist-fastly
sourceiplist-cloudflare
sourceiplist-imperva

จาก Cloud Shell ให้กำหนดค่ารายการที่อยู่ IP ที่มีชื่อตามชุดนิพจน์ที่พร้อมใช้งาน CDN ของคุณ

gcloud beta compute security-policies rules create 600 \
    --security-policy ca-policy \
    --expression "evaluatePreconfiguredExpr('expression_set')" \
    --action "allow"

ตัวอย่างการใช้ Cloudflare

gcloud beta compute security-policies rules create 600 \
    --security-policy ca-policy \
    --expression "evaluatePreconfiguredExpr('sourceiplist-cloudflare')" \
    --action "allow"

12. ใช้นโยบายความปลอดภัยของ CA

ใช้นโยบายความปลอดภัยของ CA และรอหลายนาทีเพื่อเผยแพร่นโยบายทั่วโลก

gcloud compute backend-services update http-backend --security-policy ca-policy --global

13. การตรวจสอบที่อยู่ IP ที่มีชื่อ

  1. เนื่องจากมีการใช้นโยบายความปลอดภัย การเข้าถึงตัวจัดสรรภาระงานจากเวิร์กสเตชันจึงไม่ได้รับอนุญาต
  2. หากต้องการตรวจสอบ ให้เปิดหน้าต่างเทอร์มินัลจากเวิร์กสเตชัน แล้วทำการ URL ไปยังที่อยู่ IP ของตัวจัดสรรภาระงาน เอาต์พุตจาก curl จะแสดงค่า "403" ข้อผิดพลาด "ต้องห้าม" เนื่องจากเวิร์กสเตชันของคุณไม่ได้รับอนุญาตแล้ว

จากเวิร์กสเตชันของคุณ

bash-3.2$ curl <load-balancer-IP>
<!doctype html><meta charset="utf-8"><meta name=viewport content="width=device-width, initial-scale=1"><title>403</title>403 Forbidden

ขั้นตอนการล้างข้อมูล

gcloud -q compute backend-services update http-backend --security-policy "" --global

gcloud -q compute --project=$projectid security-policies delete ca-policy

gcloud -q compute forwarding-rules delete http-front-end --global

gcloud -q compute target-http-proxies delete http-lb-target-proxy

gcloud -q compute url-maps delete http-lb

gcloud -q compute backend-services delete http-backend --global

gcloud -q compute health-checks delete http-health-check

gcloud -q compute --project=$projectid instance-groups managed delete us-east1-mig --zone=us-east1-b

gcloud -q beta compute --project=$projectid instance-templates delete us-east1-template

gcloud -q compute --project=$projectid firewall-rules delete default-allow-http

gcloud -q compute --project=$projectid firewall-rules delete default-allow-health-check

gcloud -q compute networks subnets delete named-ip-subnet --region us-east1

gcloud -q compute networks delete named-list-vpc

14. ยินดีด้วย

ขอแสดงความยินดีที่เรียน Codelab จนจบ

หัวข้อที่ครอบคลุม

  • ประโยชน์ของรายการที่อยู่ IP ที่มีชื่อของ Cloud Armor
  • สร้างตัวจัดสรรภาระงานส่วนกลาง
  • สร้างอินสแตนซ์ที่มีการจัดการพร้อมแอปพลิเคชันทดสอบตัวอย่าง
  • สร้างนโยบายความปลอดภัยของ Cloud Armor
  • ทำให้รายการที่อยู่ IP ที่มีชื่อของ Cloud Armor ใช้งานได้
  • ตรวจสอบนโยบาย Cloud Armor ของ IP ที่มีชื่อ