Connettiti a Blob Storage
In qualità di amministratore BigQuery, puoi creare connection per consentire agli analisti di dati di accedere archiviati in Archiviazione BLOB di Azure.
BigQuery Omni accede ai dati dello storage BLOB tramite connessioni. BigQuery Omni supporta la federazione delle identità dei carichi di lavoro Azure. Il supporto di BigQuery Omni della federazione delle identità per i carichi di lavoro di Azure consente concedi l'accesso a un servizio Google per un'applicazione Azure nel tuo tenant . Non esistono client secret dell'applicazione che devono essere gestiti da te o da Google.
Dopo aver creato una connessione BigQuery Azure, puoi eseguire query sui dati di Blob Storage o esportare i risultati delle query in Blob Storage.
Prima di iniziare
Assicurati di aver creato le seguenti risorse:
Un progetto Google Cloud con l'API BigQuery Connection attivata.
Se utilizzi il modello di determinazione dei prezzi in base alla capacità, assicurati di aver attivato l'API BigQuery Reservation per il tuo progetto. Per informazioni sui prezzi, consulta la pagina Prezzi di BigQuery Omni.
Un tenant Azure con un abbonamento Azure.
Un account di archiviazione Azure che soddisfi le seguenti specifiche:
Si tratta di un account V2 generico o di un account Archiviazione blob.
Utilizza uno spazio dei nomi gerarchico. Per ulteriori informazioni, consulta Creare un account archiviazione da utilizzare con Azure Data Lake Storage Gen2.
I dati vengono compilati in uno dei formati supportati.
I dati si trovano nella regione
azure-eastus2
.
Ruoli obbligatori
-
Per ottenere le autorizzazioni necessarie per creare una connessione per accedere ai dati di Archiviazione BLOB di Azure, chiedi all'amministratore di concederti Ruolo IAM Amministratore connessione BigQuery (
roles/bigquery.connectionAdmin
) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
-
Assicurati di disporre delle seguenti autorizzazioni IAM Azure sul tenant:
Application.ReadWrite.All
AppRoleAssignment.ReadWrite.All
Quote
Per ulteriori informazioni sulle quote, consulta l'API BigQuery Connection.
Creare una connessione Azure
Per creare una connessione Azure:
- Crea un'applicazione nel tenant di Azure.
- Crea la connessione Azure su BigQuery.
- Aggiungi una credenziale federata.
- Assegna un ruolo alle applicazioni BigQuery Azure AD.
Per ulteriori informazioni sull'utilizzo delle credenziali di identità federate per accedere ai dati in Azure, consulta Federazione delle identità dei carichi di lavoro.
Creare un'applicazione nel tenant di Azure
Per creare un'applicazione nel tenant di Azure, segui questi passaggi:
Portale di Azure
Nel portale Azure, vai a Registrazioni app, quindi fai clic su Nuovo registrazione.
In Nomi, inserisci un nome per l'applicazione.
In Tipi di account supportati, seleziona Solo account in questa directory dell'organizzazione.
Per registrare la nuova applicazione, fai clic su Registra.
Prendi nota dell'ID applicazione (client). Devi fornire questo ID quando crei la connessione.
Terraform
Aggiungi quanto segue al file di configurazione Terraform:
resource "azuread_application" "example" { display_name = "bigquery-omni-connector" } resource "azuread_service_principal" "example" { application_id = azuread_application.example.application_id app_role_assignment_required = false }
Per ulteriori informazioni, scopri come registrare un'applicazione in Azure.
Crea una connessione
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nella sezione
Aggiungi dati seleziona Origine dati esterna.Nel riquadro Origine dati esterna, inserisci le seguenti informazioni:
- Per Tipo di connessione, seleziona BigLake su Azure (tramite BigQuery Omni).
- In ID connessione, inserisci un identificatore per la risorsa di connessione. Puoi utilizzare lettere, numeri, trattini e trattini bassi.
- Seleziona la località in cui vuoi creare la connessione.
- (Facoltativo) In Nome visualizzato, inserisci un nome intuitivo per la connessione, ad esempio
My connection resource
. Il nome descrittivo può essere qualsiasi valore che ti aiuti a identificare la risorsa di connessione dovrai modificarlo in seguito. - (Facoltativo) In Descrizione, inserisci una descrizione per la risorsa di connessione.
- Per ID tenant Azure, inserisci l'ID tenant Azure, che è anche chiamato ID directory (tenant).
Attiva la casella di controllo Utilizza identità federata e inserisci l'ID applicazione federata Azure (client).
Per scoprire come ottenere gli ID Azure, consulta Creare un'applicazione nel tenant di Azure.
Fai clic su Crea connessione.
Fai clic su Vai alla connessione.
Nella sezione Informazioni sulla connessione, tieni presente che Il valore dell'identità Google BigQuery, ovvero l'ID account di servizio. Questo ID è per all'account di servizio Google Cloud che autorizzi ad accedere alla tua applicazione.
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.application_id } }
Sostituisci TENANT_ID
con l'ID tenant della directory
Azure contenente l'account di archiviazione BLOB.
bq
Usa il comando bq mk
. A
per ottenere l'output in formato JSON, utilizza il parametro --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
Sostituisci quanto segue:
TENANT_ID
: l'ID tenant della directory Azure che contiene l'account Archiviazione di Azure.AZURE_LOCATION
: la regione Azure in cui si trovano i dati di Archiviazione di Azure. BigQuery Omni supporta la regioneazure-eastus2
.APP_ID
: l'ID applicazione (client) Azure. A per informazioni su come ottenere questo ID, consulta Creare un'applicazione nel tenant di Azure.CONNECTION_ID
: il nome della connessione.
L'output è simile al seguente:
Connection CONNECTION_ID successfully created Please add the following identity to your Azure application APP_ID Identity: SUBJECT_ID
Questo output include i seguenti valori:
APP_ID
: l'ID dell'applicazione che è stato creato.SUBJECT_ID
: l'ID dell'account servizio Google Cloud che l'utente autorizza ad accedere alla propria applicazione. Questo valore è obbligatorio quando crei una credenziale federata in Azure.
Prendi nota di APP_ID
e SUBJECT_ID
da usare nei passaggi successivi.
Quindi, aggiungi una credenziale federata per la tua applicazione.
Aggiungi una credenziale federata
Per creare una credenziale federata, segui questi passaggi:
Portale di Azure
Nel portale di Azure, vai a Registrazioni app e fai clic sulla tua applicazione.
Seleziona Certificati e segreti > Credenziali federate > Aggiungi credenziali. Poi segui questi passaggi:
Nell'elenco Scenario delle credenziali federate, seleziona Altro emittente.
In Issuer (Emittente), inserisci
https://accounts.google.com
.In Identificatore oggetto, inserisci l'identità Google BigQuery di all'account di servizio Google Cloud che hai ricevuto quando hai creato la connessione.
In Nome, inserisci un nome per la credenziale.
Fai clic su Aggiungi.
Terraform
Aggiungi quanto segue al file di configurazione Terraform:
resource "azuread_application" "example" { display_name = "bigquery-omni-connector" } resource "azuread_service_principal" "example" { application_id = azuread_application.example.application_id app_role_assignment_required = false } resource "azuread_application_federated_identity_credential" "example" { application_object_id = azuread_application.example.object_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 }
Per maggiori informazioni, vedi Configurare un'app per considerare attendibile un provider di identità esterno.
Assegnare un ruolo alle applicazioni Azure di BigQuery
Per assegnare un ruolo all'applicazione Azure di BigQuery, utilizza il portale Azure, Azure PowerShell o l'API REST di gestione di Microsoft:
Portale di Azure
Puoi eseguire assegnazioni dei ruoli nel portale Azure accedendo come utente
con l'autorizzazione Microsoft.Authorization/roleAssignments/write
. L'assegnazione del ruolo consente alla connessione BigQuery Azure di accedere ai dati di Azure Storage come specificato nel criterio dei ruoli.
Per aggiungere le assegnazioni dei ruoli utilizzando il portale Azure:
Dal tuo account Archiviazione di Azure, inserisci
IAM
nella barra di ricerca.Fai clic su Controllo accesso (IAM).
Fai clic su Aggiungi e seleziona Aggiungi assegnazioni dei ruoli.
Per fornire l'accesso di sola lettura, seleziona il ruolo Lettore di dati BLOB di archiviazione. Per fornire l'accesso in lettura/scrittura, seleziona il ruolo Contributore di dati BLOB di archiviazione.
Imposta Assegna accesso a su Utente, gruppo o entità servizio.
Fai clic su Seleziona membri.
Nel campo Seleziona, inserisci il nome dell'applicazione Azure che hai assegnato quando hai creato l'applicazione nel tenant di Azure.
Fai clic su Salva.
Per ulteriori informazioni, consulta Assegnare ruoli Azure utilizzando portale.
Terraform
Aggiungi quanto segue al file di configurazione 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
Per aggiungere un'assegnazione di ruolo per un'entità servizio a un ambito della risorsa, puoi utilizzare il comando New-AzRoleAssignment
:
New-AzRoleAssignment` -SignInName APP_NAME` -RoleDefinitionName ROLE_NAME` -ResourceName RESOURCE_NAME` -ResourceType RESOURCE_TYPE` -ParentResource PARENT_RESOURCE` -ResourceGroupName RESOURCE_GROUP_NAME
Sostituisci quanto segue:
APP_NAME
: il nome dell'applicazione.ROLE_NAME
: il nome del ruolo che vuoi assegnare.RESOURCE_NAME
: il nome della risorsa.RESOURCE_TYPE
: tipo di risorsa.PARENT_RESOURCE
: la risorsa principale.RESOURCE_GROUP_NAME
: nome del gruppo di risorse.
Per ulteriori informazioni sull'utilizzo di Azure PowerShell per aggiungere un nuovo servizio vedi Assegnare ruoli di Azure utilizzando Azure PowerShell.
Interfaccia a riga di comando Azure
Per aggiungere un'assegnazione del ruolo per un'entità di servizio in un ambito delle risorse, puoi:
lo strumento a riga di comando di Azure. Per concedere i ruoli, devi disporre dell'autorizzazione Microsoft.Authorization/roleAssignments/write
per l'account di archiviazione.
Per assegnare un ruolo, ad esempio il ruolo Lettore di dati BLOB di archiviazione, all'entità servizio, esegui il comando 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
Sostituisci quanto segue:
SP_ID
: l'ID entità servizio. Questo principale del servizio è destinato all'applicazione che hai creato. Per ottenere l'entità servizio per una connessione federata, vedi Entità servizio .STORAGE_ACCOUNT_NAME
: il nome dell'account di archiviazione.RESOURCE_GROUP_NAME
: il nome del gruppo di risorse.SUBSCRIPTION_ID
: l'ID abbonamento.
Per ulteriori informazioni, consulta Assegnare i ruoli Azure utilizzando Azure CLI.
API REST di Microsoft
Per aggiungere assegnazioni dei ruoli per un'entità servizio, puoi inviare una richiesta HTTP a Microsoft Management.
Per chiamare l'API REST Microsoft Graph, recupera un token OAuth per un'applicazione. Per ulteriori informazioni, vedi Accedere senza un utente.
L'applicazione che ha chiamato l'API REST di Microsoft Graph deve disporre dell'autorizzazione di applicazione Application.ReadWrite.All
.
Per generare un token OAuth, esegui il seguente comando:
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')
Sostituisci quanto segue:
TENANT_ID
: l'ID tenant corrispondente all'ID della directory Azure contenente l'account di archiviazione Azure.CLIENT_ID
: l'ID client Azure.CLIENT_SECRET
: il client secret di Azure.
Recupera l'ID dei ruoli integrati di Azure da assegnare all'entità servizio.
Ecco alcuni ruoli comuni:
- Storage Blob Data Contributor:
ba92f5b4-2d11-453d-a403-e96b0029c9fe
- Lettore dati BLOB di archiviazione:
2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
Per assegnare un ruolo all'entità servizio, chiama l'API REST Microsoft Graph all'API REST Azure Resource Management:
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" } }'
Sostituisci quanto segue:
ROLE_ASSIGNMENT_ID
: l'ID del ruolo.SP_ID
: l'ID entità servizio. Questo servizio relativo all'applicazione che hai creato. Per ottenere l'entità servizio per una connessione federata, consulta Servizio dell'oggetto entità.SUBSCRIPTION_ID
: l'ID abbonamento.RESOURCE_GROUP_NAME
: nome del gruppo di risorse.STORAGE_ACCOUNT_NAME
: il nome dell'account di archiviazione.SUBSCRIPTION_ID
: l'ID abbonamento.
La connessione è ora pronta per l'uso. Tuttavia, potrebbe verificarsi un ritardo nella propagazione per un'assegnazione del ruolo in Azure. Se non riesci a utilizzare la connessione a causa di problemi di autorizzazione, riprova dopo un po' di tempo.
Condividere le connessioni con gli utenti
Puoi concedere i seguenti ruoli per consentire agli utenti di eseguire query sui dati e gestire le connessioni:
roles/bigquery.connectionUser
: consente agli utenti di utilizzare le connessioni per collegarsi a origini dati esterne ed eseguire query su di esse.roles/bigquery.connectionAdmin
: consente agli utenti di gestire le connessioni.
Per ulteriori informazioni su ruoli e autorizzazioni IAM in BigQuery, vedi Autorizzazioni e ruoli predefiniti.
Seleziona una delle seguenti opzioni:
Console
Vai alla pagina BigQuery.
Le connessioni sono elencate nel progetto, in un gruppo denominato Connessioni esterne.
Nel riquadro Explorer, fai clic sul nome del tuo progetto. > Connessioni esterne > connessione.
Nel riquadro Dettagli, fai clic su Condividi per condividere una connessione. Quindi:
Nella finestra di dialogo Autorizzazioni di connessione, condividi il connessione con altre entità aggiungendo o modificando tra cui scegliere.
Fai clic su Salva.
bq
Non puoi condividere una connessione con lo strumento a riga di comando bq. Per condividere una connessione, utilizza la console Google Cloud o il metodo dell'API BigQuery Connections.
API
Utilizza la
Metodo projects.locations.connections.setIAM
nella sezione di riferimento dell'API REST di BigQuery Connections
fornisce un'istanza della risorsa policy
.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.
Per autenticarti a BigQuery, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.
Passaggi successivi
- Scopri i diversi tipi di connessione.
- Scopri di più sulla gestione delle connessioni.
- Scopri di più su BigQuery Omni.
- Scopri di più sulle tabelle BigLake.
- Scopri come eseguire query sui dati di archiviazione BLOB.
- Scopri come esportare i risultati di query in Blob Storage.