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

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

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

‫Storage Transfer Service תומך באזורים הבאים של Amazon S3:
af-south-1
ap-east-1
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
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
העברות באמצעות הרשת הפרטית המנוהלת תומכות באזורי 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, בוחרים באפשרות מפתח גישה – גישה פרוגרמטית.

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

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

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

Enable the API

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

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

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

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

איך נותנים תפקיד

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

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

  • Secret Manager Secret Accessor ‏ (roles/secretmanager.secretAccessor)

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

מסוף Cloud

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

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

    כניסה לדף IAM

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

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

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

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

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:

מסוף 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

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:

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

  2. בוחרים באפשרות מדיניות אמינות בהתאמה אישית כסוג הישות המהימנה.

  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 ב-subjectID של חשבון השירות שמנוהל על ידי Google, שנוצר באופן אוטומטי כשמתחילים להשתמש ב-Storage Transfer Service. כדי לאחזר את subjectID:

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

      תיפתח חלונית אינטראקטיבית עם הכותרת Try this method (נסו את השיטה הזו).

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

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

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

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

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