รายการ 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

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

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

7e9c09a008e04656.png

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

เข้าสู่ระบบ Cloud Shell และตั้งค่า projectid

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 ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID ในภายหลังใน Codelab นี้

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

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

เริ่มต้น Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

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 คุณควรเห็น 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

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

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

  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 ไม่ใช่ 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 Armor ใหม่สำหรับรายการ 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

กำหนดค่ารายการที่อยู่ IP ที่มีชื่อจาก Cloud Shell โดยอิงตามชุดนิพจน์ 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. หากต้องการตรวจสอบ ให้เปิดหน้าต่างเทอร์มินัลจากเวิร์กสเตชัน แล้วใช้คำสั่ง curl กับที่อยู่ 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 ที่ระบุชื่อ