התחברות ל-Blob Storage
חיבור ל-Azure ב-BigQuery מאפשר למשתמשים לשלוח שאילתות לגבי נתונים שמאוחסנים ב-Azure Blob Storage ולייצא את תוצאות השאילתות ל-Blob Storage. אתם יכולים ליצור חיבור כדי ש-BigQuery Omni יוכל לגשת באופן מאובטח לנתונים שלכם ב-Blob Storage.
BigQuery Omni תומך באיחוד שירותי אימות הזהות של עומסי עבודה ב-Azure, שמאפשר לתת לאפליקציית Azure בדייר שלכם גישה לחשבון שירות ב-Google בלי לנהל את סודות הלקוח של האפליקציה.
לפני שמתחילים
מוודאים שיצרתם את המשאבים הבאים:
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, בקשו מהאדמין להקצות לכם את התפקיד אדמין של חיבורי BigQuery (
roles/bigquery.connectionAdmin) בפרויקט. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
-
מוודאים שיש לכם את ההרשאות הבאות לניהול זהויות והרשאות גישה (IAM) ב-Azure בדייר (tenant) שלכם:
Application.ReadWrite.AllAppRoleAssignment.ReadWrite.All
מכסות
מידע נוסף על מכסות זמין במאמר BigQuery Connection API.
יצירת חיבור ל-Azure
כדי ליצור חיבור ל-Azure, פועלים לפי השלבים הבאים:
- יוצרים אפליקציה בדייר (tenant) ב-Azure.
- יצירת החיבור של BigQuery ל-Azure.
- הוספת פרטי כניסה מאוחדים.
- הקצאת תפקיד לאפליקציות של BigQuery ב-Azure AD.
מידע נוסף על השימוש בפרטי כניסה של זהות מאוחדת כדי לגשת לנתונים ב-Azure זמין במאמר איחוד שירותי אימות הזהות של עומסי עבודה.
יצירת אפליקציה בדייר (tenant) ב-Azure
כדי ליצור אפליקציה בדייר ב-Azure, פועלים לפי השלבים הבאים:
Azure Portal
בפורטל Azure, עוברים אל App registrations ולוחצים על New registration.
בשדה Name, מזינים שם לאפליקציה.
בקטע סוגי חשבונות נתמכים, בוחרים באפשרות חשבונות בספרייה הארגונית הזו בלבד.
כדי לרשום את האפליקציה החדשה, לוחצים על Register.
רושמים או זוכרים את הערך של Application (client) ID. צריך לספק את המזהה הזה כשיוצרים את החיבור.
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.
יצירת חיבור
המסוף
נכנסים לדף BigQuery במסוף Google Cloud .
בחלונית נתונים, לוחצים על הוספת נתונים.
תיבת הדו-שיח Add data נפתחת.
בחלונית Filter By, בקטע Data Source Type, בוחרים באפשרות Databases.
אפשר גם להזין
Azureבשדה Search for data sources.בקטע Featured data sources, לוחצים על Azure Blob Storage.
לוחצים על כרטיס הפתרון Azure Blob Storage Omni: BigQuery Federation.
בתיבת הדו-שיח Create table, בשדה Connection ID, בוחרים באפשרות Create a new ABS connection.
בחלונית External data source, מזינים את הפרטים הבאים:
- בשדה Connection type, בוחרים באפשרות BigLake on Azure (via BigQuery Omni).
- בשדה Connection ID, מזינים מזהה למשאב החיבור. אפשר להשתמש באותיות, במספרים, במקפים ובקווים תחתונים.
- בוחרים את המיקום שבו רוצים ליצור את החיבור.
- אופציונלי: בשדה Friendly name, מזינים שם ידידותי למשתמש בשביל החיבור, למשל
My connection resource. השם הידידותי יכול להיות כל ערך שיעזור לכם לזהות את משאב החיבור אם תצטרכו לשנות אותו מאוחר יותר. - אופציונלי: בשדה Description, מזינים תיאור למשאב החיבור.
- בשדה Azure tenant id, מזינים את מזהה הדייר ב-Azure, שנקרא גם Directory (tenant) ID.
מסמנים את התיבה Use federated identity ומזינים את מזהה האפליקציה המאוחדת (לקוח) של Azure.
כדי ללמוד איך לקבל מזהי Azure, קראו את המאמר יצירת אפליקציה בדייר ב-Azure.
לוחצים על יצירת חיבור.
לוחצים על מעבר לחיבור.
בקטע Connection info, שימו לב לערך של BigQuery Google identity, שהוא המזהה של חשבון השירות. המזהה הזה מיועד לחשבון השירות של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. במאמר יצירת אפליקציה בדייר (tenant) ב-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 ולוחצים על האפליקציה.
בוחרים באפשרות Certificates & secrets > Federated credentials > Add credentials. לאחר מכן, מבצעים את הפעולות הבאות:
ברשימה Federated credential scenario, בוחרים באפשרות Other issuer.
בשדה Issuer (מנפיק), מזינים
https://accounts.google.com.בשדה Subject identifier, מזינים את מזהה 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 REST API:
Azure Portal
כדי להקצות תפקידים בפורטל Azure, צריך להתחבר כמשתמש עם ההרשאה Microsoft.Authorization/roleAssignments/write. הקצאת התפקיד מאפשרת לחיבור של BigQuery ל-Azure לגשת לנתונים ב-Azure Storage, בהתאם למדיניות התפקידים.
כדי להוסיף הקצאות תפקידים באמצעות Azure Portal:
בחשבון Azure Storage, מזינים
IAMבשורת החיפוש.לוחצים על בקרת גישה (IAM).
לוחצים על הוספה ובוחרים באפשרות הוספת הקצאות של תפקידים.
כדי לספק הרשאת קריאה בלבד, בוחרים בתפקיד Storage Blob Data Reader. כדי לתת גישת קריאה וכתיבה, בוחרים בתפקיד Storage Blob Data Contributor.
מגדירים את Assign access to לערך User, group, or service principal.
לוחצים על בחירת חברים.
בשדה 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.
API של מיקרוסופט בארכיטקטורת REST
כדי להוסיף הקצאות תפקידים למנהל שירות, אפשר לשלוח בקשת HTTP ל-Microsoft Management.
כדי לשלוח קריאה ל-Microsoft Graph REST API, צריך לאחזר אסימון OAuth לאפליקציה. מידע נוסף זמין במאמר קבלת גישה בלי משתמש.
לאפליקציה ששלחה קריאה ל-Microsoft Graph REST API צריכה להיות הרשאת האפליקציה 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 - Storage Blob Data Reader:
2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
כדי להקצות תפקיד ל-service principal, שולחים קריאה ל-Microsoft Graph REST API או ל-Azure Resource Management REST API:
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.
בחלונית הימנית, לוחצים על Explorer:

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