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


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 של מאזן העומסים ואת שם התמונה. מבנה הפקודה:
מהטרמינל
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.

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

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



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

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

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

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

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

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

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