Connetti a Blob Storage

In qualità di amministratore BigQuery, puoi creare una connessione per consentire ai data analyst di accedere ai dati archiviati in Archiviazione BLOB di Azure.

BigQuery Omni accede ai dati di Blob Storage tramite connessioni. Esistono due metodi per accedere in modo sicuro ai dati da Blob Storage. Puoi utilizzare la federazione delle identità concedendo l'accesso a un account di servizio Google Cloud alla tua applicazione Azure oppure puoi concedere direttamente l'accesso alla tua applicazione Azure Active Directory (AD) nel tuo tenant:

  • Utilizza un'identità federata Azure. Questo è l'approccio consigliato. BigQuery Omni supporta la federazione delle identità per i carichi di lavoro di Azure. Con BigQuery Omni che supporta la federazione delle identità per i carichi di lavoro di Azure, puoi concedere a un account di servizio Google l'accesso all'applicazione Azure all'interno del tuo tenant. L'accesso con identità federata è più sicuro di quello non federato perché il client dell'applicazione esiste all'interno del tenant di Azure. I secret del client dell'applicazione non sono gestiti da te o da Google.

    Con la federazione delle identità hai un maggiore controllo sull'applicazione perché quella a cui hai concesso l'accesso ai tuoi dati è presente all'interno del tuo tenant.

  • Utilizza un'identità non federata. L'annuncio di servizio obbligatorio (MSA) che informa i clienti del ritiro dell'utilizzo di un'identità non federata per accedere alla tua applicazione Azure è stato inviato ai partner e ai clienti interessati il 20 giugno 2023, per avvisare i clienti prima dell'entrata in vigore delle modifiche l'8 gennaio 2024. Valuta invece la possibilità di utilizzare un'identità federata Azure. Ogni connessione non federata dispone della propria applicazione Azure Active Directory (Azure AD) univoca. Le autorizzazioni vengono concesse alle applicazioni tramite i ruoli IAM (Identity and Access Management) di Azure. I ruoli IAM di Azure che determinano a quali dati BigQuery può accedere per ogni connessione.

Dopo aver creato una connessione BigQuery ad Azure, puoi eseguire una query sui dati di archiviazione BLOB o esportare i risultati delle query in Archiviazione BLOB.

Prima di iniziare

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 il ruolo IAM Amministratore connessione BigQuery (roles/bigquery.connectionAdmin) per il progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

    Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

  • Assicurati di disporre delle seguenti autorizzazioni IAM di Azure sul tenant:
    • Application.ReadWrite.All
    • AppRoleAssignment.ReadWrite.All

Quote

Il tuo progetto può creare fino a 50 connessioni Azure per ogni progetto. La quota include connessioni Azure federate e non federate. Per ulteriori informazioni sulle quote, consulta API BigQuery Connection.

Utilizza un'identità federata Azure

Per accedere ai dati utilizzando un'identità federata, segui questi passaggi:

  1. Crea un'applicazione nel tenant di Azure.
  2. Crea la connessione BigQuery ad Azure.
  3. Aggiungi una credenziale federata.
  4. Assegnare un ruolo alle applicazioni Azure AD di BigQuery.

Per saperne di più sull'utilizzo delle credenziali delle identità federate per accedere ai dati in Azure, consulta Federazione delle identità per i carichi di lavoro.

Crea un'applicazione nel tenant di Azure

Per creare un'applicazione nel tenant di Azure, segui questi passaggi:

Portale Azure

  1. Nel portale Azure, vai a Registrazioni di app, quindi fai clic su Nuova registrazione.

  2. In Nomi, inserisci un nome per l'applicazione.

  3. In Tipi di account supportati, seleziona Account in questa directory dell'organizzazione.

  4. Per registrare la nuova applicazione, fai clic su Registrati.

  5. Prendi nota dell'ID applicazione (client). Devi fornire questo ID quando crei la connessione.

    Portale Azure per la creazione di applicazioni

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 maggiori informazioni, vedi come registrare un'applicazione in Azure.

Creazione di una connessione

