การป้องกัน Edge Cache ด้วย Cloud Armor

1. บทนำ

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

ในแล็บนี้ เราจะสร้างที่เก็บข้อมูล GCS, อัปโหลดรูปภาพไปยังที่เก็บข้อมูล, ผูกที่เก็บข้อมูลกับตัวจัดสรรภาระงาน แล้วเปิดใช้นโยบาย Cloud CDN และ Edge Security ในที่เก็บข้อมูล

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

  • วิธีตั้งค่า Bucket ของ Cloud Storage ที่มีเนื้อหาที่แคชได้
  • วิธีสร้างนโยบายความปลอดภัยของ Edge เพื่อปกป้องเนื้อหา
  • วิธียืนยันว่านโยบายความปลอดภัยของ Edge ทำงานได้ตามที่คาดไว้

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

  • ความรู้พื้นฐานด้านเครือข่ายและความรู้เกี่ยวกับ HTTP
  • ความรู้พื้นฐานเกี่ยวกับบรรทัดคำสั่ง Unix/Linux

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

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.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 ในแถบเครื่องมือด้านขวาบน

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.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

3. สร้าง Bucket ของ Cloud Storage

ใน Cloud Console ให้ไปที่เมนูการนำทาง > Cloud Storage > เบราว์เซอร์ คลิกสร้าง Bucket

baf3d3c74282ecba.png

กฎการตั้งชื่อ Bucket

  • อย่าใส่ข้อมูลที่ละเอียดอ่อนลงในชื่อ Bucket เนื่องจากเนมสเปซของ Bucket จะปรากฏแบบสาธารณะต่อทั่วโลก
  • ชื่อที่เก็บข้อมูลต้องมีเฉพาะตัวอักษรพิมพ์เล็ก ตัวเลข ขีดกลาง (-), ขีดล่าง (_) และจุด (.) เท่านั้น ชื่อที่มีจุดต้องผ่านการยืนยัน
  • ชื่อที่เก็บข้อมูลต้องขึ้นต้นและลงท้ายด้วยตัวเลขหรือตัวอักษร
  • ชื่อที่เก็บข้อมูลต้องมีความยาว 3-63 อักขระ ชื่อที่มีจุดจะมีความยาวได้สูงสุด 222 อักขระ แต่ละคอมโพเนนต์ที่คั่นด้วยจุดจะมีความยาวได้ไม่เกิน 63 อักขระ
  • ชื่อที่เก็บข้อมูลต้องไม่แสดงเป็นที่อยู่ IP ในรูปแบบทศนิยมแบบจุด (เช่น 192.168.5.4)
  • ชื่อของ Bucket ขึ้นต้นด้วยคำนำหน้า "goog" ไม่ได้
  • ชื่อที่เก็บข้อมูลต้องไม่มีคำว่า "google" หรือการสะกดคำว่า "google" ที่คล้ายกัน
  • นอกจากนี้ เพื่อให้เป็นไปตามข้อกำหนดของ DNS และความเข้ากันได้ในอนาคต คุณไม่ควรใช้ขีดล่าง (_) หรือมีจุดที่อยู่ติดกับจุดหรือขีดคั่นอื่น เช่น ".." หรือ "-." หรือ ".-" จะใช้ในชื่อ DNS ไม่ได้

คลิกดำเนินการต่อ

ประเภทสถานที่ตั้ง: ภูมิภาค

สถานที่ตั้ง: เลือกภูมิภาคที่อยู่ไกลจากคุณ

คลิกดำเนินการต่อ

คลาสพื้นที่เก็บข้อมูลเริ่มต้น: มาตรฐาน

คลิกดำเนินการต่อ

ยกเลิกการเลือก ช่องทำเครื่องหมายบังคับใช้การป้องกันการเข้าถึงแบบสาธารณะใน Bucket นี้ในส่วนป้องกันการเข้าถึงแบบสาธารณะ

เลือกละเอียดในส่วนการควบคุมการเข้าถึง

คลิกดำเนินการต่อ

เมื่อกำหนดค่าที่เก็บข้อมูลแล้ว ให้คลิกสร้าง

