העברות מ-Amazon S3 יכולות להשתמש בהפצה של Amazon CloudFront כנתיב יציאה.
העברת נתונים דרך CloudFront עשויה להוביל לעלויות נמוכות יותר של תעבורת נתונים יוצאת (egress) מ-AWS, בהשוואה להעברה ישירה מ-S3. פרטים נוספים מופיעים במאמרים תמחור של CloudFront וחיובים על תעבורת נתונים יוצאת מ-S3.השימוש ב-CloudFront כנתיב היציאה לא חושף את האובייקטים שלכם ב-S3 לציבור. במאמר האם השימוש ב-CloudFront חושף את האובייקטים שלי לציבור? מוסבר על כך.
סקירה כללית
כדי להעביר נתונים מ-S3 דרך CloudFront, צריך לפעול לפי השלבים הבאים:
הגדרת הרשאות IAM
פועלים לפי ההוראות שבמאמר הרשאות להעברה ללא סוכן כדי להעניק את ההרשאות הנדרשות ב-Google Cloud.
הגדרת גישה לקטגוריית S3
כדי להגדיר גישה לנתונים ב-Amazon S3, פועלים לפי ההוראות במאמר בנושא הגדרת גישה למקור: Amazon S3.
יצירת הפצה של CloudFront לקטגוריית S3
- בחשבון AWS, עוברים אל CloudFront.
- לוחצים על יצירת הפצה ב-CloudFront.
- בקטע Origin domain (דומיין המקור), בוחרים את קטגוריית ה-S3.
- צריך להשאיר את השדה נתיב המקור ריק.
- מאשרים את שם המקור שמולא אוטומטית או מציינים ערך משלכם.
- בקטע Origin access, בוחרים באפשרות Public. הפעולה הזו לא הופכת את הקטגוריה לציבורית, אלא מציינת ל-CloudFront שלא צריך להגדיר מנגנון גישה.
- בקטע Cache key and origin requests (מפתח מטמון ובקשות מקור):
- בקטע Cache policy (מדיניות שמירה במטמון), בוחרים באפשרות CachingDisabled (השבתת השמירה במטמון). כך נמנע מ-CloudFront לשמור במטמון בקשות ולהציג אותן לצופים שלא עברו אימות.
- בקטע Origin request policy (מדיניות בקשות ממקורות שונים), בוחרים באפשרות AllViewerExceptHostHeader (כל הצופים למעט כותרת המארח). כך CloudFront יכול להעביר כותרות אימות ל-S3, כדי ש-Storage Transfer Service יוכל לגשת לדלי באמצעות פרטי הכניסה המאובטחים שלכם.
- בקטע Web Application Firewall (WAF), בוחרים באפשרות Do not enable.
- אפשר גם לבחור טווח מחירים. Storage Transfer Service בוחר מאגרי עובדים על סמך האזור של דלי המקור, ולכן התמחור של CloudFront חל באזור הזה. כדי לקבל את התמחור הנמוך ביותר, צריך לוודא שקטגוריית המקור נמצאת בארה"ב או באירופה, או לבחור באפשרות Use only North America and Europe (שימוש רק בצפון אמריקה ובאירופה) בתור Price class (סיווג מחירים) ב-CloudFront.
לוחצים על Create CloudFront distribution (יצירת הפצה של CloudFront).
אחרי שיוצרים את ההפצה בהצלחה, מוצג דף הפרטים של ההפצה ב-CloudFront.
שימו לב לשם הדומיין של ההפצה. לדוגמה:
https://dy1h2n3l4ob56.cloudfront.net. אם הדף עם הפרטים לא כולל את פרוטוקולhttps://לפני שם הדומיין של ההפצה, תצטרכו להוסיף אותו בעצמכם כשתיצרו את העברת העבודה.
יצירת עבודת העברה
העברה באמצעות הפצה של CloudFront נתמכת במסוף Google Cloud וב-REST API.
אל תכללו בשם של עבודת ההעברה מידע רגיש כמו פרטים אישיים מזהים (PII) או נתוני אבטחה. יכול להיות ששמות המשאבים יועברו לשמות של משאבים אחרים ב-Google Cloud, ויוצגו למערכות פנימיות של Google מחוץ לפרויקט שלכם.מסוף Google Cloud
כדי ליצור העברה באמצעות מסוף Google Cloud , פועלים לפי ההוראות ליצירת העברה.
כשמתבקשים להזין את הדומיין של CloudFront, מזינים את שם הדומיין של ההפצה שרשמתם בקטע הקודם. אפשר למצוא את הערך הזה גם בקטע CloudFront במסוף Amazon Web Services. הפורמט הוא https://dy1h2n3l4ob56.cloudfront.net.
API בארכיטקטורת REST
כדי ליצור העברה באמצעות API בארכיטקטורת REST, פועלים לפי הדוגמה בדף יצירת העברות.
מציינים את שם הדומיין של ההפצה כערך של השדה 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.