הגדרת גישה למקור: Amazon S3

אתם יכולים להגדיר גישה לקטגוריה של Amazon S3 באחת משתי דרכים:

אזורים נתמכים

‫Storage Transfer Service תומך באזורים הבאים של Amazon S3:
af-south-1
ap-east-1
ap-east-2
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ap-southeast-2
ap-southeast-3
ap-southeast-4
ap-southeast-5
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
il-central-1
me-central-1
me-south-1
sa-east-1
us-east-1
us-east-2
us-west-1
us-west-2
us-gov-east-1
us-gov-west-1
העברות באמצעות הרשת הפרטית בניהול Google תומכות באזורי AWS הבאים:
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
us-east-1
us-east-2
us-west-1
us-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:

  1. יוצרים משתמש ב-AWS Identity and Access Management (AWS IAM) עם שם שתוכלו לזהות, כמו transfer-user.

  2. בקטע AWS access type, בוחרים באפשרות Access key - programmatic access.

  3. מקצים למשתמש אחד מהתפקידים הבאים:

    • ‫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"
          ]
        }
      ]
      }
  4. אחרי שיוצרים את המשתמש, רושמים בצד את המזהה של מפתח הגישה ואת מפתח הגישה הסודי.

האופן שבו מעבירים את המזהה של מפתח הגישה ואת מפתח הגישה הסודי אל 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 הוא שירות מאובטח שמאחסן ומנהל מידע אישי רגיש, כמו סיסמאות. הוא משתמש בהצפנה חזקה, בבקרת גישה מבוססת-תפקיד וברישום ביומן ביקורת כדי להגן על הסודות שלכם.

השירות Storage Transfer Service יכול להשתמש ב-Secret Manager כדי להגן על פרטי הכניסה שלכם ל-AWS. אתם טוענים את פרטי הכניסה ל-Secret Manager, ואז מעבירים את שם המשאב הסודי ל-Storage Transfer Service.

הפעלת ה-API

מפעילים את Secret Manager API, אם הוא עדיין לא מופעל.

התפקידים שנדרשים כדי להפעיל ממשקי API

כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?

להפעלת ה-API

הגדרת הרשאות נוספות

הרשאות של משתמשים

המשתמש שיוצר את הסוד צריך את התפקיד הבא:

  • אדמין ב-Secret Manager‏ (roles/secretmanager.admin)

איך מקצים תפקיד

הרשאות של סוכן שירות

סוכן השירות של Storage Transfer Service צריך את התפקיד הבא ב-IAM:

  • גישה לסודות ב-Secret Manager‏ (roles/secretmanager.secretAccessor)

כדי להקצות את התפקיד לסוכן השירות:

מסוף Google Cloud

  1. כך מאחזרים את כתובת האימייל של סוכן השירות.

  2. נכנסים לדף IAM במסוף Google Cloud .

    כניסה לדף IAM

  3. לוחצים על הענקת גישה.

  4. בשדה New principals, מזינים את כתובת האימייל של סוכן השירות.

  5. בתפריט הנפתח Select a role, מחפשים את התפקיד Secret Manager Secret Accessor ובוחרים אותו.

  6. לוחצים על Save.

‫CLI של gcloud

משתמשים בפקודה gcloud projects add-iam-policy-binding כדי להוסיף את תפקיד ה-IAM לסוכן השירות.

  1. כך מאחזרים את כתובת האימייל של סוכן השירות.

  2. מזינים את הפקודה הבאה בשורת הפקודה:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:SERVICE_AGENT_EMAIL' \
      --role='roles/secretmanager.secretAccessor'
    

יצירת סוד

יוצרים סוד באמצעות Secret Manager:

מסוף Google Cloud

  1. נכנסים לדף Secret Manager במסוף Google Cloud .

    כניסה ל-Secret Manager

  2. לוחצים על Create secret.

  3. נותנים שם לאחסון השיתופי.

  4. בשדה Secret value, מזינים את פרטי הכניסה בפורמט הבא:

    {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
    
  5. לוחצים על Create secret.

  6. אחרי שיוצרים את הסוד, שימו לב לשם המשאב המלא של הסוד:

    1. לוחצים על הכרטיסייה סקירה כללית.

    2. מעתיקים את הערך של מזהה המשאב. הפורמט של הכתובת הוא:

      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:

  1. יוצרים תפקיד IAM חדש ב-AWS.

  2. בוחרים באפשרות Custom trust policy בתור סוג הישות המהימנה.

  3. מעתיקים ומדביקים את מדיניות האמון הבאה:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:sub": "SUBJECT_ID"
            }
          }
        }
      ]
    }
    
  4. מחליפים את SUBJECT_ID באחד מהערכים הבאים:

    סוכן שירות

    אם במשימת ההעברה לא צוין serviceAccount (כלומר, אתם לא מקצים הרשאות של סוכן שירות לחשבון שירות בניהול המשתמש), צריך להחליף את SUBJECT_ID ב-subjectId של סוכן השירות שנוצר באופן אוטומטי כשמתחילים להשתמש ב-Storage Transfer Service. כדי לאחזר את subjectId:

    1. עוברים אל דף העזר של googleServiceAccounts.get.

      נפתחת חלונית אינטראקטיבית בשם Try this method.

    2. בחלונית, בקטע Request parameters, מזינים את מזהה הפרויקט. הפרויקט שמציינים כאן צריך להיות הפרויקט שבו משתמשים כדי לנהל את Storage Transfer Service.

    3. לוחצים על Execute. השדה subjectId נכלל בתשובה.

    חשבון שירות בניהול המשתמשים

    אם אתם מקצים הרשאות של סוכן שירות לחשבון שירות בניהול המשתמש, הערך של SUBJECT_ID הוא המזהה הייחודי של חשבון השירות (uniqueId).

    כדי לאחזר את הערך של uniqueId, קראו את המאמר אחזור המזהה הייחודי של חשבון שירות.

  5. מקצים לתפקיד את אחת ממדיניות ההרשאות הבאות:

    • 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"
          ]
        }
      ]
      }
  6. נותנים שם לתפקיד ויוצרים אותו.

אחרי שיוצרים את התפקיד, פותחים את פרטי התפקיד כדי לאחזר את ה-Amazon Resource 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 שמשמשים את ה-workers של 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 ספציפיות.