התחברות ל-Blob Storage
אדמינים של BigQuery יכולים ליצור חיבור כדי לאפשר לנתוני ניתוח גישה לנתונים שמאוחסנים ב-Azure Blob Storage.
BigQuery Omni ניגש לנתונים ב-Blob Storage דרך חיבורים. BigQuery Omni תומך באיחוד שירותי אימות הזהות של עומסי עבודה ב-Azure. התמיכה של BigQuery Omni באיחוד שירותי אימות הזהות של עומסי עבודה ב-Azure מאפשרת להעניק לאפליקציית Azure בדייר שלכם גישה לחשבון שירות של Google. אין סודות של לקוח האפליקציה שצריך לנהל בעצמך או ש-Google צריכה לנהל.
אחרי שיוצרים חיבור BigQuery ל-Azure, אפשר להריץ שאילתות על הנתונים ב-Blob Storage או לייצא את תוצאות השאילתות ל-Blob Storage.
לפני שמתחילים
מוודאים שיצרתם את המשאבים הבאים:
Google Cloud פרויקט עם BigQuery Connection API מופעל.
אם אתם משתמשים במודל התמחור לפי נפח, אתם צריכים לוודא שהפעלתם את BigQuery Reservation API בפרויקט. מידע על התמחור של BigQuery Omni
דייר ב-Azure עם מינוי ל-Azure.
חשבון Azure Storage שעומד בדרישות הבאות:
זהו חשבון V2 לשימוש כללי או חשבון Blob Storage.
הוא משתמש במרחב שמות היררכי. מידע נוסף זמין במאמר בנושא יצירת חשבון אחסון לשימוש עם Azure Data Lake Storage Gen2.
הנתונים מאוכלסים באחד מהפורמטים הנתמכים.
הנתונים נמצאים באזור
azure-eastus2.
התפקידים הנדרשים
-
כדי לקבל את ההרשאות שנדרשות ליצירת חיבור לגישה לנתוני Azure Blob Storage, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM BigQuery Connection Admin (אדמין של חיבור BigQuery) (
roles/bigquery.connectionAdmin) בפרויקט. להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
-
מוודאים שיש לכם את הרשאות ה-IAM הבאות ב-Azure בדייר:
Application.ReadWrite.AllAppRoleAssignment.ReadWrite.All
מכסות
מידע נוסף על מכסות זמין במאמר בנושא BigQuery Connection API.
יצירת חיבור ל-Azure
כדי ליצור חיבור ל-Azure, מבצעים את השלבים הבאים:
- יוצרים אפליקציה בדייר (tenant) שלכם ב-Azure.
- יוצרים את החיבור ל-BigQuery Azure.
- הוספת פרטי כניסה מאוחדים
- הקצאת תפקיד לאפליקציות BigQuery Azure AD.
מידע נוסף על שימוש בפרטי כניסה של זהויות מאוחדות כדי לגשת לנתונים ב-Azure זמין במאמר איחוד שירותי אימות הזהות של עומסי עבודה.
יצירת אפליקציה בדייר Azure
כדי ליצור אפליקציה בדייר Azure, פועלים לפי השלבים הבאים:
Azure Portal
בפורטל Azure, עוברים אל App registrations (רישום אפליקציות) ולוחצים על New registration (רישום חדש).
בשדה Names, מזינים שם לאפליקציה.
בקטע Supported account types (סוגי חשבונות נתמכים), בוחרים באפשרות Accounts in this organizational directory only (חשבונות רק בספרייה הארגונית הזו).
כדי לרשום את האפליקציה החדשה, לוחצים על Register (רישום).
רושמים את מזהה האפליקציה (אפליקציית הלקוח). צריך לספק את המזהה הזה כשיוצרים את הקישור.
Terraform
מוסיפים את השורות הבאות לקובץ התצורה של Terraform:
data "azuread_client_config" "current" {} resource "azuread_application" "example" { display_name = "bigquery-omni-connector" owners = [data.azuread_client_config.current.object_id] } resource "azuread_service_principal" "example" { client_id = azuread_application.example.client_id app_role_assignment_required = false owners = [data.azuread_client_config.current.object_id] }
מידע נוסף על רישום אפליקציה ב-Azure
יצירת חיבור
המסוף
במסוף Google Cloud , עוברים לדף BigQuery.
בחלונית Explorer, לוחצים על Add data.
תיבת הדו-שיח הוספת נתונים נפתחת.
בחלונית Filter By, בקטע Data Source Type, בוחרים באפשרות Databases.
אפשרות אחרת היא להזין
Azureבשדה חיפוש מקורות נתונים.בקטע מקורות נתונים מומלצים, לוחצים על Azure Blob Storage.
לוחצים על כרטיס הפתרון Azure Blob Storage Omni: BigQuery Federation.
בתיבת הדו-שיח Create table, בשדה Connection ID, בוחרים באפשרות Create a new ABS connection.
בחלונית מקור נתונים חיצוני, מזינים את הפרטים הבאים:
- בקטע סוג החיבור, בוחרים באפשרות BigLake ב-Azure (דרך BigQuery Omni).
- בשדה מזהה החיבור, מזינים מזהה למשאב החיבור. אפשר להשתמש באותיות, במספרים, במקפים ובקווים תחתונים.
- בוחרים את המיקום שבו רוצים ליצור את הקישור.
- אופציונלי: בשדה Friendly name (שם ידידותי), מזינים שם ידידותי לחיבור, כמו
My connection resource. השם הידידותי יכול להיות כל ערך שיעזור לכם לזהות את משאב החיבור אם תצטרכו לשנות אותו בהמשך. - אופציונלי: בשדה Description, מזינים תיאור של משאב החיבור.
- בשדה Azure tenant id (מזהה הדייר ב-Azure), מזינים את מזהה הדייר ב-Azure, שנקרא גם מזהה הארגון שלי (הדייר).
מסמנים את התיבה Use federated identity (שימוש בזהות מאוחדת) ומזינים את מזהה הלקוח של האפליקציה המאוחדת ב-Azure.
במאמר יצירת אפליקציה בדייר Azure מוסבר איך מקבלים מזהים של Azure.
לוחצים על יצירת קישור.
לוחצים על מעבר לחיבור.
בקטע Connection info (פרטי החיבור), רושמים את הערך של BigQuery Google identity (זהות Google ב-BigQuery), שהוא מזהה חשבון השירות. המזהה הזה הוא של חשבון השירותGoogle Cloud שאתם נותנים לו הרשאה לגשת לאפליקציה שלכם.
Terraform
resource "google_bigquery_connection" "connection" { connection_id = "omni-azure-connection" location = "azure-eastus2" description = "created by terraform" azure { customer_tenant_id = "TENANT_ID" federated_application_client_id = azuread_application.example.client_id } }
מחליפים את TENANT_ID במזהה הדייר של ספריית Azure שמכילה את חשבון Blob Storage.
BQ
משתמשים בפקודה bq mk. כדי לקבל את הפלט בפורמט JSON, משתמשים בפרמטר --format=json.
bq mk --connection --connection_type='Azure' \ --tenant_id=TENANT_ID \ --location=AZURE_LOCATION \ --federated_azure=true \ --federated_app_client_id=APP_ID \ CONNECTION_ID
מחליפים את מה שכתוב בשדות הבאים:
-
TENANT_ID: מזהה הדייר בספריית Azure שמכילה את חשבון Azure Storage. -
AZURE_LOCATION: האזור ב-Azure שבו נמצאים הנתונים שלכם ב-Azure Storage. BigQuery Omni תומך באזורazure-eastus2. -
APP_ID: מזהה האפליקציה (הלקוח) ב-Azure. במאמר יצירת אפליקציה בדייר Azure מוסבר איך מקבלים את המזהה הזה. -
CONNECTION_ID: השם של החיבור.
הפלט אמור להיראות כך:
Connection CONNECTION_ID successfully created Please add the following identity to your Azure application APP_ID Identity: SUBJECT_ID
הפלט הזה כולל את הערכים הבאים:
APP_ID: המזהה של האפליקציה שיצרתם.
SUBJECT_ID: המזהה של Google Cloud חשבון השירות שהמשתמש מאשר לו גישה לאפליקציה שלו. הערך הזה נדרש כשיוצרים פרטי כניסה מאוחדים ב-Azure.
חשוב לשים לב לערכים APP_ID ו-SUBJECT_ID כדי להשתמש בהם בשלבים הבאים.
בשלב הבא, מוסיפים פרטי כניסה מאוחדים לאפליקציה.
הוספת פרטי כניסה מאוחדים
כדי ליצור פרטי כניסה מאוחדים, פועלים לפי השלבים הבאים:
Azure Portal
בפורטל Azure, עוברים אל App registrations (רישום אפליקציות) ולוחצים על האפליקציה.
בוחרים באפשרות אישורים וסודות > פרטי כניסה מאוחדים > הוספת פרטי כניסה. לאחר מכן, מבצעים את הפעולות הבאות:
ברשימה Federated credential scenario בוחרים באפשרות Other issuer.
בשדה Issuer (מונפק על ידי), מזינים
https://accounts.google.com.בשדה מזהה הנושא, מזינים את הזהות ב-Google BigQuery של חשבון השירות שקיבלתם כשיצרתם את החיבור. Google Cloud
בשדה Name, מזינים שם לפרטי הכניסה.
לוחצים על הוספה.
Terraform
מוסיפים את השורות הבאות לקובץ התצורה של Terraform:
resource "azuread_application_federated_identity_credential" "example" { application_id = azuread_application.example.id display_name = "omni-federated-credential" description = "BigQuery Omni federated credential" audiences = ["api://AzureADTokenExchange"] issuer = "https://accounts.google.com" subject = google_bigquery_connection.connection.azure[0].identity }
מידע נוסף זמין במאמר הגדרת אפליקציה כך שתיתן אמון בספק זהויות חיצוני.
הקצאת תפקיד לאפליקציות של BigQuery ב-Azure
כדי להקצות תפקיד לאפליקציית Azure של BigQuery, משתמשים ב-Azure Portal, ב-Azure PowerShell או ב-Microsoft Management API בארכיטקטורת REST:
Azure Portal
כדי להקצות תפקידים בפורטל Azure, צריך להתחבר כמשתמש עם הרשאה Microsoft.Authorization/roleAssignments/write. הקצאת התפקיד מאפשרת לחיבור BigQuery Azure לגשת לנתוני Azure Storage בהתאם למדיניות התפקידים.
כדי להוסיף הקצאות תפקידים באמצעות פורטל Azure, פועלים לפי השלבים הבאים:
בחשבון Azure Storage, מזינים
IAMבסרגל החיפוש.לוחצים על Access Control (IAM).
לוחצים על הוספה ובוחרים באפשרות הוספת הקצאות תפקידים.
כדי לספק גישה לקריאה בלבד, בוחרים בתפקיד Storage Blob Data Reader. כדי לספק גישת קריאה וכתיבה, בוחרים בתפקיד Storage Blob Data Contributor.
מגדירים את האפשרות הקצאת גישה אל למשתמש, קבוצה או חשבון ראשי של שירות.
לוחצים על בחירת חברים.
בשדה Select (בחירה), מזינים את שם האפליקציה ב-Azure שנתתם כשיצרתם את האפליקציה בדייר Azure.
לוחצים על Save.
מידע נוסף זמין במאמר בנושא הקצאת תפקידים ב-Azure באמצעות פורטל Azure.
Terraform
מוסיפים את השורות הבאות לקובץ התצורה של Terraform:
resource "azurerm_role_assignment" "data_role" { scope = data.azurerm_storage_account.example.id # Read permission for Omni on the storage account role_definition_name = "Storage Blob Data Reader" principal_id = azuread_service_principal.example.id }
Azure PowerShell
כדי להוסיף הקצאת תפקיד לחשבון שירות בהיקף משאב, אפשר להשתמש בפקודה New-AzRoleAssignment:
New-AzRoleAssignment` -SignInName APP_NAME` -RoleDefinitionName ROLE_NAME` -ResourceName RESOURCE_NAME` -ResourceType RESOURCE_TYPE` -ParentResource PARENT_RESOURCE` -ResourceGroupName RESOURCE_GROUP_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
APP_NAME: שם האפליקציה. -
ROLE_NAME: שם התפקיד שרוצים להקצות. -
RESOURCE_NAME: שם המשאב. -
RESOURCE_TYPE: סוג המשאב. -
PARENT_RESOURCE: משאב האב. -
RESOURCE_GROUP_NAME: שם קבוצת המשאבים.
מידע נוסף על שימוש ב-Azure PowerShell כדי להוסיף מנהל שירות חדש זמין במאמר הקצאת תפקידי Azure באמצעות Azure PowerShell.
Azure CLI
כדי להוסיף הקצאת תפקיד למשתמש שירות בהיקף משאב, אפשר להשתמש בכלי שורת הפקודה של Azure. כדי להקצות תפקידים, צריכה להיות לכם הרשאה Microsoft.Authorization/roleAssignments/write בחשבון האחסון.
כדי להקצות תפקיד, כמו התפקיד Storage Blob Data Reader, לחשבון הראשי של השירות, מריצים את הפקודה az role assignment create:
az role assignment create --role "Storage Blob Data Reader" \ --assignee-object-id ${SP_ID} \ --assignee-principal-type ServicePrincipal \ --scope subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
SP_ID: מזהה הגורם המוסמך של השירות. זהו חשבון שירות של האפליקציה שיצרתם. מידע על חשבון משתמש שירות לחיבור מאוחד מופיע במאמר אובייקט של חשבון משתמש שירות. -
STORAGE_ACCOUNT_NAME: השם של חשבון האחסון. -
RESOURCE_GROUP_NAME: שם קבוצת המשאבים. -
SUBSCRIPTION_ID: מזהה המינוי.
מידע נוסף מופיע במאמר הקצאת תפקידים ב-Azure באמצעות Azure CLI.
Microsoft REST API
כדי להוסיף הקצאות תפקידים לחשבון שירות, אפשר לשלוח בקשת HTTP לניהול של מיקרוסופט.
כדי לשלוח קריאה ל-Microsoft Graph API בארכיטקטורת REST, צריך לאחזר אסימון OAuth לאפליקציה. מידע נוסף זמין במאמר בנושא קבלת גישה ללא משתמש.
לאפליקציה שקראה ל-Microsoft Graph API בארכיטקטורת REST צריכה להיות הרשאת האפליקציה Application.ReadWrite.All.
כדי ליצור טוקן OAuth, מריצים את הפקודה הבאה:
export TOKEN=$(curl -X POST \ https://login.microsoftonline.com/TENANT_ID/oauth2/token \ -H 'cache-control: no-cache' \ -H 'content-type: application/x-www-form-urlencoded' \ --data-urlencode "grant_type=client_credentials" \ --data-urlencode "resource=https://graph.microsoft.com/" \ --data-urlencode "client_id=CLIENT_ID" \ --data-urlencode "client_secret=CLIENT_SECRET" \ | jq --raw-output '.access_token')
מחליפים את מה שכתוב בשדות הבאים:
-
TENANT_ID: מזהה הדייר שתואם למזהה של ספריית Azure שמכילה את חשבון Azure Storage. -
CLIENT_ID: מזהה הלקוח ב-Azure. -
CLIENT_SECRET: סוד הלקוח ב-Azure.
מקבלים את המזהה של התפקידים המובנים של Azure שרוצים להקצות למנהל השירות.
אלה כמה תפקידים נפוצים:
- Storage Blob Data Contributor:
ba92f5b4-2d11-453d-a403-e96b0029c9fe - קריאת נתוני Blob באחסון:
2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
כדי להקצות תפקיד לישות המורשית של השירות, קוראים ל-API של Microsoft Graph בארכיטקטורת REST ל-API של Azure Resource Management בארכיטקטורת REST:
export ROLE_ASSIGNMENT_ID=$(uuidgen) curl -X PUT \ 'https://management.azure.com/subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME/providers/Microsoft.Authorization/roleAssignments/ROLE_ASSIGNMENT_ID?api-version=2018-01-01-preview' \ -H "authorization: Bearer ${TOKEN?}" \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ -d '{ "properties": { "roleDefinitionId": "subscriptions/SUBSCRIPTION_ID/resourcegroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_ACCOUNT_NAME/providers/Microsoft.Authorization/roleDefinitions/ROLE_ID", "principalId": "SP_ID" } }'
מחליפים את מה שכתוב בשדות הבאים:
-
ROLE_ASSIGNMENT_ID: מזהה התפקיד. -
SP_ID: מזהה הגורם המוסמך של השירות. זהו חשבון שירות של האפליקציה שיצרתם. מידע על חשבון השירות של חיבור מאוחד מופיע במאמר אובייקט חשבון שירות. -
SUBSCRIPTION_ID: מזהה המינוי. -
RESOURCE_GROUP_NAME: שם קבוצת המשאבים. -
STORAGE_ACCOUNT_NAME: השם של חשבון האחסון. -
SUBSCRIPTION_ID: מזהה המינוי.
החיבור מוכן לשימוש. עם זאת, יכול להיות עיכוב בהפצה של הקצאת תפקיד ב-Azure. אם אין לכם אפשרות להשתמש בחיבור בגלל בעיות הרשאה, נסו שוב אחרי זמן מה.
שיתוף חיבורים עם משתמשים
אתם יכולים להקצות את התפקידים הבאים כדי לאפשר למשתמשים לשלוח שאילתות לנתונים ולנהל חיבורים:
roles/bigquery.connectionUser: מאפשר למשתמשים להשתמש בחיבורים כדי להתחבר למקורות נתונים חיצוניים ולהריץ עליהם שאילתות.
roles/bigquery.connectionAdmin: מאפשר למשתמשים לנהל את החיבורים.
במאמר תפקידים והרשאות מוגדרים מראש יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.
בוחרים באחת מהאפשרויות הבאות:
המסוף
עוברים לדף BigQuery.
החיבורים מופיעים בפרויקט בקבוצה שנקראת Connections (חיבורים).
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
לוחצים על הפרויקט, לוחצים על Connections (חיבורים) ובוחרים חיבור.
בחלונית פרטים, לוחצים על שיתוף כדי לשתף חיבור. לאחר מכן מבצעים את הפעולות הבאות:
בתיבת הדו-שיח Connection permissions, מוסיפים או עורכים חשבונות משתמשים כדי לשתף את החיבור עם חשבונות משתמשים אחרים.
לוחצים על Save.
BQ
אי אפשר לשתף חיבור עם כלי שורת הפקודה של BigQuery. כדי לשתף חיבור, משתמשים במסוף Google Cloud או בשיטה BigQuery Connections API.
API
משתמשים בשיטה projects.locations.connections.setIAM בקטע BigQuery Connections API בארכיטקטורת REST הפניית API ומספקים מופע של משאב policy.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
המאמרים הבאים
- מידע נוסף על סוגי חיבורים שונים
- מידע נוסף על ניהול חיבורים
- מידע נוסף על BigQuery Omni
- מידע נוסף על טבלאות BigLake
- איך שולחים שאילתות לנתונים ב-Blob Storage
- איך מייצאים תוצאות של שאילתות ל-Blob Storage