Console

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel menu Aggiungi dati, seleziona Origine dati esterna.

  3. Nel riquadro Origine dati esterna, inserisci le seguenti informazioni:

    • In 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) Per Nome semplice, inserisci un nome facile da usare per la connessione, ad esempio My connection resource. Il nome descrittivo può essere qualsiasi valore che ti aiuti a identificare la risorsa di connessione se devi modificarla in un secondo momento.
    • (Facoltativo) In Descrizione, inserisci una descrizione per la risorsa di connessione.
    • In ID tenant Azure, inserisci l'ID tenant Azure, che è anche indicato come ID directory (tenant).
    • Abilita la casella di controllo Utilizza identità federata e inserisci l'ID applicazione federata (client) Azure.

      Per scoprire come ottenere gli ID Azure, consulta Creare un'applicazione nel tenant di Azure.

  4. Fai clic su Crea connessione.

  5. Fai clic su Vai alla connessione.

  6. Nella sezione Informazioni sulla connessione, prendi nota del valore dell'identità Google BigQuery, ovvero l'ID account di servizio. Questo ID è per l'account di servizio Google Cloud che autorizza 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 che contiene l'account Archiviazione BLOB.

bq

Utilizza il comando bq mk. 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 tuoi dati di Archiviazione di Azure. BigQuery Omni supporta la regione azure-eastus2,
  • APP_ID: l'ID applicazione Azure (client). Per scoprire 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 hai creato.

  • SUBJECT_ID: l'ID dell'account di servizio Google Cloud con cui l'utente autorizza ad accedere alla propria applicazione. Questo valore è obbligatorio quando crei una credenziale federata in Azure.

Prendi nota dei valori APP_ID e SUBJECT_ID da utilizzare nei passaggi successivi.

Quindi, aggiungi una credenziale federata per l'applicazione.

Aggiungi una credenziale federata

Per creare una credenziale federata, segui questi passaggi:

Portale Azure

  1. Nel portale Azure, vai a Registrazioni app e fai clic sulla tua applicazione.

  2. Seleziona Certificati e secret > Credenziali federate > Aggiungi credenziali. Poi segui questi passaggi:

    1. Nell'elenco Scenario delle credenziali federate, seleziona Altro emittente.

    2. In Issuer (Emittente), inserisci https://accounts.google.com.

    3. In Identificatore soggetto, inserisci l'identità Google BigQuery dell'account di servizio Google Cloud che hai ottenuto al momento della creazione della connessione.

    4. In Nome, inserisci un nome per la credenziale.

    5. 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 ulteriori informazioni, vedi Configurare un'app per considerare attendibile un provider di identità esterno.

Assegna 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 Microsoft Management:

Portale Azure

Puoi eseguire assegnazioni di ruoli nel portale Azure accedendo come utente con l'autorizzazione Microsoft.Authorization/roleAssignments/write. L'assegnazione del ruolo consente alla connessione Azure di BigQuery di accedere ai dati di Azure Storage come specificato nel criterio dei ruoli.

Per aggiungere assegnazioni di ruoli utilizzando il portale Azure, segui questi passaggi:

  1. Dal tuo account Archiviazione di Azure, inserisci IAM nella barra di ricerca.

  2. Fai clic su Controllo dell'accesso (IAM).

  3. Fai clic su Aggiungi e seleziona Aggiungi assegnazioni di ruoli.

  4. Per fornire l'accesso di sola lettura, seleziona il ruolo Lettore dati BLOB di archiviazione. Per fornire l'accesso in lettura e scrittura, seleziona il ruolo Collaboratore dati BLOB di archiviazione.

  5. Imposta Assegna accesso a su Utente, gruppo o entità servizio.

  6. Fai clic su Seleziona membri.

  7. Nel campo Seleziona, inserisci il nome dell'applicazione Azure che hai indicato quando hai creato l'applicazione nel tenant di Azure.

  8. Fai clic su Salva.

Per ulteriori informazioni, consulta Assegnare ruoli Azure utilizzando il portale Azure.

Terraform

Aggiungi quanto segue al file di configurazione Terraform:

  resource "azurerm_role_assignment" "data-contributor-role" {
    scope                = data.azurerm_storage_account.example.id
    # Read-write permission for Omni on the storage account
    role_definition_name = "Storage Blob Data Contributor"
    principal_id         = azuread_service_principal.example.id
  }

Azure PowerShell

Per aggiungere un'assegnazione del ruolo per un'entità servizio in un ambito delle risorse, 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: il tipo di risorsa.
  • PARENT_RESOURCE: la risorsa padre.
  • RESOURCE_GROUP_NAME: nome del gruppo di risorse.

