יש שתי דרכים להגדיר גישה לקטגוריה ב-Amazon S3:
אזורים נתמכים
Storage Transfer Service תומך באזורים הבאים של Amazon S3:
af-south-1ap-east-1ap-northeast-1ap-northeast-2ap-northeast-3ap-south-1ap-south-2ap-southeast-1ap-southeast-2ap-southeast-3 |
ap-southeast-4ca-central-1ca-west-1eu-central-1eu-central-2eu-north-1eu-south-1eu-south-2eu-west-1eu-west-2
|
eu-west-3il-central-1me-central-1me-south-1sa-east-1us-east-1us-east-2us-west-1us-west-2
|
us-gov-east-1us-gov-west-1
|
ap-east-1ap-northeast-1ap-northeast-2ap-northeast-3ap-south-1ap-south-2ap-southeast-1ca-central-1ca-west-1eu-central-1eu-central-2 |
eu-north-1eu-south-1eu-south-2eu-west-1eu-west-2eu-west-3us-east-1us-east-2us-west-1us-west-2
|
ההרשאות הנדרשות
כדי להשתמש ב-Storage Transfer Service להעברת נתונים מקטגוריה של Amazon S3, לחשבון המשתמש או לתפקיד הזהות המאוחדת צריכות להיות ההרשאות המתאימות לקטגוריה:
| הרשאה | תיאור | שימוש |
|---|---|---|
s3:ListBucket |
מאפשרת ל-Storage Transfer Service להציג רשימה של אובייקטים בקטגוריה. | חובה תמיד. |
s3:GetObject |
מאפשר ל-Storage Transfer Service לקרוא אובייקטים בקטגוריה. | חובה אם מעבירים את הגרסה הנוכחית של כל האובייקטים. אם במניפסט שלכם מצוינת גרסת אובייקט, השתמשו במקום זאת ב-s3:GetObjectVersion. |
s3:GetObjectVersion |
מאפשר ל-Storage Transfer Service לקרוא גרסאות ספציפיות של אובייקטים בקטגוריה. | חובה לציין אם במניפסט מוגדרת גרסת אובייקט. אחרת, משתמשים ב-s3:GetObject. |
s3:DeleteObject |
מאפשר ל-Storage Transfer Service למחוק אובייקטים בקטגוריה. | חובה אם הערך של מאפיין deleteObjectsFromSourceAfterTransfer הוא true. |
אימות באמצעות פרטי גישה
כדי להשתמש במזהה של מפתח גישה ובמפתח סודי לאימות ב-AWS:
יוצרים משתמש ב-AWS Identity and Access Management (AWS IAM) עם שם שקל לזכור, כמו
transfer-user.בסוג הגישה של AWS, בוחרים באפשרות מפתח גישה – גישה פרוגרמטית.
מקצים למשתמש אחד מהתפקידים הבאים:
- AmazonS3ReadOnlyAccess כדי לספק הרשאת קריאה בלבד למקור. האפשרות הזו מאפשרת העברות, אבל לא תומכת במחיקת אובייקטים במקור אחרי שההעברה מסתיימת.
- AmazonS3FullAccess אם ההעברה מוגדרת למחיקת אובייקטים במקור.
תפקיד בהתאמה אישית עם ההרשאות המתאימות מהטבלה הרשאות נדרשות. קובץ ה-JSON של ההרשאות המינימליות נראה כמו בדוגמה הבאה:
אזורים רגילים של AWS
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::S3_BUCKET_NAME/*", "arn:aws:s3:::S3_BUCKET_NAME" ] } ] }
אזורים ב-AWS GovCloud
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws-us-gov:s3:::S3_BUCKET_NAME/*", "arn:aws-us-gov:s3:::S3_BUCKET_NAME" ] } ] }
רושמים בצד את המזהה של מפתח הגישה ואת מפתח הגישה הסודי אחרי שהמשתמש נוצר בהצלחה.
האופן שבו מעבירים את מזהה מפתח הגישה ואת מפתח הגישה הסודי אל Storage Transfer Service תלוי בממשק שבו משתמשים כדי להתחיל את ההעברה.
מסוף Google Cloud
מזינים את הערכים ישירות בטופס ליצירת עבודת ההעברה.
למידע נוסף, אפשר לעיין במאמר בנושא יצירת העברות.
CLI של gcloud
יוצרים קובץ JSON בפורמט הבא:
{
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}
מעבירים את המיקום של הקובץ לפקודה gcloud transfer jobs create באמצעות הדגל source-creds-file:
gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
--source-creds-file=PATH/TO/KEYFILE.JSON
API בארכיטקטורת REST
אובייקט transferSpec חייב להכיל את פרטי המפתח כחלק מאובייקט awsS3DataSource:
"transferSpec": {
"awsS3DataSource": {
"bucketName": "S3_BUCKET_NAME",
"awsAccessKey": {
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}
},
"gcsDataSink": {
"bucketName": "GCS_BUCKET_NAME"
}
}
ספריות לקוח
אפשר לראות דוגמאות בדף יצירת העברות.
שמירת פרטי הגישה ב-Secret Manager
Secret Manager הוא שירות מאובטח שמאחסן ומנהל נתונים רגישים כמו סיסמאות. הוא משתמש בהצפנה חזקה, בבקרת גישה מבוססת-תפקידים וביומני ביקורת כדי להגן על הסודות.
שירות העברת נתונים יכול להשתמש ב-Secret Manager כדי להגן על פרטי הכניסה שלכם ל-AWS. טוענים את פרטי הכניסה ל-Secret Manager, ואז מעבירים את שם משאב הסוד ל-Storage Transfer Service.
הפעלת ה-API
מפעילים את Secret Manager API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים
הגדרת הרשאות נוספות
הרשאות של משתמשים
המשתמש שיוצר את הסוד צריך להיות בעל התפקיד הבא:
- אדמין של Secret Manager (
roles/secretmanager.admin)
הרשאות של סוכן שירות
סוכן השירות של Storage Transfer Service צריך את תפקיד ה-IAM הבא:
- Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor)
כדי להעניק את התפקיד לסוכן השירות:
מסוף Google Cloud
פועלים לפי ההוראות כדי לאחזר את כתובת האימייל של סוכן השירות.
נכנסים לדף IAM במסוף Google Cloud .
לוחצים על הענקת גישה.
בשדה New principals, מזינים את כתובת האימייל של סוכן השירות.
בתפריט הנפתח Select a role, מחפשים את האפשרות Secret Manager Secret Accessor ובוחרים בה.
לוחצים על Save.
CLI של gcloud
משתמשים בפקודה gcloud projects add-iam-policy-binding כדי להוסיף את תפקיד IAM לסוכן השירות.
פועלים לפי ההוראות כדי לאחזר את כתובת האימייל של סוכן השירות.
מזינים את הפקודה הבאה בשורת הפקודה:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:SERVICE_AGENT_EMAIL' \ --role='roles/secretmanager.secretAccessor'
יצירת סוד
יוצרים סוד באמצעות Secret Manager:
מסוף Google Cloud
נכנסים לדף Secret Manager במסוף Google Cloud .
לוחצים על Create secret (יצירת סוד).
מזינים שם.
בשדה Secret value, מזינים את פרטי הכניסה בפורמט הבא:
{ "accessKeyId": "AWS_ACCESS_KEY_ID", "secretAccessKey": "AWS_SECRET_ACCESS_KEY" }לוחצים על Create secret (יצירת סוד).
אחרי שיוצרים את הסוד, רושמים את שם המשאב המלא של הסוד:
בוחרים בכרטיסייה סקירה כללית.
מעתיקים את הערך של מזהה המשאב. הפורמט הוא:
projects/1234567890/secrets/SECRET_NAME
CLI של gcloud
כדי ליצור סוד חדש באמצעות ה-CLI של gcloud, מעבירים את פרטי הכניסה בפורמט JSON לפקודה gcloud secrets create:
printf '{
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-
מאחזרים את השם המלא של משאב הסוד:
gcloud secrets describe SECRET_NAME
שימו לב לערך של name בתגובה. הפורמט הוא:
projects/1234567890/secrets/SECRET_NAME
לפרטים נוספים על יצירה וניהול של סודות, אפשר לעיין בתיעוד של Secret Manager.
העברת הסוד לפקודה ליצירת המשימה
כדי להשתמש ב-Secret Manager עם Storage Transfer Service, צריך להשתמש ב-API בארכיטקטורת REST כדי ליצור עבודת העברה.
מעבירים את שם המשאב של Secret Manager כערך של השדה transferSpec.awsS3DataSource.credentialsSecret:
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "Transfer with Secret Manager",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"transferSpec": {
"awsS3DataSource": {
"bucketName": "S3_BUCKET_NAME",
"credentialsSecret": "SECRET_RESOURCE_ID",
},
"gcsDataSink": {
"bucketName": "GCS_BUCKET_NAME"
}
}
}
אימות באמצעות זהות מאוחדת
כדי להשתמש בזהות מאוחדת לאימות ב-AWS:
יוצרים תפקיד IAM חדש ב-AWS.
בוחרים באפשרות מדיניות אמינות בהתאמה אישית כסוג הישות המהימנה.
מעתיקים ומדביקים את מדיניות ההרשאות הבאה:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "SUBJECT_ID" } } } ] }מחליפים את SUBJECT_ID ב-
subjectIDשל חשבון השירות שמנוהל על ידי Google, שנוצר באופן אוטומטי כשמתחילים להשתמש ב-Storage Transfer Service. כדי לאחזר אתsubjectID:עוברים אל דף העזר של
googleServiceAccounts.get.תיפתח חלונית אינטראקטיבית עם הכותרת Try this method (כדאי לנסות את השיטה הזו).
בחלונית, בקטע Request parameters (פרמטרים של בקשה), מזינים את מזהה הפרויקט. הפרויקט שאתם מציינים כאן צריך להיות הפרויקט שבו אתם משתמשים כדי לנהל את Storage Transfer Service.
לוחצים על Execute. השדה
subjectIdנכלל בתשובה.
מקצים לתפקיד אחת ממדיניות ההרשאות הבאות:
- AmazonS3ReadOnlyAccess מספק הרשאת קריאה בלבד למקור. האפשרות הזו מאפשרת העברות, אבל לא תומכת במחיקת אובייקטים במקור אחרי שההעברה מסתיימת.
- AmazonS3FullAccess אם ההעברה מוגדרת למחיקת אובייקטים במקור.
תפקיד בהתאמה אישית עם ההרשאות המתאימות מהטבלה הרשאות נדרשות. קובץ ה-JSON של ההרשאות המינימליות נראה כמו בדוגמה הבאה:
אזורים רגילים של AWS
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::S3_BUCKET_NAME/*", "arn:aws:s3:::S3_BUCKET_NAME" ] } ] }
אזורים ב-AWS GovCloud
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws-us-gov:s3:::S3_BUCKET_NAME/*", "arn:aws-us-gov:s3:::S3_BUCKET_NAME" ] } ] }
נותנים שם לתפקיד ויוצרים אותו.
אחרי שיוצרים את התפקיד, אפשר לראות את הפרטים שלו כדי לאחזר את שם המשאב של אמזון (ARN). שימו לב לערך הזה. הוא מופיע באחד מהפורמטים הבאים:
- באזורי AWS רגילים:
arn:aws:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME - באזורי AWS GovCloud:
arn:aws-us-gov:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME
האופן שבו מעבירים את ה-ARN של התפקיד אל Storage Transfer Service תלוי בממשק שבו משתמשים כדי להתחיל את ההעברה.
מסוף Google Cloud
מזינים את ה-ARN של התפקיד ישירות בטופס ליצירת משימת ההעברה.
למידע נוסף, אפשר לעיין במאמר בנושא יצירת העברות.
CLI של gcloud
יוצרים קובץ JSON בפורמט הבא:
{
"roleArn": "AWS_ROLE_ARN"
}
מעבירים את המיקום של הקובץ לפקודה gcloud transfer jobs create באמצעות הדגל source-creds-file:
gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
--source-creds-file=PATH/TO/ARNFILE.JSON
API בארכיטקטורת REST
אובייקט transferSpec צריך לכלול את פרטי ה-ARN של התפקיד כחלק מאובייקט awsS3DataSource:
"transferSpec": {
"awsS3DataSource": {
"bucketName": "AWS_SOURCE_NAME",
"roleArn": "AWS_ROLE_ARN"
},
"gcsDataSink": {
"bucketName": "GCS_BUCKET_NAME"
}
}
ספריות לקוח
אפשר לראות דוגמאות בדף יצירת העברות.
הגבלות על כתובות IP
אם בפרויקט AWS שלכם מוגדרות הגבלות על כתובות IP לגישה לאחסון, אתם צריכים להוסיף את טווחי כתובות ה-IP שמשמשים את העובדים של Storage Transfer Service לרשימת כתובות ה-IP המותרות.
טווחי כתובות ה-IP האלה יכולים להשתנות, ולכן אנחנו מפרסמים את הערכים הנוכחיים כקובץ JSON בכתובת קבועה:
https://www.gstatic.com/storage-transfer-service/ipranges.json
כשמוסיפים טווח חדש לקובץ, אנחנו ממתינים לפחות 7 ימים לפני שאנחנו משתמשים בטווח הזה לבקשות מ-Storage Transfer Service.
מומלץ לשלוף נתונים מהמסמך הזה לפחות פעם בשבוע כדי לשמור על עדכניות של הגדרות האבטחה. במאמר הזה מתוך מסמכי הענן הווירטואלי הפרטי יש סקריפט לדוגמה ב-Python שמביא טווחי כתובות IP מקובץ JSON.
כדי להוסיף את הטווחים האלה ככתובות IP מורשות, משתמשים בשדה Condition במדיניות של מאגר, כמו שמתואר במסמכי AWS S3 בנושא ניהול גישה על סמך כתובות IP ספציפיות.