בהעברות מ-Amazon S3 אפשר להשתמש בהפצה של Amazon CloudFront כנתיב להעברת נתונים יוצאים.
העברת נתונים דרך CloudFront עשויה להוזיל את עלויות היציאה של AWS בהשוואה להעברה ישירה מ-S3. לפרטים, ראו התמחור של CloudFront וחיובי תעבורת נתונים יוצאת ב-S3.השימוש ב-CloudFront כנתיב היציאה לא חושף את האובייקטים ב-S3 לציבור. האם השימוש ב-CloudFront חושף את האובייקטים שלי לציבור?
סקירה כללית
כדי להעביר נתוני S3 דרך CloudFront, צריך לבצע את השלבים הבאים:
הגדרת הרשאות IAM
כדי לתת את ההרשאות הנדרשות ב-Google Cloud בקטגוריית היעד, פועלים לפי ההוראות במאמר הגדרת גישה ל-sink: Cloud Storage.
הגדרת הגישה לקטגוריית S3
כדי להגדיר גישה לנתונים ב-Amazon S3, פועלים לפי ההוראות במאמר הגדרת גישה למקור: Amazon S3.
יצירת הפצה של CloudFront לקטגוריית S3
- בחשבון AWS, עוברים אל CloudFront.
- לוחצים על Create a CloudFront distribution.
- בקטע Origin domain, בוחרים את הקטגוריה ב-S3.
- צריך להשאיר את השדה Origin path ריק.
- מאשרים את הערך שמולא אוטומטית בשדה Origin name או מציינים ערך משלכם.
- בקטע 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.
- אפשר גם לבחור Price class. השירות Storage Transfer Service בוחר מאגרי Worker בהתאם לאזור של קטגוריית המקור, כך שהתמחור של CloudFront חל באותו אזור. כדי לקבל את המחיר הנמוך ביותר, ודאו שקטגוריית המקור נמצאת בארה"ב או באירופה, או בחרו באפשרות Use only North America and Europe בתור Price class ב-CloudFront.
לוחצים על Create CloudFront distribution.
אחרי שיוצרים את ההפצה, מוצג דף הפרטים של ההפצה ב-CloudFront.
שימו לב לערך של Distribution domain name. לדוגמה:
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
כדי ליצור העברה באמצעות ה-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.