לפני העברת נתונים מקטגוריה ב-Azure Storage, צריך להגדיר גישה לקטגוריה הזו כדי ש-Storage Transfer Service יוכל לאחזר את האובייקטים שלה.
Storage Transfer Service תומך בשיטות האימות הבאות של Azure:
טוקנים של חתימת גישה משותפת (SAS). אפשר לציין את אסימוני ה-SAS ישירות כשיוצרים העברת נתונים, או לאחסן אותם ב-Secret Manager.
אפשר לאחסן מפתחות משותפים של Azure ב-Secret Manager ולהעביר את הסוד כשיוצרים עבודת העברה.
פרטי הכניסה המאוחדים מועברים באובייקט
federatedIdentityConfigבמהלך יצירת משימת ההעברה.
במסמך הזה יש גם מידע על הוספת כתובות IP של עובדים ב-Storage Transfer Service לחומת האש של Azure Storage כדי לאפשר גישה. פרטים נוספים זמינים במאמר בנושא הגבלות על כתובות IP.
אזורים נתמכים
Storage Transfer Service יכול להעביר נתונים מהאזורים הבאים של Microsoft Azure Storage:- אמריקה: מזרח ארה"ב, מזרח ארה"ב 2, מערב ארה"ב, מערב ארה"ב 2, מערב ארה"ב 3, מרכז ארה"ב, צפון מרכז ארה"ב, דרום מרכז ארה"ב, מערב מרכז ארה"ב, מרכז קנדה, מזרח קנדה, דרום ברזיל
- אסיה והאוקיינוס השקט: אוסטרליה מרכזית, אוסטרליה מזרחית, אוסטרליה דרום-מזרחית, הודו מרכזית, הודו דרומית, הודו מערבית, דרום-מזרח אסיה, מזרח אסיה, יפן מזרחית, יפן מערבית, קוריאה דרומית, קוריאה מרכזית
- אירופה, המזרח התיכון ואפריקה (EMEA): צרפת מרכזית, גרמניה מערב מרכזית, נורווגיה מזרחית, שוודיה מרכזית, שווייץ צפונית, צפון אירופה, מערב אירופה, בריטניה דרומית, בריטניה מערבית, קטאר מרכזית, איחוד האמירויות הערביות צפונית, דרום אפריקה צפונית
אפשרות 1: אימות באמצעות טוקן SAS
כדי להגדיר גישה למאגר Microsoft Azure באמצעות אסימון SAS, פועלים לפי השלבים הבאים. אפשר גם לשמור את אסימון ה-SAS ב-Secret Manager. כדי לעשות זאת, פועלים לפי ההוראות במאמר אימות באמצעות מפתח משותף או אסימון SAS של Azure ב-Secret Manager.
יוצרים משתמש ב-Microsoft Azure Storage או משתמשים במשתמש קיים כדי לגשת לחשבון האחסון של מאגר ה-Blob ב-Microsoft Azure Storage.
יוצרים טוקן SAS ברמת המאגר. הוראות מפורטות זמינות במאמר Grant limited access to Azure Storage resources using shared access signatures.
האפשרות שירותים מותרים חייבת לכלול את Blob.
בקטע Allowed resource types (סוגי משאבים מותרים), בוחרים באפשרויות Container (מאגר) ו-Object (אובייקט).
ההרשאות המותרות חייבות לכלול את ההרשאות קריאה ורשימה. אם ההעברה מוגדרת למחיקת אובייקטים מהמקור, צריך לכלול גם את ההרשאה מחיקה.
זמן התפוגה שמוגדר כברירת מחדל לאסימוני SAS הוא 8 שעות. חשוב להגדיר תאריך תפוגה סביר שיאפשר לכם להשלים את ההעברה בהצלחה.
אל תציינו כתובות IP בשדה כתובות IP מותרות. Storage Transfer Service משתמש בכתובות IP שונות ולא תומך בהגבלת כתובות IP.
הפרוטוקול Allowed protocols צריך להיות HTTPS only.
אחרי שיוצרים את הטוקן, רושמים את הערך של טוקן ה-SAS שמוחזר. תצטרכו את הערך הזה כשמגדירים את ההעברה באמצעות Storage Transfer Service.
אפשרות 2: אימות באמצעות מפתח משותף או טוקן SAS של Azure ב-Secret Manager
Secret Manager הוא שירות מאובטח שמאחסן ומנהל נתונים רגישים כמו סיסמאות. הוא משתמש בהצפנה חזקה, בבקרת גישה מבוססת-תפקידים וביומני ביקורת כדי להגן על הסודות.
Storage Transfer Service תומך בשמות משאבים של Secret Manager שמפנים לפרטי הכניסה שלכם ב-Azure שמאוחסנים בצורה מאובטחת.
כדי להשתמש במפתח משותף של Azure, צריך לשמור את המפתח ב-Secret Manager. אפשר לשמור טוקנים של SAS ב-Secret Manager או להעביר אותם ישירות.
כשמציינים מפתח משותף, Storage Transfer Service משתמש במפתח הזה כדי ליצור SAS של שירות שההיקף שלו מוגבל לקונטיינר של Azure שצוין בעבודת ההעברה.
הפעלת ה-API
מפעילים את Secret Manager API, אם הוא עדיין לא מופעל.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים
הגדרת הרשאות נוספות
הרשאות של משתמשים
המשתמש שיוצר את הסוד צריך להיות בעל התפקיד הבא:
- אדמין של 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 .
לוחצים על יצירת סוד.
מזינים שם.
בתיבת הטקסט Secret value, מזינים את פרטי הכניסה באחד מהפורמטים הבאים.
{ "sas_token" : "SAS_TOKEN_VALUE" }או:
{ "access_key" : "ACCESS_KEY" }לוחצים על יצירת סוד.
אחרי שיוצרים את הסוד, מציינים את שם המשאב המלא של הסוד:
לוחצים על הכרטיסייה סקירה כללית.
מעתיקים את הערך של שם המשאב. הפורמט הוא:
projects/1234567890/secrets/SECRET_NAME
gcloud
כדי ליצור סוד חדש באמצעות כלי שורת הפקודה של Google Cloud, מעבירים את פרטי הכניסה בפורמט JSON לפקודה gcloud secrets create:
printf '{
"sas_token" : "SAS_TOKEN_VALUE"
}' | gcloud secrets create SECRET_NAME --data-file=-
או:
printf '{
"access_key" : "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.azureBlobStorageDataSource.credentialsSecret:
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "Transfer with Secret Manager",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"transferSpec": {
"azureBlobStorageDataSource": {
"storageAccount": "AZURE_STORAGE_ACCOUNT_NAME",
"container": "AZURE_CONTAINER_NAME",
"credentialsSecret": "SECRET_RESOURCE_ID",
},
"gcsDataSink": {
"bucketName": "CLOUD_STORAGE_BUCKET_NAME"
}
}
}
פרטים מלאים על יצירת העברה זמינים במאמר בנושא יצירת העברות.
אפשרות 3: אימות באמצעות זהות מאוחדת
שירות העברת נתונים (Storage Transfer Service) תומך באיחוד שירותי אימות הזהות של עומסי עבודה ב-Azure עם Google Cloud. Storage Transfer Service יכול לשלוח בקשות ל-Azure Storage דרך אפליקציות רשומות ב-Azure, כך שלא צריך להעביר פרטי כניסה ישירות ל-Storage Transfer Service.
כדי להגדיר זהות מאוחדת, פועלים לפי ההוראות האלה.
הגדרת פרטי כניסה ל-Google Cloud
כדי לאפשר ל-Storage Transfer Service ליצור אסימונים מזהים מסוג OpenID Connect (OIDC):
סוכן שירות
אם בעבודת ההעברה לא מצוין serviceAccount (כלומר, אתם לא מאצילים הרשאות של סוכן שירות לחשבון שירות בניהול המשתמשים), צריך להקצות לסוכן השירות את התפקיד יצירת אסימונים בחשבון שירות (roles/iam.serviceAccountTokenCreator):
מאחזרים את
accountEmailשל סוכן השירות:- עוברים אל דף העזר של
googleServiceAccounts.get. - בקטע Request parameters, מזינים את מזהה הפרויקט.
- לוחצים על Execute. הסכומים
accountEmailוsubjectIdיוחזרו.
- עוברים אל דף העזר של
מקצים לסוכן השירות את התפקיד יצירת אסימונים בחשבון שירות (
roles/iam.serviceAccountTokenCreator) בחשבון השירות שלו. פועלים לפי ההוראות במאמר ניהול הגישה לחשבונות שירות.
חשבון שירות בניהול המשתמש
אם מאצילים הרשאות של סוכן שירות לחשבון שירות בניהול המשתמש, פרטי הכניסה שלכם ל-Google מוגדרים כשמגדירים את האצלת ההרשאות. לא נדרשים שלבים נוספים.
הגדרת פרטי כניסה של מיקרוסופט
קודם כול, רושמים אפליקציה ומוסיפים אמצעי אימות מאוחד:
- נכנסים אל https://portal.azure.com.
- עוברים לדף רישום אפליקציות.
- לוחצים על New registration.
- מזינים שם. לדוגמה,
azure-transfer-app. - בוחרים באפשרות רק חשבונות בספרייה הארגונית הזו.
- לוחצים על הרשמה. האפליקציה נוצרת. שימו לב ל
Application (client) IDולDirectory (tenant) ID. אפשר גם לאחזר את הנתונים האלה מאוחר יותר מדף הסקירה הכללית של האפליקציה. - לוחצים על Certificates & secrets ובוחרים בכרטיסייה Federated credentials.
- לוחצים על הוספת פרטי כניסה.
בוחרים באפשרות מנפיק אחר כתרחיש ומזינים את הפרטים הבאים:
- מנפיק:
https://accounts.google.com מזהה הנושא: בהתאם לשאלה אם אתם משתמשים בסוכן השירות שמוגדר כברירת מחדל או בחשבון שירות בניהול המשתמשים, יופיע אחד מהערכים הבאים:
- ה-
subjectIdשל סוכן השירות, שאוחזר בהגדרת פרטי הכניסה של Google Cloud. - ה-
uniqueIdשל חשבון השירות שמנוהל על ידי משתמש. פרטים על אחזור הערך הזה מופיעים במאמר בנושא אחזור מזהה ייחודי של חשבון שירות.
- ה-
שם ייחודי לפרטי הכניסה המאוחדים.
הקהל חייב להישאר
api://AzureADTokenExchange.
- מנפיק:
לוחצים על הוספה.
לאחר מכן, מעניקים לאפליקציה גישה לקונטיינר של Azure Storage:
- עוברים לדף Storage Accounts (חשבונות אחסון) בחשבון Azure.
- בוחרים את חשבון האחסון ואז בוחרים באפשרות Containers בקטע Data storage.
- לוחצים על הדלי שרוצים להעניק לו גישה.
- בתפריט הימני, לוחצים על Access Control (IAM) ובוחרים בכרטיסייה Roles.
- לוחצים על סמל האפשרויות הנוספות (
...) לצד תפקיד כלשהו ובוחרים באפשרות שיבוט. - מזינים שם לתפקיד המותאם אישית ולוחצים על יצירה מאפס. לוחצים על הבא.
- לוחצים על הוספת הרשאות ומחפשים את
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read. - לוחצים על הכרטיס Microsoft Storage שמופיע.
- לוחצים על כפתור הבחירה פעולות על נתונים.
- בוחרים באפשרות קריאה : קריאת Blob.
- לוחצים על הוספה.
- אם אתם מתכוונים למחוק אובייקטים במקור אחרי ההעברה, לוחצים שוב על הוספת הרשאות ומחפשים את
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete. - לוחצים על הכרטיס Microsoft Storage שמופיע, בוחרים באפשרות פעולות על נתונים ואז באפשרות מחיקה : מחיקת blob.
- לוחצים על הוספה.
- לוחצים על בדיקה + יצירה ואז על יצירה. אתם חוזרים לדף בקרת גישה (IAM) של הקטגוריה.
- לוחצים על הוספה ובוחרים באפשרות הוספת הקצאת תפקיד.
- בוחרים את התפקיד בהתאמה אישית מתוך רשימת התפקידים ולוחצים על הבא.
- לוחצים על בחירת חברים.
- בשדה Select, מזינים את שם האפליקציה שרשמתם קודם. לדוגמה,
azure-transfer-app. - לוחצים על משבצת האפליקציה ואז על בחירה.
- לוחצים על בדיקה + הקצאה.
העברת מזהי האפליקציה לפקודה ליצירת המשימה
מזהי האפליקציה מועברים לפקודה ליצירת משימה באמצעות אובייקט federatedIdentityConfig. מעתיקים את מזהה האפליקציה (הלקוח) ואת מזהה הספרייה (הדייר) ששמרתם בשלבים של הגדרת פרטי הכניסה של מיקרוסופט לשדות client_id ו-tenant_id.
"federatedIdentityConfig": {
"client_id": "efghe9d8-4810-800b-8f964ed4057f",
"tenant_id": "abcd1234-c8f0-4cb0-b0c5-ae4aded60078"
}
דוגמה לבקשה ליצירת משימה:
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "Transfer with Azure Federated Identity",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"transferSpec": {
"azureBlobStorageDataSource": {
"storageAccount": "AZURE_STORAGE_ACCOUNT_NAME",
"container": "AZURE_CONTAINER_NAME",
"federatedIdentityConfig": {
"client_id": "AZURE_CLIENT_ID",
"tenant_id": "AZURE_TENANT_ID"
}
},
"gcsDataSink": {
"bucketName": "CLOUD_STORAGE_BUCKET_NAME"
}
}
}
פרטים מלאים על יצירת העברה זמינים במאמר בנושא יצירת העברות.
הגבלות על כתובות IP
אם אתם מגבילים את הגישה למשאבי Azure באמצעות חומת אש של Azure Storage, אתם צריכים להוסיף לרשימת כתובות ה-IP המותרות את טווחי כתובות ה-IP שמשמשים את העובדים של Storage Transfer Service.
טווחי כתובות ה-IP האלה יכולים להשתנות, ולכן אנחנו מפרסמים את הערכים הנוכחיים כקובץ JSON בכתובת קבועה:
https://www.gstatic.com/storage-transfer-service/ipranges.json
כשמוסיפים טווח חדש לקובץ, אנחנו ממתינים לפחות 7 ימים לפני שאנחנו משתמשים בטווח הזה לבקשות מ-Storage Transfer Service.
מומלץ לשלוף נתונים מהמסמך הזה לפחות פעם בשבוע כדי לשמור על עדכניות של הגדרות האבטחה. במאמר הזה מתוך מסמכי הענן הווירטואלי הפרטי יש סקריפט לדוגמה ב-Python שמביא טווחי כתובות IP מקובץ JSON.
כדי להוסיף את טווחי כתובות ה-IP האלה ככתובות IP מותרות, צריך לפעול לפי ההוראות במאמר של Microsoft Azure בנושא הגדרת חומות אש ורשתות וירטואליות ב-Azure Storage.