הגנה על מטמון Edge באמצעות Cloud Armor

1. מבוא

כללי מדיניות האבטחה של Google Cloud Armor Edge מאפשרים לכם להגביל את הגישה לאובייקטים שנשמרו במטמון ב-Google Cloud CDN וב-Google Cloud Storage. לדוגמה, כדי לוודא שהמשתמשים לא ניגשים לאובייקטים בדלי אחסון מאזורים גיאוגרפיים מוגבלים, או כדי לוודא שהפצת המדיה מסוננת לפי האזורים הגיאוגרפיים שיש לכם רישיון להפצה בהם.

בשיעור ה-Lab הזה ניצור קטגוריית קצה עורפי של GCS, נעלה אליה תמונה, נקשר אותה למאזן עומסים ואז נפעיל בה את Cloud CDN ואת מדיניות אבטחת הקצה.

מה תלמדו

  • איך מגדירים קטגוריה של Cloud Storage עם תוכן שניתן לשמור במטמון
  • איך יוצרים מדיניות אבטחה של Edge כדי להגן על התוכן
  • איך מוודאים שמדיניות האבטחה של Edge פועלת כמצופה

מה תצטרכו

  • ידע בסיסי ברשתות ו-HTTP
  • ידע בסיסי בשורת הפקודה של Unix/Linux

2. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

  • שם הפרויקט הוא השם המוצג למשתתפים בפרויקט. זו מחרוזת של תווים שלא נמצאת בשימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
  • מזהה הפרויקט חייב להיות ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא צריך לדעת מה היא. ברוב סדנאות ה-Codelab, תצטרכו להפנות למזהה הפרויקט (ובדרך כלל הוא מזוהה כ-PROJECT_ID), אז אם אתם לא אוהבים אותו, תוכלו ליצור מזהה אקראי אחר, או לנסות ליצור מזהה משלכם ולראות אם הוא זמין. אחרי שהפרויקט נוצר, הוא 'קפוא'.
  • יש ערך שלישי, מספר פרויקט, שמשמש חלק מממשקי ה-API. מידע נוסף על שלושת הערכים האלה מופיע במאמרי העזרה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי לא תהיה עלות בכלל. כדי לכבות את המשאבים ולא לחייב אתכם מעבר למה שמוסבר במדריך הזה, צריך לפעול לפי ההוראות לניקוי שמופיעות בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

מפעילים את Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

ב-GCP Console, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

bce75f34b2c53987.png

הקצאת המשאבים והחיבור לסביבה יימשכו רק כמה רגעים. בסיום התהליך, אמור להופיע משהו כזה:

f6ef2b5f13479f3a.png

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-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 > Browser. לוחצים על CREATE BUCKET (יצירת מאגר):

baf3d3c74282ecba.png

כללים למתן שמות לקטגוריות:

  • שם הקטגוריה לא יכול לכלול מידע רגיש, כי מרחב השמות של הקטגוריות זמין וגלוי לכולם.
  • שמות של קטגוריות יכולים להכיל רק אותיות קטנות, ספרות, מקפים (-), קווים תחתונים (_) ונקודות (.). שמות שמכילים נקודות צריכים אימות.
  • שמות של קטגוריות צריכים להתחיל ולהסתיים בספרה או באות.
  • שמות של קטגוריות צריכים להכיל 3 עד 63 תווים. שמות שמכילים נקודות יכולים להכיל עד 222 תווים, אבל כל רכיב שמופרד באמצעות נקודות יכול להיות באורך של עד 63 תווים.
  • אי אפשר לייצג שמות של קטגוריות ככתובות IP בסימון עם נקודה עשרונית (לדוגמה, 192.168.5.4).
  • שמות של קטגוריות לא יכולים להתחיל בקידומת 'goog'.
  • שמות של קטגוריות לא יכולים להכיל את המילה 'google' או שגיאות איות דומות של 'google'.
  • בנוסף, כדי לעמוד בדרישות של DNS ולשמור על תאימות עתידית, לא מומלץ להשתמש בקווים תחתונים (‎_) או בנקודה ליד נקודה או מקף אחרים. לדוגמה, המחרוזות '..',‏ '-.' או '.-' לא תקינות בשמות DNS.

לוחצים על המשך.

סוג המיקום: אזור

מיקום: בוחרים אזור שרחוק מכם

לוחצים על המשך.

סוג האחסון (storage class) שמוגדר כברירת מחדל: Standard

לוחצים על המשך.

בקטע Prevent public access (מניעת גישה ציבורית), מבטלים את הסימון בתיבה Enforce public access prevention on this bucket (אכיפה של מניעת גישה ציבורית בקטגוריה הזו).

בקטע Access Control (בקרת גישה), בוחרים באפשרות Fine Grained (גרנולריות גבוהה).

לוחצים על המשך.

אחרי שמגדירים את הקטגוריה, לוחצים על יצירה:

זהו, יצרתם קטגוריה של 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.png30a975d3ad22d33d.png

5. יצירת מאזן עומסים

בשלב הבא ניצור מאזן עומסים מסוג HTTP.

עוברים אל Networking >> Network services >> Load Balancing >> Create Load Balancer >> HTTP Load Balancer >> Internet to my VMs >> Classic HTTP(S) Load Balancer (רשת >> שירותי רשת >> איזון עומסים >> יצירת מאזן עומסים >> מאזן עומסים ב-HTTP >> אינטרנט למכונות הווירטואליות שלי >> מאזן עומסים קלאסי ב-HTTP(S)).