เพียงเท่านี้ คุณก็สร้าง Bucket ของ Cloud Storage เรียบร้อยแล้ว

4. อัปโหลดออบเจ็กต์ไปยัง Bucket

ตอนนี้ให้อัปโหลดออบเจ็กต์ลงใน Bucket

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

จาก Cloud Shell

wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png

ใช้คำสั่ง gsutil cp เพื่ออัปโหลดรูปภาพจากตำแหน่งที่คุณบันทึกไว้ไปยัง Bucket ที่คุณสร้าง

จาก Cloud Shell

gsutil cp google.png gs://YOUR-BUCKET-NAME

จากนั้นให้นำรูปภาพที่ดาวน์โหลดออกโดยทำดังนี้

จาก Cloud Shell

rm google.png

ค้นหาออบเจ็กต์ แล้วคลิกจุด 3 จุดทางด้านขวาและแก้ไขสิทธิ์ให้เป็นแบบสาธารณะ

821aad82d8633922.png

30a975d3ad22d33d.png

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

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

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

ก่อนอื่น ให้ตั้งชื่อตัวจัดสรรภาระงานที่จะสร้าง

สร้าง Bucket แบ็กเอนด์

สร้าง Bucket แบ็กเอนด์ใหม่ซึ่งเป็น Bucket ที่คุณเพิ่งสร้าง แล้วเลือก "เปิดใช้ CDN" และ "แคชเนื้อหาสแตติก" คลิกสร้าง

ed392a56538d499e.png

สร้างกฎของโฮสต์และเส้นทาง

ไปที่กฎของโฮสต์และเส้นทางทางด้านซ้าย เราจะใช้กฎโฮสต์/เส้นทางอย่างง่ายและส่งคำขอไปยังที่เก็บข้อมูล

7c1a664e0d1f15b0.png

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

เลือกการกำหนดค่าฟรอนท์เอนด์ สำหรับการกำหนดค่าส่วนหน้า เราจะใช้ HTTP (แม้ว่า HTTPS จะใช้ได้เช่นกันหากคุณมีใบรับรอง) และที่อยู่ IP แบบชั่วคราว และตรวจสอบว่าคุณได้เลือกเครือข่ายระดับพรีเมียมแล้ว

2597a5e63d618622.png

คลิกสร้าง

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

รับ IP ของตัวจัดสรรภาระงานจากคอนโซลโดยคลิกชื่อตัวจัดสรรภาระงานในรายการตัวจัดสรรภาระงานสำหรับโปรเจ็กต์

9b757362d806e835.png

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

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

จากเทอร์มินัล

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

เอาต์พุต

armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png
*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng
< Expires: Mon, 13 Dec 2021 22:58:26 GMT
< Date: Mon, 13 Dec 2021 21:58:26 GMT
< Cache-Control: public, max-age=3600
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer

ตรวจสอบว่าเนื้อหาแสดงจาก CDN ผ่านการตรวจสอบ CDN หรือการจัดสรรภาระงาน คุณควรจะได้รับอัตราการเข้าชมที่ใกล้เคียง 100% หากต้องการเรียกใช้การค้นหา 2-3 รายการ ให้ทำดังนี้

จากเทอร์มินัล

#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done

ยืนยันเนื้อหาที่ Cloud CDN แสดง

ตรวจสอบว่าคุณแสดงการเข้าชมจาก CDN โดยไปที่บริการเครือข่าย >> CDN

a52d0ba4c084aa05.png

6. ลบออบเจ็กต์ออกจาก GCS

ตอนนี้แคชได้รับการป้อนข้อมูลแล้ว เรามาลบออบเจ็กต์ออกจาก Bucket เพื่อยืนยันว่าเราใช้นโยบายกับแคช ไม่ใช่แบ็กเอนด์

ไปที่ Cloud Storage >> %ชื่อ Bucket% >> ออบเจ็กต์

เลือกรูปภาพแล้วลบ

a1cc1bb9a0ff41df.png

7. สร้างนโยบายความปลอดภัยของ Edge สำหรับแคช CDN

ไปที่ความปลอดภัยของเครือข่าย >> Cloud Armor แล้วคลิกสร้างนโยบาย

เลือกรายการต่อไปนี้