Per ulteriori informazioni sull'utilizzo di Azure PowerShell per aggiungere una nuova entità servizio, consulta Assegnare ruoli di Azure utilizzando Azure PowerShell.

interfaccia a riga di comando di Azure

Per aggiungere un'assegnazione del ruolo per un'entità servizio in un ambito delle risorse, puoi utilizzare lo strumento a riga di comando di Azure. Devi disporre dell'autorizzazione Microsoft.Authorization/roleAssignments/write affinché l'account di archiviazione conceda i ruoli.

Per assegnare un ruolo, ad esempio il ruolo Collaboratore dati BLOB di archiviazione, all'entità di servizio, esegui il comando az role assignment create:

  az role assignment create --role "Storage Blob Data Contributor" \
    --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 dell'entità di servizio. Questa entità di servizio è per l'applicazione che hai creato. Per ottenere l'entità di servizio per una connessione federata, vedi Oggetto entità di servizio.
  • STORAGE_ACCOUNT_NAME: il nome dell'account di archiviazione.
  • RESOURCE_GROUP_NAME: nome del gruppo di risorse.
  • SUBSCRIPTION_ID: l'ID abbonamento.

Per maggiori informazioni, consulta Assegnare ruoli di Azure utilizzando l'interfaccia a riga di comando di Azure.

API REST Microsoft

Per aggiungere assegnazioni di 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 maggiori informazioni, consulta Ottenere l'accesso senza un utente. L'applicazione che chiama l'API REST Microsoft Graph deve disporre dell'autorizzazione applicazione Application.ReadWrite.All.

Per generare un token OAuth, esegui questo 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 che corrisponde all'ID della directory Azure che contiene l'account Archiviazione di Azure.
  • CLIENT_ID: l'ID client Azure.
  • CLIENT_SECRET: il client secret di Azure.

Recupera l'ID dei ruoli integrati di Azure che vuoi assegnare all'entità di servizio.

Ecco alcuni ruoli comuni:

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 dell'entità di servizio. Questa entità di servizio è per l'applicazione che hai creato. Per ottenere l'entità di servizio per una connessione federata, consulta Oggetto Service principal.
  • 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 essere utilizzata. Tuttavia, potrebbe verificarsi un ritardo nella propagazione dell'assegnazione di un ruolo in Azure. Se non riesci a utilizzare la connessione a causa di problemi di autorizzazione, riprova più tardi.

Utilizza un'identità non federata

Per accedere ai dati utilizzando un'identità non federata:

  1. Crea la connessione BigQuery ad Azure.
  2. Crea un'entità di servizio Azure AD.
  3. Assegna un ruolo alle applicazioni Azure AD di BigQuery.

Per ulteriori informazioni sull'utilizzo dell'identità non federata per accedere ai dati in Azure, consulta Applicazione Azure AD.

Creazione di una connessione

Per connetterti a Archiviazione BLOB, utilizza la console Google Cloud o lo strumento a riga di comando bq:

Console

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel menu Aggiungi dati, seleziona Origine dati esterna.

  3. Nel riquadro Origine dati esterna, inserisci le seguenti informazioni:

    • In 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) Per Nome semplice, inserisci un nome facile da usare per la connessione, ad esempio My connection resource. Il nome descrittivo può essere qualsiasi valore che ti aiuti a identificare la risorsa di connessione se devi modificarla in un secondo momento.
    • (Facoltativo) In Descrizione, inserisci una descrizione per la risorsa di connessione.
    • In ID tenant Azure, inserisci l'ID tenant Azure, che è anche indicato come ID directory (tenant).

  4. Fai clic su Crea connessione.

  5. Fai clic su Vai alla connessione.

  6. Nella sezione Informazioni sulla connessione, prendi nota dei valori di ID app Azure e Nome app Azure. Questi valori sono obbligatori quando assegni un ruolo all'applicazione Azure di BigQuery.

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 che contiene l'account Archiviazione BLOB.

bq

Utilizza il comando bq mk. 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 \
  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 tuoi dati di Archiviazione di Azure. BigQuery Omni supporta la regione azure-eastus2,
  • CONNECTION_ID: l'ID della connessione.

L'output è simile al seguente:

  Please create a Service Principal in your directory for
  appId: APP_ID,
  and perform role assignment to
  app: APP_NAME
  to allow BigQuery to access your Azure data.

