הצגת תוכן מאובטח ולא מאובטח באותו שם מארח

כשמשתמשים ב-Cloud CDN, נהוג להעביר תוכן HTTP ו-HTTPS דרך אותו שם מארח. הרבה דפדפנים אוכפים את השימוש ב-Transport Layer Security ‏(TLS) ולא מאפשרים העברת תוכן לא מאובטח, אבל עדיין יש מקרים שבהם צריך לאפשר העברה מאובטחת ולא מאובטחת באותו שם מארח. במאמר הזה נסביר איך להשיג את הפונקציונליות הזו באמצעות Cloud CDN.

אתגר

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

  1. הפניה לשם דומיין ששייך ל-CDN, באמצעות רשומת CNAME ב-DNS.
  2. ניתוב תנועה לקבוצת משנה של שרתים שתומכים במשא ומתן בפרוטוקול TLS לשם הדומיין הזה.

מכיוון ש-Cloud CDN משתלב עם Cloud Load Balancing, הגישה של Cloud CDN שונה מהגישה של רשתות CDN רגילות. ‫Cloud CDN משתמש בכתובת ה-IP מסוג Anycast של מאזן העומסים החיצוני של אפליקציות (ALB). כשמגדירים את Cloud CDN, יש כתובת IP ספציפית שאליה מפנים את התנועה. לשם כך, צריך להגדיר רשומת A (ל-IPv4) או רשומת AAAA (ל-IPv6) ברשומת ה-DNS, במקום רשומת CNAME עם ערך של שם מארח.

כברירת מחדל, כשמגדירים את הקצה הקדמי של מאזן העומסים, מערכתGoogle Cloud מקצה באופן דינמי כתובת IP זמנית. מכיוון שצריך להגדיר את הגדרות ה-HTTP וה-HTTPS בנפרד, יכול להיות שיהיו לכם שתי כתובות IP למכונה של Cloud CDN. מכיוון שכתובת ה-IP של רשומת A או רשומת AAAA זהה גם ל-HTTP וגם ל-HTTPS, אי אפשר לטפל במקרה הזה כמו שצריך ב-DNS.

פתרון

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

HTTP ו-HTTPS באותו דומיין
HTTP ו-HTTPS באותו דומיין

בתרשים:

  • בקשות נכנסות ל-www.example.com מגיעות מלקוחות שמשתמשים ב-HTTP/2, ב-HTTPS וב-HTTP.
  • שתי כתובות IP שמורות, אחת ל-IPv4 ואחת ל-IPv6:

    • 34.95.111.204
    • [2600:1901:0:b13e::]
  • שתי כתובות ה-IP האלה מקושרות ל-www.example.com ב-Cloud DNS.

  • כשמגדירים את מאזן העומסים של אפליקציות (ALB) החיצוני, הגדרת הקצה הקדמי כוללת ארבעה כללי העברה שמשתמשים בכתובות ה-IP השמורות:

    שם פרוטוקול IP:Port
    ipv4-http HTTP 34.95.111.204:80
    ipv4-https HTTPS 34.95.111.204:443
    ipv6-http HTTP [2600:1901:0:b13e::]:80
    ipv6-https HTTPS [2600:1901:0:b13e::]:443
  • במקרים של אי מציאה במטמון של Cloud CDN, מאזן העומסים מפיץ את הבקשות למקורות בקצה העורפי, על סמך ההגדרות שנקבעו במפת URL של מאזן העומסים.

שלב 1: שמירת כתובת IP חיצונית גלובלית

יוצרים כתובת IPv4 או IPv6 (או את שתיהן). כדי לתמוך בכתובות IPv4 ו-IPv6, צריך ליצור כתובת IPv4 אחת וכתובת IPv6 אחת.

ברשומת ה-DNS,יוצרים רשומת A (או AAAA) כדי להפנות את התנועה לכתובת ה-IP השמורה הזו.

המסוף

  1. במסוף Google Cloud , נכנסים לדף כתובות IP חיצוניות.

    לדף External IP addresses

  2. לוחצים על Reserve static address כדי לשמור כתובת IPv4.
  3. מגדירים את Name לערך ipv4-address.
  4. מגדירים את מסלול הרשת ל-Premium.
  5. מגדירים את IP version ל-IPv4.
  6. מגדירים את Type בתור Global.
  7. לוחצים על Reserve.

מאזן העומסים משתמש ברשת במסלול פרימיום, כפי שנדרש כשמפעילים את Cloud CDN.

gcloud

gcloud compute addresses create ipv4-address \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

שימו לב לכתובת ה-IPv4 שנשמרה:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

חוזרים על השלב הזה עבור IPv6.

מידע נוסף זמין במאמר שמירת כתובת IP חיצונית סטטית חדשה.

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

בקטע הזה מוסבר איך להקצות את כתובות ה-IP למאזן העומסים. הוראות מפורטות להגדרת מאזן העומסים לא נכללות במאמר הזה. דוגמה להגדרה מופיעה במאמר יצירת מאזן עומסים ב-HTTPS.

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