קודם כול, נותנים שם למאזן העומסים שייווצר.

יצירת קטגוריית קצה עורפי

יוצרים קטגוריית קצה עורפי חדשה שהיא הקטגוריה שיצרתם, ובוחרים באפשרות Enabled CDN (הפעלת CDN) ובאפשרות Cache Static Content (שמירת תוכן סטטי במטמון). לוחצים על 'יצירה'.

ed392a56538d499e.png

יצירת כללי מארח ונתיב

בצד ימין, עוברים אל Host and path rules (כללים לגבי מארח ונתיב). נשתמש בכלל פשוט של מארח/נתיב ונשלח כל בקשה לדלי.

7c1a664e0d1f15b0.png

יצירת הגדרות אישיות של הקצה הקדמי

בוחרים את הגדרת הקצה הקדמי. במקרה של הגדרת קצה קדמי, נשתמש ב-HTTP (אבל אפשר להשתמש גם ב-HTTPS אם יש לכם אישור), בכתובת IP זמנית ונוודא שבחרתם ברשת ברמת מסלול פרימיום.

2597a5e63d618622.png

לוחצים על 'יצירה'.

קבלת כתובת ה-IP של מאזן העומסים

כדי לקבל את כתובת ה-IP של מאזן העומסים מהמסוף, לוחצים על השם של מאזן העומסים ברשימת מאזני העומסים של הפרויקט.

9b757362d806e835.png

שליחת שאילתה למאזן העומסים

אחרי כמה דקות, מנסים לשלוח שאילתה למאזן העומסים לגבי האובייקט שהעליתם. תצטרכו את כתובת ה-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%. אם אתם צריכים להריץ כמה שאילתות, אתם יכולים לפעול לפי השלבים הבאים

מהטרמינל

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

אישור התוכן שמוצג על ידי Cloud CDN

כדי לוודא שאתם מציגים טראפיק מ-CDN, עוברים אל Network Services >> CDN.

a52d0ba4c084aa05.png

6. מחיקת האובייקט מ-GCS

אחרי שהמטמון מתמלא, נמחק את האובייקט מהקטגוריה כדי להראות שאנחנו מחילים את המדיניות על המטמון ולא על הקצה העורפי.

עוברים אל Cloud Storage >> %bucket name% >> objects

בוחרים את התמונה ומוחקים אותה.

a1cc1bb9a0ff41df.png

7. יצירת מדיניות אבטחה של Edge למטמון CDN

עוברים אל Network Security (אבטחת רשת) >> Cloud Armor ולוחצים על create policy (יצירת מדיניות).

בוחרים באפשרויות הבאות

סוג המדיניות: מדיניות אבטחה של Edge

פעולת ברירת מחדל: דחייה

7a12374be33026fd.pngb7c4efc091272358.png77ddbcddd07b65d2.png

מחילים את המדיניות על קטגוריית קצה עורפי.

8. אימות מדיניות האבטחה של Edge

אחרי שיצרנו מדיניות אבטחה של Edge לפני מאגר הנתונים העורפי, נבדוק שהיא פועלת כמצופה.

בדיקת מדיניות האבטחה

אחרי כמה דקות, תוכלו לוודא שמדיניות 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 שנאכפת. עוברים אל Operations >> Logging >> Logs Explorer.

מזינים את קטע הקוד שלמטה בשאילתה ולוחצים על 'הפעלה'.

14972af5ae6c182a.png

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

שימו לב לתשובה 403 ולמדיניות האבטחה שנאכפת

cddc48ca93ad79ca.png

הסרת מדיניות האבטחה

מסירים את מדיניות האבטחה ומבצעים שאילתה על האובייקט מהמטמון.

עוברים אל Network Security >> Cloud Armor >> %POLICY NAME% >> targets ומסירים את יעד ה-bucket.

350655729a89eb33.png

אישור הסרת המדיניות

אחרי כמה דקות, שולחים עוד פקודת 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. ניקוי המעבדה

עוברים אל Network Security >> Cloud Armor >> %POLICY NAME%‎ ובוחרים באפשרות 'מחיקה'.

21eefb5f375e8fee.png

מנווטים אל Cloud Storage, בוחרים את הקטגוריה שיצרתם ולוחצים על סמל המחיקה.

ef2fa8d45c1d3452.png

עוברים אל Networking >> Network services >> Load Balancing (רשת >> שירותי רשת >> איזון עומסים). בוחרים את מאזן העומסים שיצרתם ולוחצים על 'מחיקה'.

ee2e78c10f4104eb.png

10. מעולה!

סיימתם את ה-Codelab בנושא הגנה על שמירה במטמון הקצה באמצעות Cloud Armor.

מה נכלל

  • איך מגדירים קטגוריה של אחסון בענן ומאזן עומסים בענן שמשויך אליה
  • איך יוצרים מדיניות אבטחה של Cloud Armor Edge
  • איך מוודאים שמדיניות האבטחה של Edge פועלת כצפוי.

השלבים הבאים

  • אפשר לנסות להגדיר מדיניות אבטחה של Edge עם פגיעה במטמון ממשאב של Compute Engine.