יש שתי דרכים להגדיר גישה לקטגוריה של 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
|
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 של ההרשאות המינימליות נראה כמו בדוגמה הבאה:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME/*", "arn:aws:s3:::AWS_BUCKET_NAME" ] } ] }
רושמים בצד את המזהה של מפתח הגישה ואת מפתח הגישה הסודי כשהמשתמש נוצר בהצלחה.
האופן שבו מעבירים את מזהה מפתח הגישה ואת מפתח הגישה הסודי אל Storage Transfer Service תלוי בממשק שבו משתמשים כדי להתחיל את ההעברה.
מסוף 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": "AWS_SOURCE_NAME",
"awsAccessKey": {
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}
},
"gcsDataSink": {
"bucketName": "GCS_SINK_NAME"
}
}
ספריות לקוח
אפשר לראות דוגמאות בדף יצירת העברות.
שמירת פרטי הגישה ב-Secret Manager
Secret Manager הוא שירות מאובטח שמאחסן ומנהל נתונים רגישים כמו סיסמאות. הוא משתמש בהצפנה חזקה, בבקרת גישה מבוססת-תפקידים וביומני ביקורת כדי להגן על הסודות.
Storage Transfer Service יכול להשתמש ב-Secret Manager כדי להגן על פרטי הגישה שלכם ל-AWS. טוענים את פרטי הכניסה ל-Secret Manager, ואז מעבירים את שם משאב הסוד ל-Storage Transfer Service.
הפעלת ה-API
Enable the Secret Manager API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM
role (roles/serviceusage.serviceUsageAdmin), which
contains the serviceusage.services.enable permission. Learn how to grant
roles.
הגדרת הרשאות נוספות
הרשאות של משתמשים
המשתמש שיוצר את הסוד צריך להיות בעל התפקיד הבא:
- אדמין של Secret Manager (
roles/secretmanager.admin)
הרשאות של סוכן שירות
סוכן השירות של Storage Transfer Service צריך את תפקיד ה-IAM הבא:
- Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor)
כדי להעניק את התפקיד לסוכן השירות:
מסוף Cloud
פועלים לפי ההוראות כדי לאחזר את כתובת האימייל של סוכן השירות.
נכנסים לדף IAM במסוף Google Cloud .
לוחצים על הענקת גישה.
בתיבת הטקסט New principals, מזינים את כתובת האימייל של סוכן השירות.
בתפריט הנפתח Select a role, מחפשים את האפשרות Secret Manager Secret Accessor ובוחרים בה.
לוחצים על Save.
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:
מסוף 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
gcloud
כדי ליצור סוד חדש באמצעות כלי שורת הפקודה של Google Cloud, מעבירים את פרטי הכניסה בפורמט 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": "AWS_BUCKET_NAME",
"credentialsSecret": "SECRET_RESOURCE_ID",
},
"gcsDataSink": {
"bucketName": "CLOUD_STORAGE_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 של ההרשאות המינימליות נראה כמו בדוגמה הבאה:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME/*", "arn:aws:s3:::AWS_BUCKET_NAME" ] } ] }
נותנים שם לתפקיד ויוצרים אותו.
אחרי שיוצרים את התפקיד, אפשר לראות את הפרטים שלו כדי לאחזר את שם משאב Amazon (ARN). שימו לב לערך הזה. הפורמט שלו הוא
arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME.
האופן שבו מעבירים את ה-ARN אל Storage Transfer Service תלוי בממשק שבו משתמשים כדי להתחיל את ההעברה.
מסוף Cloud
מזינים את ה-ARN ישירות בטופס ליצירת משימת ההעברה.
למידע נוסף, אפשר לעיין במאמר בנושא יצירת העברות.
CLI של gcloud
יוצרים קובץ JSON בפורמט הבא:
{
"roleArn": "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": "ARN"
},
"gcsDataSink": {
"bucketName": "GCS_SINK_NAME"
}
}
ספריות לקוח
אפשר לראות דוגמאות בדף יצירת העברות.
הגבלות על כתובות IP
אם בפרויקט AWS שלכם יש הגבלות על כתובות IP לגישה לאחסון, אתם צריכים להוסיף את טווחי כתובות ה-IP שבהם משתמשים העובדים של Storage Transfer Service לרשימת כתובות ה-IP המותרות.
טווחי כתובות ה-IP האלה יכולים להשתנות, ולכן אנחנו מפרסמים את הערכים הנוכחיים כקובץ JSON בכתובת קבועה:
https://www.gstatic.com/storage-transfer-service/ipranges.json
כשמוסיפים טווח חדש לקובץ, אנחנו ממתינים לפחות 7 ימים לפני שאנחנו משתמשים בטווח הזה לבקשות מ-Storage Transfer Service.
מומלץ לשלוף נתונים מהמסמך הזה לפחות פעם בשבוע כדי לשמור על עדכניות של הגדרות האבטחה. במאמר הזה מתוך מסמכי התיעוד של הענן הווירטואלי הפרטי (VPC) יש סקריפט Python לדוגמה שמביא טווחי כתובות IP מקובץ JSON.
כדי להוסיף את הטווחים האלה ככתובות IP מורשות, משתמשים בשדה Condition במדיניות של מאגר, כפי שמתואר במסמכי AWS S3 בנושא ניהול גישה על סמך כתובות IP ספציפיות.