ประเภทนโยบาย: นโยบายความปลอดภัยของ Edge

การดำเนินการเริ่มต้น: ปฏิเสธ

7a12374be33026fd.png

b7c4efc091272358.png

77ddbcddd07b65d2.png

ใช้นโยบายกับที่เก็บข้อมูลแบ็กเอนด์

8. ตรวจสอบนโยบายความปลอดภัยของ Edge

ตอนนี้เราได้สร้างนโยบายความปลอดภัยของ Edge ไว้หน้าถังเก็บข้อมูลแบ็กเอนด์แล้ว มาตรวจสอบกันว่านโยบายทำงานได้ตามที่คาดไว้หรือไม่

ตรวจสอบนโยบายความปลอดภัย

หลังจากผ่านไป 2-3 นาที คุณจะตรวจสอบได้ว่านโยบาย Cloud Armor ทำงานอยู่ จากบรรทัดคำสั่ง การเรียกใช้คำสั่งต่อไปนี้จะทำให้คุณได้รับข้อผิดพลาด 403

จากเทอร์มินัล

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

เอาต์พุต

curl -svo /dev/null http://34.98.81.123/google.png
*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw
< Content-Type: application/xml; charset=UTF-8
< Content-Length: 111
< Date: Mon, 13 Dec 2021 23:09:35 GMT
< Expires: Mon, 13 Dec 2021 23:09:35 GMT
< Cache-Control: private, max-age=0
< Server: UploadServer
<

ตรวจสอบบันทึก

จากนั้นคุณสามารถตรวจสอบบันทึกเพื่อดูนโยบายความปลอดภัยที่บังคับใช้ได้ ไปที่การดำเนินการ >> การบันทึก >> เครื่องมือสำรวจบันทึก

ป้อนข้อมูลโค้ดด้านล่างลงในคำค้นหา แล้วคลิกเรียกใช้

14972af5ae6c182a.png

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)

โปรดทราบการตอบกลับ 403 และนโยบายความปลอดภัยที่บังคับใช้

cddc48ca93ad79ca.png

นำนโยบายความปลอดภัยออก

นำนโยบายความปลอดภัยออกและค้นหาออบเจ็กต์จากแคช

ไปที่ความปลอดภัยของเครือข่าย >> Cloud Armor >> %POLICY NAME% >> เป้าหมาย แล้วนำที่เก็บข้อมูลเป้าหมายออก

350655729a89eb33.png

ยืนยันการนำนโยบายออก

หลังจากผ่านไป 2-3 นาที ให้ส่ง curl อีกรายการไปยังทรัพยากรในที่เก็บข้อมูล คุณจะได้รับการตอบกลับ 200 ในครั้งนี้

จากเทอร์มินัล

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

เอาต์พุต

armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png

*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M
< Date: Mon, 13 Dec 2021 23:06:46 GMT
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer
< Age: 1621
< Cache-Control: public,max-age=3600
<
{ [775 bytes data]
* Connection #0 to host 34.98.81.123 left intact
* Closing connection 0

ยินดีด้วย คุณทำ Lab นี้เกี่ยวกับนโยบายความปลอดภัยของ Edge ของ Cloud Armor เสร็จแล้ว

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

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

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

21eefb5f375e8fee.png

ไปที่ Cloud Storage เลือก Bucket ที่คุณสร้างไว้ แล้วคลิกลบ

ef2fa8d45c1d3452.png

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

ee2e78c10f4104eb.png

10. ยินดีด้วย

คุณทำ Codelab การปกป้อง Edge Cache ด้วย Cloud Armor เสร็จแล้ว

สิ่งที่เราได้พูดถึง

  • วิธีตั้งค่า Bucket ของ Cloud Storage และ Cloud Load Balancer ที่เชื่อมโยง
  • วิธีสร้างนโยบายความปลอดภัยของ Edge สำหรับ Cloud Armor
  • วิธียืนยันว่านโยบายความปลอดภัยของ Edge ทำงานตามที่ต้องการ

ขั้นตอนถัดไป

  • ลองตั้งค่านโยบายความปลอดภัยของ Edge ที่มีการเข้าชมแคชจากทรัพยากร Compute Engine