Se connecter à Blob Storage
En tant qu'administrateur BigQuery, vous pouvez créer une connexion pour permettre aux analystes de données d'accéder aux données stockées dans Azure Blob Storage.
BigQuery Omni accède aux données Blob Storage via des connexions. BigQuery Omni est compatible avec la fédération d'identité de charge de travail Azure. La compatibilité de BigQuery Omni avec la fédération d'identité de charge de travail Azure vous permet d'accorder l'accès d'une application Azure dans votre locataire à un compte de service Google. Vous n'avez pas à gérer de codes secrets de client d'application, ni Google.
Après avoir créé une connexion BigQuery Azure, vous pouvez interroger les données Blob Storage ou exporter les résultats de la requête vers Blob Storage.
Avant de commencer
Assurez-vous d'avoir créé les ressources suivantes :
Un projet Google Cloud avec l'API BigQuery Connection activée.
Si vous utilisez le modèle de tarification basé sur la capacité, assurez-vous d'avoir activé l'API BigQuery Reservation pour votre projet. Pour en savoir plus sur les tarifs, consultez la section Tarifs de BigQuery Omni.
Un locataire Azure avec un abonnement Azure.
Un compte Azure Storage répondant aux spécifications suivantes :
Il s'agit d'un compte V2 à usage général ou d'un compte Blob Storage.
Il utilise un espace de noms hiérarchique. Pour en savoir plus, consultez la page Créer un compte de stockage à utiliser avec Azure Data Lake Storage Gen2.
Les données sont renseignées dans l'un des formats compatibles.
Les données se trouvent dans la région
azure-eastus2
.
Rôles requis
-
Pour obtenir les autorisations nécessaires pour créer une connexion permettant d'accéder aux données Azure Blob Storage, demandez à votre administrateur de vous accorder le rôle IAM Administrateur de connexion BigQuery (
roles/bigquery.connectionAdmin
) sur le projet. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
-
Assurez-vous de disposer des autorisations IAM Azure suivantes sur votre locataire :
Application.ReadWrite.All
AppRoleAssignment.ReadWrite.All
Quotas
Pour en savoir plus sur les quotas, consultez la page API BigQuery Connection.
Créer une connexion Azure
Pour créer une connexion Azure, procédez comme suit:
- Créez une application dans votre locataire Azure.
- Créez la connexion BigQuery Azure.
- Ajoutez un identifiant fédéré.
- Attribuez un rôle aux applications BigQuery Azure AD.
Pour en savoir plus sur l'utilisation des identifiants d'identité fédérée pour accéder aux données dans Azure, consultez la page Fédération d'identité de charge de travail.
Créer une application dans votre locataire Azure
Pour créer une application dans votre locataire Azure, procédez comme suit :
Portail Azure
Dans le portail Azure, accédez à App registrations (Enregistrements d'applications), puis cliquez sur New registration (Nouvel enregistrement).
Dans le champ Names (Noms), saisissez le nom de l'application.
Dans le champ Supported account types (Types de comptes compatibles), sélectionnez Accounts in this organizational directory only (Comptes de ce répertoire organisationnel uniquement).
Pour enregistrer la nouvelle application, cliquez sur Register (Enregistrer).
Notez l'ID (client) de l'application. Vous devez fournir cet ID lorsque vous créez la connexion.
Terraform
Ajoutez le code suivant à votre fichier de configuration 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 }
Pour plus d'informations, découvrez comment enregistrer une application dans Azure.
Créer une connexion
Console
Dans la console Google Cloud, accédez à la page BigQuery.
Dans le menu
Ajouter, sélectionnez Source de données externe.Dans le volet Source de données externes, saisissez les informations suivantes :
- Dans le champ Type de connexion, sélectionnez BigLake sur Azure (via BigQuery Omni).
- Dans le champ Connection ID (ID de connexion), saisissez un identifiant pour la ressource de connexion. Vous pouvez utiliser des lettres, des chiffres et des traits de soulignement.
- Sélectionnez l'emplacement où vous souhaitez créer la connexion.
- Facultatif : Dans le champ Nom descriptif, saisissez un nom clair pour identifier la connexion, tel que
My connection resource
. Ce nom peut correspondre à n'importe quelle valeur permettant d'identifier la ressource de connexion si vous devez la modifier ultérieurement. - Facultatif : Dans le champ Description, saisissez une description de la ressource de connexion.
- Dans le champ ID de locataire Azure, saisissez l'ID du locataire Azure, également appelé ID d'annuaire (locataire).
Cochez la case Utiliser l'identité fédérée, puis saisissez l'ID de l'application fédérée (client) Azure.
Pour savoir comment obtenir des ID Azure, consultez la page Créer une application dans votre locataire Azure.
Cliquez sur Créer une connexion.
Cliquez sur Accéder à la connexion.
Dans la section Informations de connexion, notez la valeur de l'identité Google BigQuery, qui correspond à l'ID du compte de service. Cet ID correspond au compte de service Google Cloud que vous autorisez à accéder à votre application.
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 } }
Remplacez TENANT_ID
par l'ID de locataire du répertoire Azure contenant le compte Blob Storage.
bq
Exécutez la commande bq mk
. Pour obtenir le résultat au format JSON, utilisez le paramètre --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
Remplacez les éléments suivants :
TENANT_ID
: ID de locataire du répertoire Azure contenant le compte Azure Storage.AZURE_LOCATION
: région Azure où se trouvent vos données Azure Storage. BigQuery Omni est compatible avec la régionazure-eastus2
.APP_ID
: ID (client) de l'application Azure. Pour savoir comment obtenir cet ID, consultez la page Créer une application dans un locataire Azure.CONNECTION_ID
: nom de la connexion.
Le résultat ressemble à ce qui suit :
Connection CONNECTION_ID successfully created Please add the following identity to your Azure application APP_ID Identity: SUBJECT_ID
Ce résultat inclut les valeurs suivantes :
APP_ID
: ID de l'application que vous avez créée.SUBJECT_ID
: ID du compte de service Google Cloud que l'utilisateur autorise à accéder à son application. Cette valeur est obligatoire lorsque vous créez un identifiant fédéré dans Azure.
Notez les valeurs APP_ID
et SUBJECT_ID
à utiliser dans les étapes suivantes.
Ajoutez ensuite un identifiant fédéré pour votre application.
Ajouter un identifiant fédéré
Pour créer un nouvel identifiant fédéré, procédez comme suit :
Portail Azure
Sur le portail Azure, accédez à App registrations (Enregistrements d'applications), puis cliquez sur votre application.
Sélectionnez Certificates & secrets > Federated credentials > Add credentials (Certificats et secrets > Identifiants fédérés > Ajouter des identifiants). Ensuite, procédez comme suit :
Dans la liste Federated credential scenario (Scénario d'identifiants fédérés), sélectionnez Other issuer (Autre émetteur).
Dans le champ Issuer (Émetteur), saisissez
https://accounts.google.com
.Dans le champ Identifiant de l'objet, saisissez l'identité Google BigQuery du compte de service Google Cloud que vous avez obtenu lors de la création de la connexion.
Dans le champ Name (Nom), saisissez un nom pour les identifiants.
Cliquez sur Ajouter.
Terraform
Ajoutez le code suivant à votre fichier de configuration 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 }
Pour en savoir plus, consultez la page Configurer une application pour approuver un fournisseur d'identité externe.
Attribuer un rôle aux applications Azure de BigQuery
Pour attribuer un rôle à une application Azure de BigQuery, utilisez le portail Azure, Azure PowerShell ou l'API REST Microsoft Management :
Portail Azure
Vous pouvez attribuer des rôles dans le portail Azure en vous connectant en tant qu'utilisateur disposant de l'autorisation Microsoft.Authorization/roleAssignments/write
. L'attribution de rôle permet à la connexion BigQuery Azure d'accéder aux données Azure Storage comme spécifié dans la stratégie des rôles.
Pour ajouter des attributions de rôles à l'aide du portail Azure, procédez comme suit :
Depuis votre compte Azure Storage, saisissez
IAM
dans la barre de recherche.Cliquez sur Access Control (IAM) (Contrôle des accès (IAM)).
Cliquez sur Add (Ajouter), puis sélectionnez Add role assignments (Ajouter des attributions de rôles).
Pour accorder un accès en lecture seule, sélectionnez le rôle Storage Blob Data Reader (Lecteur des données blob de stockage). Pour accorder un accès en lecture/écriture, sélectionnez le rôle Storage Blob Data Contributor (Contributeur des données blob de stockage).
Définissez Assign access to (Attribuer l'accès à) à l'utilisateur, groupe ou compte principal de service.
Cliquez sur Select members (Sélectionner des membres).
Dans le champ Select (Sélectionner), saisissez le nom de l'application Azure que vous avez fourni lors de la création de l'application dans le locataire Azure.
Cliquez sur Enregistrer.
Pour en savoir plus, consultez la page Attribuer des rôles Azure à l'aide du portail Azure.
Terraform
Ajoutez le code suivant à votre fichier de configuration 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
Pour ajouter une attribution de rôle à un compte principal de service au niveau d'une ressource, vous pouvez utiliser la commande New-AzRoleAssignment
:
New-AzRoleAssignment` -SignInName APP_NAME` -RoleDefinitionName ROLE_NAME` -ResourceName RESOURCE_NAME` -ResourceType RESOURCE_TYPE` -ParentResource PARENT_RESOURCE` -ResourceGroupName RESOURCE_GROUP_NAME
Remplacez les éléments suivants :
APP_NAME
: nom de l'applicationROLE_NAME
: nom du rôle que vous souhaitez attribuer.RESOURCE_NAME
: nom de la ressource.RESOURCE_TYPE
: type de ressource.PARENT_RESOURCE
: ressource parente.RESOURCE_GROUP_NAME
: nom du groupe de ressources.
Pour en savoir plus sur l'utilisation d'Azure PowerShell pour ajouter un nouveau compte principal de service, consultez la page Attribuer des rôles Azure à l'aide d'Azure PowerShell.
CLI Azure
Pour ajouter une attribution de rôle à un compte principal de service au niveau d'une ressource, vous pouvez utiliser l'outil de ligne de commande Azure. Vous devez disposer de l'autorisation Microsoft.Authorization/roleAssignments/write
pour que le compte de stockage puisse attribuer des rôles.
Pour attribuer un rôle tel que le rôle Storage Blob Data Reader (Lecteur des données blob de stockage) au compte de service principal, exécutez la commande 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
Remplacez les éléments suivants :
SP_ID
: ID du compte de service. Ce compte principal de service est destiné à l'application que vous avez créée. Pour obtenir le compte principal de service pour une connexion fédérée, consultez la page Objet de compte principal de service.STORAGE_ACCOUNT_NAME
: nom du compte de stockage.RESOURCE_GROUP_NAME
: nom du groupe de ressources.SUBSCRIPTION_ID
: ID de l'abonnement.
Pour en savoir plus, consultez la page Attribuer des rôles Azure à l'aide de l'interface de ligne de commande Azure.
API REST Microsoft
Pour ajouter des attributions de rôles à un compte principal de service, vous pouvez envoyer une requête HTTP à Microsoft Management.
Pour appeler l'API REST Microsoft Graph, récupérez un jeton OAuth pour une application. Pour en savoir plus, consultez la page Obtenir l'accès sans utilisateur.
L'application qui a appelé l'API REST Microsoft Graph doit disposer de l'autorisation d'application Application.ReadWrite.All
.
Pour générer un jeton OAuth, exécutez la commande suivante :
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')
Remplacez les éléments suivants :
TENANT_ID
: ID du locataire correspond à l'ID du répertoire Azure contenant le compte Azure Storage.CLIENT_ID
: ID client Azure.CLIENT_SECRET
: code secret du client Azure.
Obtenez l'ID des rôles intégrés Azure que vous souhaitez attribuer au compte principal de service.
Voici quelques rôles courants :
- Contributeur des données blob de stockage :
ba92f5b4-2d11-453d-a403-e96b0029c9fe
- Lecteur des données blob de stockage :
2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
Pour attribuer un rôle au compte principal de service, appelez l'API REST Microsoft Graph sur l'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" } }'
Remplacez les éléments suivants :
ROLE_ASSIGNMENT_ID
: ID du rôle.SP_ID
: ID du compte de service. Ce compte principal de service est destiné à l'application que vous avez créée. Pour obtenir le compte principal de service pour une connexion fédérée, consultez la page Objet de compte principal de service.SUBSCRIPTION_ID
: ID de l'abonnement.RESOURCE_GROUP_NAME
: nom du groupe de ressources.STORAGE_ACCOUNT_NAME
: nom du compte de stockage.SUBSCRIPTION_ID
: ID de l'abonnement.
La connexion est maintenant prête à être utilisée. Toutefois, un délai de propagation peut exister pour une attribution de rôle dans Azure. Si vous ne parvenez pas à utiliser la connexion en raison de problèmes d'autorisation, réessayez un peu plus tard.
Partager des connexions avec les utilisateurs
Vous pouvez attribuer les rôles suivants pour permettre aux utilisateurs d'interroger des données et de gérer les connexions :
roles/bigquery.connectionUser
permet aux utilisateurs de se connecter à des sources de données externes et d'y exécuter des requêtes.roles/bigquery.connectionAdmin
permet aux utilisateurs de gérer les connexions.
Pour en savoir plus sur les rôles et les autorisations IAM dans BigQuery, consultez la page Rôles prédéfinis et autorisations.
Sélectionnez l'une des options suivantes :
Console
Accédez à la page BigQuery.
Les connexions sont répertoriées dans votre projet, dans un groupe appelé Connexions externes.
Dans le volet Explorateur, cliquez sur votre nom de projet > Connexions externes > connexion.
Dans le volet Détails, cliquez sur Partager pour partager une connexion. Ensuite, procédez comme suit :
Dans la boîte de dialogue Autorisations de connexion, partagez la connexion avec d'autres comptes principaux en ajoutant ou en modifiant des comptes principaux.
Cliquez sur Enregistrer.
bq
Vous ne pouvez pas partager de connexion avec l'outil de ligne de commande bq. Pour partager une connexion, utilisez la console Google Cloud ou la méthode de l'API BigQuery Connections permettant le partage de connexion.
API
Utilisez la méthode projects.locations.connections.setIAM
dans la section de référence de l'API REST BigQuery Connections et fournissez une instance de la ressource policy
.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
Étape suivante
- Découvrez les différents types de connexions.
- Découvrez comment gérer les connexions.
- Apprenez-en davantage sur BigQuery Omni.
- Découvrez les tables BigLake.
- Découvrez comment interroger des données Blob Storage.
- Apprenez à exporter les résultats de requêtes vers Blob Storage.