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. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



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

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

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 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

กฎการตั้งชื่อ 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 จุดทางด้านขวาและแก้ไขสิทธิ์ให้เป็นแบบสาธารณะ


5. สร้างตัวจัดสรรภาระงาน
จากนั้นเราจะสร้างตัวจัดสรรภาระงาน HTTP
ไปที่เครือข่าย >> บริการเครือข่าย >> การจัดสรรภาระงาน >> สร้างตัวจัดสรรภาระงาน >> ตัวจัดสรรภาระงาน HTTP >> อินเทอร์เน็ตไปยัง VM ของฉัน >> ตัวจัดสรรภาระงาน HTTP(S) แบบคลาสสิก
ก่อนอื่น ให้ตั้งชื่อตัวจัดสรรภาระงานที่จะสร้าง
สร้าง Bucket แบ็กเอนด์
สร้าง Bucket แบ็กเอนด์ใหม่ซึ่งเป็น Bucket ที่คุณเพิ่งสร้าง แล้วเลือก "เปิดใช้ CDN" และ "แคชเนื้อหาสแตติก" คลิกสร้าง

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

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

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

ค้นหาตัวจัดสรรภาระงาน
หลังจากผ่านไป 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

6. ลบออบเจ็กต์ออกจาก GCS
ตอนนี้แคชได้รับการป้อนข้อมูลแล้ว เรามาลบออบเจ็กต์ออกจาก Bucket เพื่อยืนยันว่าเราใช้นโยบายกับแคช ไม่ใช่แบ็กเอนด์
ไปที่ Cloud Storage >> %ชื่อ Bucket% >> ออบเจ็กต์
เลือกรูปภาพแล้วลบ

7. สร้างนโยบายความปลอดภัยของ Edge สำหรับแคช CDN
ไปที่ความปลอดภัยของเครือข่าย >> Cloud Armor แล้วคลิกสร้างนโยบาย
เลือกรายการต่อไปนี้
ประเภทนโยบาย: นโยบายความปลอดภัยของ Edge
การดำเนินการเริ่มต้น: ปฏิเสธ



ใช้นโยบายกับที่เก็บข้อมูลแบ็กเอนด์
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 <
ตรวจสอบบันทึก
จากนั้นคุณสามารถตรวจสอบบันทึกเพื่อดูนโยบายความปลอดภัยที่บังคับใช้ได้ ไปที่การดำเนินการ >> การบันทึก >> เครื่องมือสำรวจบันทึก
ป้อนข้อมูลโค้ดด้านล่างลงในคำค้นหา แล้วคลิกเรียกใช้

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)
โปรดทราบการตอบกลับ 403 และนโยบายความปลอดภัยที่บังคับใช้

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

ยืนยันการนำนโยบายออก
หลังจากผ่านไป 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 >> %ชื่อนโยบาย% แล้วเลือก "ลบ"

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

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

10. ยินดีด้วย
คุณทำ Codelab การปกป้อง Edge Cache ด้วย Cloud Armor เสร็จแล้ว
สิ่งที่เราได้พูดถึง
- วิธีตั้งค่า Bucket ของ Cloud Storage และ Cloud Load Balancer ที่เชื่อมโยง
- วิธีสร้างนโยบายความปลอดภัยของ Edge สำหรับ Cloud Armor
- วิธียืนยันว่านโยบายความปลอดภัยของ Edge ทำงานตามที่ต้องการ
ขั้นตอนถัดไป
- ลองตั้งค่านโยบายความปลอดภัยของ Edge ที่มีการเข้าชมแคชจากทรัพยากร Compute Engine