בדוגמה הזו, אתם משתמשים גם ב-HTTP וגם ב-HTTPS בין הלקוח לבין מאזן העומסים, ולכן אתם צריכים משאב אחד או יותר של אישורי SSL כדי להגדיר את שרת ה-proxy.

המסוף

הגדרת כלל ההעברה של HTTP

  1. במסוף Google Cloud , עוברים לדף איזון עומסים.

    לדף Load balancing

  2. בוחרים את מאזן העומסים ולוחצים על Edit.
  3. בחלונית הימנית, לוחצים על Frontend configuration.
  4. בשדה Name, מזינים ipv4-http.
  5. בשדה Protocol, בוחרים באפשרות HTTP.
  6. מגדירים את IP version ל-IPv4.
  7. בקטע כתובת IP, בוחרים את הכתובת ipv4-address שיצרתם קודם.
  8. מוודאים שהערך של Port הוא 80, כדי לאפשר תנועת HTTP.
  9. לוחצים על סיום.

הגדרת כלל ההעברה של HTTPS

  1. במסוף Google Cloud , עוברים לדף איזון עומסים.

    לדף Load balancing

  2. בוחרים את מאזן העומסים ולוחצים על Edit.
  3. בחלונית הימנית, לוחצים על Frontend configuration.
  4. בשדה Name, מזינים ipv4-https.
  5. בשדה Protocol, בוחרים באפשרות HTTPS.
  6. מגדירים את IP version ל-IPv4.
  7. בקטע כתובת IP, בוחרים את הכתובת ipv4-address שיצרתם קודם.
  8. מוודאים שהערך של Port הוא 443, כדי לאפשר תנועת HTTP.
  9. בקטע Choose certificate repository, בוחרים באפשרות Use certificate map או באפשרות Use classic certificates.
  10. בהתאם לבחירה, בוחרים מפת אישורים או אישור קלאסי.
  11. לוחצים על סיום.

חוזרים על השלבים האלה עבור IPv6.

בדיקה וסיום

  1. בחלונית הימנית, לוחצים על בדיקה וסיום.
  2. משווים בין ההגדרות לבין מה שהתכוונתם ליצור.
  3. אם הכול נראה תקין, לוחצים על עדכון.

gcloud

  1. יוצרים שרת proxy ל-HTTP לניתוב בקשות למפת URL.

    gcloud compute target-http-proxies create http-lb-proxy \
      --url-map=web-map
    
  2. יוצרים שרת proxy ל-HTTPS כדי לנתב בקשות למפת URL. שרת ה-proxy הוא החלק במאזן העומסים שמכיל את אישור ה-SSL לאיזון עומסי ה-HTTPS, לכן בשלב הזה צריך גם לטעון את האישור.

    gcloud compute target-https-proxies create https-lb-proxy \
      --url-map=web-map --ssl-certificates=www-ssl-cert
    
  3. יוצרים שני כללי העברה גלובליים כדי לנתב בקשות נכנסות לשרת ה-proxy, אחד לכל אחת מכתובות ה-IP שיצרתם.

    • למאזן עומסים גלובלי חיצוני של אפליקציות (ALB), משתמשים בפקודת ה-CLI של gcloud עם load-balancing-scheme=EXTERNAL_MANAGED. ההגדרה הזו מספקת יכולת מתקדמת לניהול תנועה.
    • במאזן עומסים קלאסי של אפליקציות (ALB), משתמשים ב-load-balancing-scheme=EXTERNAL.
    gcloud compute forwarding-rules create ipv4-http \
      --load-balancing-scheme=LOAD_BALANCING_SCHEME \
      --network-tier=PREMIUM \
      --address=ipv4-address \
      --global \
      --target-http-proxy=http-lb-proxy \
      --ports=80
    
    gcloud compute forwarding-rules create ipv4-https \
      --load-balancing-scheme=LOAD_BALANCING_SCHEME \
      --network-tier=PREMIUM \
      --address=ipv4-address  \
      --global \
      --target-https-proxy=https-lb-proxy \
      --ports=443
    

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

שלב 3: יוצרים רשומת A או רשומת AAAA בקובץ לתיאור תחום ה-DNS

השלב האחרון בתהליך הוא ליצור רשומת A או רשומת AAAA בקובץ לתיאור תחום ה-DNS, כדי להפנות ל-Cloud CDN שבו הערך של שם המארח יגיב עם כתובות ה-IP השמורות שהקציתם במאזן העומסים.

עכשיו אפשר להציג גם HTTP וגם HTTPS באותו שם מארח דרך Cloud CDN.

אופציונלי: הפניה אוטומטית מ-HTTP ל-HTTPS

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

קבלת תמיכה

אם יש לכם שאלות לגבי Google Cloud ו-Cloud CDN, אתם יכולים לפנות לצוות המכירות של Google Cloud או לפרסם הודעה בערוץ ‎ #cloud-cdn ב-ערוץ Slack של קהילתGoogle Cloud.

מה השלב הבא?