Questo output include i seguenti valori:

  • APP_ID: l'ID dell'applicazione che hai creato.
  • APP_NAME: il nome dell'app a cui devi assegnare i ruoli, in modo che BigQuery possa accedere ai tuoi dati Azure.

Prendi nota dei valori APP_ID e APP_NAME da utilizzare nei passaggi successivi.

Per ulteriori informazioni, consulta Creare una connessione.

Crea un'entità di servizio Azure AD

Per creare un'entità di servizio Azure AD, utilizza la console Google Cloud, Azure PowerShell, lo strumento a riga di comando Azure o l'API REST Microsoft Graph:

Console

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro Explorer, fai clic sulla connessione che hai creato.

  3. Nel riquadro Informazioni sulla connessione, fai clic su Accedi all'account Azure.

  4. Accedi al tuo account Azure.

  5. Nella pagina Autorizzazioni richieste, fai clic su Accetta.

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
  }

Azure PowerShell

Per creare l'entità di servizio per l'ID app APP_ID restituito in precedenza, l'utente deve avere l'autorizzazione Microsoft.directory/servicePrincipals/create.

Per creare l'entità di servizio, esegui il comando New-AzADServicePrincipal:

New-AzADServicePrincipal`
-ApplicationId APP_ID`
-SkipAssignment

Sostituisci APP_ID con l'ID app restituito in precedenza.

interfaccia a riga di comando di Azure

Per creare l'entità di servizio per l'ID app APP_ID restituito in precedenza, puoi utilizzare lo strumento a riga di comando di Azure. Devi avere l'autorizzazione Microsoft.directory/servicePrincipals/create per creare un'entità di servizio.

Per creare l'entità di servizio, esegui il comando az ad sp:

export SP_ID=$(az ad sp create --id APP_ID | jq --raw-output '.objectId')

Sostituisci APP_ID con l'ID app restituito in precedenza.

API REST Microsoft

Per creare l'entità di servizio per l'ID app APP_ID restituito in precedenza, puoi inviare una richiesta HTTP all'API REST Microsoft Graph.

Per chiamare l'API REST Microsoft Graph, recupera un token OAuth per un'applicazione. Per maggiori informazioni, consulta Ottenere l'accesso senza un utente. L'applicazione utilizzata per chiamare l'API REST Microsoft Graph deve avere l'autorizzazione Application.ReadWrite.All.

TENANT_ID deve corrispondere all'ID della directory Azure che contiene l'account Archiviazione di Azure.

Per generare un token OAuth, esegui questo 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 della directory Azure che contiene l'account Archiviazione di Azure.
  • CLIENT_ID: l'ID client Azure.
  • CLIENT_SECRET: il client secret di Azure.

Esegui questo comando:

export APP_ID=APP_ID

Sostituisci APP_ID con l'ID app che ti è stato restituito.

Per creare un'entità di servizio chiamando l'API REST Microsoft Graph, esegui questo comando:

export SP_ID=$(curl -X POST \
https://graph.microsoft.com/v1.0/serviceprincipals \
-H "authorization: Bearer ${TOKEN?}" \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-d "{
  \"appId\": \"${APP_ID?}\"
}" | jq --raw-output '.id')

Sostituisci quanto segue:

  • TOKEN: il token OAuth per l'applicazione.
  • APP_ID: l'ID app restituito in precedenza.

Assegna un ruolo alle applicazioni Azure AD di BigQuery

Portale Azure

Puoi eseguire assegnazioni di ruoli nel portale Azure accedendo come utente con l'autorizzazione Microsoft.Authorization/roleAssignments/write. L'assegnazione del ruolo consente alla connessione Azure di BigQuery di accedere ai dati di Azure Storage come specificato nel criterio dei ruoli.

Per aggiungere assegnazioni di ruoli utilizzando il portale Azure, segui questi passaggi:

  1. Dal tuo account Archiviazione di Azure, inserisci IAM nella barra di ricerca.

  2. Fai clic su Controllo dell'accesso (IAM).

  3. Fai clic su Aggiungi e seleziona Aggiungi assegnazioni di ruoli.

  4. Per fornire l'accesso di sola lettura, seleziona il ruolo Lettore dati BLOB di archiviazione. Per fornire l'accesso in lettura e scrittura, seleziona il ruolo Collaboratore dati BLOB di archiviazione.

  5. Imposta Assegna accesso a su Utente, gruppo o entità servizio.

  6. Fai clic su Seleziona membri.

  7. Nel campo Seleziona, inserisci il nome dell'app Azure che è stato restituito al momento della creazione della connessione Azure per BigQuery.

  8. Fai clic su Salva.

