1. מבוא
כללי מדיניות האבטחה של Google Cloud Armor Edge מאפשרים לכם להגביל את הגישה לאובייקטים שנשמרו במטמון ב-Google Cloud CDN וב-Google Cloud Storage. לדוגמה, כדי לוודא שהמשתמשים לא ניגשים לאובייקטים בדלי אחסון מאזורים גיאוגרפיים מוגבלים, או כדי לוודא שהפצת המדיה מסוננת לפי האזורים הגיאוגרפיים שיש לכם רישיון להפצה בהם.
בשיעור ה-Lab הזה ניצור קטגוריית קצה עורפי ב-GCS, נעלה אליה תמונה, נקשר אותה למאזן עומסים ואז נפעיל בה את Cloud CDN ואת מדיניות אבטחת הקצה.
מה תלמדו
- איך מגדירים קטגוריה של Cloud Storage עם תוכן שניתן לשמור במטמון
- איך יוצרים מדיניות אבטחה של Edge כדי להגן על התוכן
- איך מוודאים שמדיניות האבטחה של Edge פועלת כמצופה
מה תצטרכו
- ידע בסיסי ברשתות ו-HTTP
- ידע בסיסי בשורת הפקודה של Unix/Linux
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



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

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

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

כללים למתן שמות לקטגוריות:
- שם הקטגוריה לא יכול לכלול מידע רגיש, כי מרחב השמות של הקטגוריות זמין וגלוי לכולם.
- שמות של קטגוריות יכולים להכיל רק אותיות קטנות, ספרות, מקפים (-), קווים תחתונים (_) ונקודות (.). שמות שמכילים נקודות צריכים אימות.
- שמות של קטגוריות צריכים להתחיל ולהסתיים בספרה או באות.
- שמות של קטגוריות צריכים להכיל 3 עד 63 תווים. שמות שמכילים נקודות יכולים להכיל עד 222 תווים, אבל כל רכיב שמופרד באמצעות נקודות יכול להיות באורך של עד 63 תווים.
- אי אפשר לייצג שמות של קטגוריות ככתובות IP בסימון עם נקודה עשרונית (לדוגמה, 192.168.5.4).
- שמות של קטגוריות לא יכולים להתחיל בקידומת 'goog'.
- שמות של קטגוריות לא יכולים להכיל את המילה 'google' או שגיאות איות דומות של 'google'.
- בנוסף, כדי לעמוד בדרישות של DNS ולשמור על תאימות עתידית, לא מומלץ להשתמש בקווים תחתונים (_) או בנקודה ליד נקודה או מקף אחרים. לדוגמה, '..', '-.' או '.-' הם לא ערכים תקינים בשמות DNS.
לוחצים על המשך.
סוג המיקום: אזור
מיקום: בוחרים אזור רחוק מכם
לוחצים על המשך.
סוג האחסון (storage class) שמוגדר כברירת מחדל: Standard
לוחצים על המשך.
מבטלים את הסימון בתיבה Enforce public access prevention on this bucket (אכיפה של מניעת גישה ציבורית בקטגוריה הזו) בקטע Prevent public access (מניעת גישה ציבורית).
בקטע 'בקרת גישה', בוחרים באפשרות 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 נקודות) בצד שמאל ועורכים את ההרשאות כך שיהיו ציבוריות.


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 (שמירת תוכן סטטי במטמון). לוחצים על 'יצירה'.

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

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

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

שליחת שאילתה למאזן העומסים
אחרי כמה דקות, מנסים לשלוח שאילתה למאזן העומסים לגבי האובייקט שהעליתם. תצטרכו את כתובת ה-IP של מאזן העומסים ואת שם התמונה. מבנה הפקודה:
מתוך Terminal
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%. אם אתם צריכים להריץ כמה שאילתות, אתם יכולים לפעול לפי השלבים הבאים
מתוך Terminal
#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done
אישור התוכן שמוצג על ידי Cloud CDN
כדי לוודא שאתם מציגים טראפיק מ-CDN, עוברים אל Network Services >> CDN.

6. מחיקת האובייקט מ-GCS
עכשיו, אחרי שהמטמון אוכלס, נמחק את האובייקט מהקטגוריה כדי להראות שאנחנו מחילים את המדיניות על המטמון ולא על הקצה העורפי.
עוברים אל Cloud Storage >> %bucket name% >> objects
בוחרים את התמונה ומוחקים אותה.

7. יצירת מדיניות אבטחה של Edge למטמון CDN
עוברים אל Network Security (אבטחת רשת) >> Cloud Armor ולוחצים על create policy (יצירת מדיניות).
בוחרים באפשרויות הבאות
סוג המדיניות: מדיניות אבטחה של Edge
פעולת ברירת מחדל: דחייה



מחילים את המדיניות על קטגוריית קצה עורפי.
8. אימות מדיניות האבטחה של Edge
אחרי שיצרנו מדיניות אבטחה של Edge לפני מאגר הקצה העורפי, נבדוק שהיא פועלת כמצופה.
בדיקת מדיניות האבטחה
אחרי כמה דקות, תוכלו לוודא שמדיניות Cloud Armor פועלת. אם מריצים את הפקודה הבאה משורת הפקודה, מקבלים את השגיאה 403
מתוך Terminal
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
מזינים את קטע הקוד שלמטה בשאילתה ולוחצים על 'הפעלה'.

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)
שימו לב לתגובה 403 ולמדיניות האבטחה שנאכפת

הסרת מדיניות האבטחה
מסירים את מדיניות האבטחה ומבצעים שאילתה על האובייקט מהמטמון.
עוברים אל Network Security >> Cloud Armor >> %POLICY NAME% >> targets ומסירים את דלי היעד.

אישור הסרת המדיניות
אחרי כמה דקות, שולחים עוד פקודת curl למשאב בדלי האחסון. במקרה הזה תקבלו תגובה 200.
מתוך Terminal
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% ובוחרים באפשרות delete (מחיקה).

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

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

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