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

1. บทนำ

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

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

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

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

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

ตรวจสอบว่าตั้งค่ารหัสโปรเจ็กต์ใน 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. สร้างที่เก็บข้อมูล Cloud Storage

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

baf3d3c74282ecba.png

กฎการตั้งชื่อที่เก็บข้อมูล

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

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

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

ตำแหน่ง: เลือกภูมิภาคที่ห่างจากคุณ

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

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

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

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

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

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

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

เรียบร้อย คุณเพิ่งสร้างที่เก็บข้อมูล Cloud Storage

4. อัปโหลดออบเจ็กต์ไปยังที่เก็บข้อมูล

อัปโหลดออบเจ็กต์ลงในที่เก็บข้อมูลเลย

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

จาก 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) แบบคลาสสิก

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

สร้างที่เก็บข้อมูลแบ็กเอนด์

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

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

ไปที่ Cloud Storage >> %ชื่อที่เก็บข้อมูล% >> ออบเจ็กต์

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

a1cc1bb9a0ff41df.png

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

ไปที่ Network Security >> 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
<

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

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

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

14972af5ae6c182a.png

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

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

cddc48ca93ad79ca.png

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

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

ไปที่ Network Security >> ชุดเกราะระบบคลาวด์ >> %ชื่อนโยบาย% >> เป้าหมาย และนำที่เก็บข้อมูลเป้าหมายออก

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 นี้เสร็จสิ้นเกี่ยวกับนโยบายความปลอดภัยของ Cloud Armor Edge แล้ว

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

9. ทำความสะอาดห้องปฏิบัติการ

ไปที่ Network Security >> ชุดเกราะระบบคลาวด์ >> %POLICY NAME% แล้วเลือกลบ

21eefb5f375e8fee.png

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

ef2fa8d45c1d3452.png

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

ee2e78c10f4104eb.png

10. ยินดีด้วย

คุณดำเนินการ Defending Edge Cache ด้วย Codelab ของ Cloud Armor สำเร็จแล้ว!

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

  • วิธีตั้งค่าที่เก็บข้อมูล Cloud Storage และตัวจัดสรรภาระงานระบบคลาวด์ที่เกี่ยวข้อง
  • วิธีสร้างนโยบายความปลอดภัยของ Cloud Armor Edge
  • วิธีตรวจสอบว่านโยบายความปลอดภัยของ Edge ทำงานตามที่ตั้งใจไว้

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

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