Per ulteriori informazioni, consulta Assegnare ruoli Azure utilizzando il portale Azure.

Terraform

Aggiungi quanto segue al file di configurazione Terraform:

  resource "azurerm_role_assignment" "data-contributor-role" {
    scope                = data.azurerm_storage_account.example.id
    # Read-write permission for Omni on the storage account
    role_definition_name = "Storage Blob Data Contributor"
    principal_id         = azuread_service_principal.example.id
  }

Azure PowerShell

Per aggiungere un'assegnazione del ruolo per un'entità servizio in un ambito delle risorse, 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: il tipo di risorsa.
  • PARENT_RESOURCE: la risorsa padre.
  • RESOURCE_GROUP_NAME: nome del gruppo di risorse.

Per ulteriori informazioni sull'utilizzo di Azure PowerShell per aggiungere una nuova entità servizio, consulta Assegnare ruoli di Azure utilizzando Azure PowerShell.

interfaccia a riga di comando di Azure

Per aggiungere un'assegnazione del ruolo per un'entità servizio in un ambito delle risorse, puoi utilizzare lo strumento a riga di comando di Azure. Devi disporre dell'autorizzazione Microsoft.Authorization/roleAssignments/write affinché l'account di archiviazione conceda i ruoli.

Per assegnare un ruolo, ad esempio il ruolo Collaboratore dati BLOB di archiviazione, all'entità di servizio, esegui il comando az role assignment create:

  az role assignment create --role "Storage Blob Data Contributor" \
    --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 dell'entità di servizio.
  • STORAGE_ACCOUNT_NAME: il nome dell'account di archiviazione.
  • RESOURCE_GROUP_NAME: nome del gruppo di risorse.
  • SUBSCRIPTION_ID: l'ID abbonamento.

Per maggiori informazioni, consulta Assegnare ruoli di Azure utilizzando l'interfaccia a riga di comando di Azure.

API REST Microsoft

Per aggiungere assegnazioni di 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 maggiori informazioni, consulta Ottenere l'accesso senza un utente. L'applicazione che chiama l'API REST Microsoft Graph deve disporre dell'autorizzazione applicazione Application.ReadWrite.All.

Per generare un token OAuth, esegui questo 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 che corrisponde all'ID della directory Azure che contiene l'account Archiviazione di Azure.
  • CLIENT_ID: l'ID client Azure.
  • CLIENT_SECRET: il client secret di Azure.

Recupera l'ID dei ruoli integrati di Azure che vuoi assegnare all'entità di servizio.

Ecco alcuni ruoli comuni:

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 dell'entità di servizio.
  • 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 essere utilizzata. Tuttavia, potrebbe verificarsi un ritardo nella propagazione dell'assegnazione di un ruolo in Azure. Se non riesci a utilizzare la connessione a causa di problemi di autorizzazione, riprova più tardi.

Condividere i contatti con gli utenti

Puoi concedere i ruoli seguenti per consentire agli utenti di eseguire query sui dati e gestire le connessioni:

  • roles/bigquery.connectionUser: consente agli utenti di utilizzare le connessioni per connettersi a origini dati esterne ed eseguire query su di esse.

  • roles/bigquery.connectionAdmin: consente agli utenti di gestire le connessioni.

Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Autorizzazioni e ruoli predefiniti.

Seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

    Le connessioni sono elencate nel progetto in un gruppo chiamato Connessioni esterne.

  2. Nel riquadro Explorer, fai clic sul nome del progetto > Connessioni esterne > connessione.

  3. Nel riquadro Dettagli, fai clic su Condividi per condividere una connessione. Quindi:

    1. Nella finestra di dialogo Autorizzazioni di connessione, condividi la connessione con altre entità aggiungendo o modificando entità.

    2. 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 per condividere una connessione.

API

Utilizza il metodo projects.locations.connections.setIAM nella sezione di riferimento dell'API REST BigQuery Connections e fornisci un'istanza della risorsa policy.

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.

Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

Passaggi successivi