העברה מ-S3 דרך CloudFront

העברות מ-Amazon S3 יכולות להשתמש בהפצה של Amazon CloudFront כנתיב יציאה.

העברת נתונים דרך CloudFront עשויה להוביל להוזלה בעלויות היציאה מ-AWS בהשוואה להעברה ישירה מ-S3. פרטים נוספים מופיעים במאמרים תמחור של CloudFront וחיובים על תעבורת נתונים יוצאת מ-S3.

השימוש ב-CloudFront כנתיב היציאה לא חושף את האובייקטים שלכם ב-S3 לציבור. במאמר האם השימוש ב-CloudFront חושף את האובייקטים שלי לציבור? מוסבר איך להגדיר את הגישה לאובייקטים.

סקירה כללית

כדי להעביר נתונים מ-S3 דרך CloudFront, צריך לפעול לפי השלבים הבאים:

הגדרת הרשאות IAM

פועלים לפי ההוראות שבמאמר הרשאות להעברה ללא סוכן כדי להעניק את ההרשאות הנדרשות ב-Google Cloud.

הגדרת גישה לקטגוריית S3

כדי להגדיר גישה לנתונים ב-Amazon S3, פועלים לפי ההוראות במאמר בנושא הגדרת גישה למקור: Amazon S3.

יצירת הפצה של CloudFront לקטגוריית S3

  1. בחשבון AWS, עוברים אל CloudFront.
  2. לוחצים על יצירת הפצה ב-CloudFront.
  3. בקטע דומיין מקור, בוחרים את קטגוריית ה-S3.
  4. צריך להשאיר את השדה נתיב המקור ריק.
  5. מאשרים את שם המקור שמולא אוטומטית או מציינים ערך משלכם.
  6. בקטע Origin access, בוחרים באפשרות Public. הפעולה הזו לא הופכת את הקטגוריה לציבורית, אלא מציינת ל-CloudFront שלא צריך להגדיר מנגנון גישה.
  7. בקטע Cache key and origin requests (מפתח מטמון ובקשות מקור):
    1. בקטע Cache policy (מדיניות שמירה במטמון), בוחרים באפשרות CachingDisabled (שמירה במטמון מושבתת). כך נמנע מ-CloudFront לשמור בקשות במטמון ולהציג אותן לצופים שלא עברו אימות.
    2. בקטע Origin request policy (מדיניות בקשות ממקורות שונים), בוחרים באפשרות AllViewerExceptHostHeader (כל הצופים למעט כותרת המארח). כך CloudFront יכול להעביר כותרות אימות ל-S3, כדי ש-Storage Transfer Service יוכל לגשת לדלי באמצעות פרטי הכניסה המאובטחים שלכם.
  8. בקטע Web Application Firewall (WAF), בוחרים באפשרות Do not enable.
  9. אפשר גם לבחור טווח מחירים. ‫Storage Transfer Service בוחר מאגרי עובדים על סמך האזור של דלי המקור, ולכן התמחור של CloudFront מתבצע באזור הזה. כדי לקבל את התמחור הנמוך ביותר, צריך לוודא שקטגוריית המקור נמצאת בארה"ב או באירופה, או לבחור באפשרות Use only North America and Europe (שימוש רק בצפון אמריקה ובאירופה) בתור Price class (סיווג מחירים) ב-CloudFront.
  10. לוחצים על יצירת הפצה ב-CloudFront.

    אחרי שיוצרים את ההפצה בהצלחה, מוצג דף הפרטים של ההפצה ב-CloudFront.

  11. שימו לב לשם הדומיין של ההפצה. לדוגמה: https://dy1h2n3l4ob56.cloudfront.net. אם הדף עם הפרטים לא כולל את פרוטוקול https:// לפני שם הדומיין של ההפצה, תצטרכו להוסיף אותו בעצמכם כשתיצרו את משימת ההעברה.

יצירת העברת נתונים

העברה באמצעות הפצה של CloudFront נתמכת במסוף Google Cloud וב-API בארכיטקטורת REST.

אל תכללו בשם של עבודת ההעברה מידע רגיש כמו פרטים אישיים מזהים (PII) או נתוני אבטחה. יכול להיות ששמות המשאבים יועברו לשמות של משאבים אחרים ב-Google Cloud, ויוצגו למערכות פנימיות של Google מחוץ לפרויקט שלכם.

מסוף Google Cloud

כדי ליצור העברה באמצעות Google Cloud המסוף, פועלים לפי ההוראות ליצירת העברה.

כשמתבקשים להזין את הדומיין של CloudFront, מזינים את שם הדומיין של ההפצה שרשמתם בקטע הקודם. אפשר למצוא את הערך הזה גם בקטע CloudFront במסוף Amazon Web Services. הפורמט הוא https://dy1h2n3l4ob56.cloudfront.net.

API ל-REST

כדי ליצור העברה באמצעות REST API, פועלים לפי הדוגמה בדף יצירת העברות.

מציינים את שם הדומיין של ההפצה כערך של השדה transferSpec.awsS3DataSource.cloudfrontDomain:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "cloudfrontDomain": "https://dy1h2n3l4ob56.cloudfront.net",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  ...
}

פתרון בעיות

שגיאה AuthorizationHeaderMalformed

אם נתקלתם בשגיאה AuthorizationHeaderMalformed שבה מצוין חוסר התאמה באזור (לדוגמה, the region 'Location A' is wrong; expecting 'Location B'), סביר להניח שהבעיה נובעת מהגדרה לא נתמכת של CloudFront.

השגיאה הזו מתרחשת אם משתמשים בהפצה אחת של CloudFront כדי להציג כמה קטגוריות S3 שנמצאות באזורים שונים של AWS.

כדי לפתור את הבעיה, צריך לוודא שכל הפצה של CloudFront מציגה מאגרי S3 רק באזור AWS אחד. אם יש לכם קטגוריות S3 באזורים שונים, צריך ליצור הפצה נפרדת של CloudFront לכל אזור.

שאלות נפוצות

האם השימוש ב-CloudFront חושף את האובייקטים שלי לציבור?

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

  • ל-Cloudfront אין גישה ישירה לאובייקטים שלכם ב-S3.
  • אם הקטגוריה שלכם פרטית, המשתמשים יקבלו שגיאת permission denied אם הם ינסו לגשת לאובייקטים שלכם ישירות או דרך CloudFront.
  • Storage Transfer Service חותם בקשות ל-CloudFront באמצעות פרטי הכניסה שסיפקתם במשימת ההעברה. כך אנחנו יכולים להוריד את האובייקטים שלכם בצורה מאובטחת, כאילו הורדנו אותם ישירות מ-S3. ההעברה הזו מתבצעת בזכות הגדרת העברת הכותרות AllViewerExceptHostHeader.