Créer une connexion BigQuery Azure

BigQuery Omni accède aux données Azure Storage via des connexions. Chaque connexion possède sa propre application Azure Active Directory (Azure AD) unique. Les autorisations sont accordées aux applications via les rôles de gestion de l'authentification et des accès (IAM) Azure. Les rôles IAM Azure attribués déterminent les données auxquelles BigQuery peut accéder pour chaque connexion.

Avant de commencer

Assurez-vous d'avoir créé les ressources suivantes :

Créer la connexion BigQuery Azure

Pour créer une connexion BigQuery Azure, utilisez Google Cloud Console ou l'outil de ligne de commande bq :

Google Cloud Console

  1. Pour créer une ressource de connexion, accédez à la page BigQuery dans Google Cloud Console.

    Accéder à BigQuery

  2. Dans le menu Ajouter des données , sélectionnez Source de données externe.

  3. Dans le volet Source de données externes, saisissez les informations suivantes :

    • Dans le champ Type de connexion, sélectionnez Azure.
    • 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.
    • Dans le champ Emplacement de connexion, sélectionnez azure-eastus2.
    • 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.
    • Pour ID du locataire Azure, saisissez l'ID du locataire Azure, également appelé ID de répertoire.
  4. Cliquez sur Create connection (Créer une connexion).

    Notez la valeur du champ ID de l'application Azure et celle du champ Nom de l'application Azure pour une utilisation ultérieure.

bq

bq mk --connection --connection_type='Azure' \
--tenant_id=TENANT_ID \
--location=AZURE_LOCATION \
CONNECTION_NAME

Remplacez l'élément suivant :

  • TENANT_ID : ID de locataire du répertoire Azure contenant le compte Azure Storage.
  • AZURE_LOCATION : doit correspondre à la région Azure où se trouvent vos données Azure Storage. Seule la région azure-eastus2 est acceptée.
  • CONNECTION_NAME : nom que vous attribuez à cette connexion.

La ligne de commande affiche le résultat suivant :

  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.

Le résultat contient les éléments suivants :

  • APP_ID : ID de l'application dont vous avez besoin pour créer un compte principal de service dans votre répertoire.
  • APP_NAME : nom de l'application dont vous avez besoin pour attribuer des rôles permettant à BigQuery d'accéder à vos données Azure.

Notez les valeurs APP_ID et APP_NAME à utiliser dans les étapes suivantes.

Pour obtenir le résultat au format JSON, utilisez le paramètre --format=json :

  {"clientId": APP_ID, "application": APP_NAME}

Créer un compte principal de service Azure AD

Pour créer un compte principal de service Azure AD, utilisez Google Cloud Console, Azure PowerShell, l'outil de ligne de commande Azure ou l'API REST Microsoft Graph.

Google Cloud Console

Pour créer directement un compte principal de service Azure AD, accédez à Google Cloud Console, dans le volet Informations de connexion, cliquez sur Créer un compte principal de service.

Connectez-vous à votre compte Azure. Sur la page Permissions Requested (Autorisations requises) qui s'affiche, cliquez sur Accept (Accepter).

Azure PowerShell

Pour créer le compte principal de service pour l'ID d'application APP_ID qui a été renvoyé précédemment, vous pouvez utiliser Azure PowerShell. L'utilisateur doit disposer des autorisations Microsoft.directory/servicePrincipals/create.

Exécutez la commande suivante :

New-AzADServicePrincipal`
-ApplicationId APP_ID`
-SkipAssignment

Remplacez APP_ID par l'ID d'application renvoyé précédemment.

CLI Azure

Pour créer le compte de service principal de l'ID d'application APP_ID renvoyé précédemment, vous pouvez utiliser l'outil de ligne de commande Azure. L'utilisateur doit disposer des autorisations Microsoft.directory/servicePrincipals/create.

Exécutez la commande suivante :

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

Remplacez APP_ID par l'ID d'application renvoyé précédemment.

API REST Microsoft

Pour créer le compte de service principal de l'ID d'application APP_ID qui a été renvoyé précédemment, vous pouvez envoyer une requête HTTP à l'API REST Microsoft Graph.

Récupérez un jeton OAuth pour qu'une application puisse appeler l'API REST Microsoft Graph. L'application que vous utilisez doit disposer de l'autorisation d'application Application.ReadWrite.All.

Le champ TENANT_ID doit correspondre à l'ID du répertoire Azure contenant le compte Azure Storage.

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 l'élément suivant :

  • TENANT_ID : ID de locataire du répertoire Azure contenant le compte Azure Storage.
  • CLIENT_ID : ID client.
  • CLIENT_SECRET : code secret du client

Exécutez la commande suivante :

export APP_ID=APP_ID

Remplacez APP_ID par l'ID d'application qui a été renvoyé.

Pour créer un compte de service principal en appelant l'API REST Microsoft Graph, exécutez la commande suivante :

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')

Remplacez l'élément suivant :

  • TOKEN : jeton que vous avez récupéré à l'étape précédente.
  • APP_ID : ID de l'application renvoyé précédemment.

Attribuer un rôle aux applications Azure AD de BigQuery

Pour attribuer un rôle à l'application Azure AD 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 :

  1. Depuis votre compte Azure Storage, saisissez IAM dans la barre de recherche. Cliquez sur Access Control (IAM) (Contrôle des accès (IAM)).

  2. Cliquez sur Add (Ajouter), puis sélectionnez Add role assignments (Ajouter des attributions de rôles).

  3. Pour accorder un accès en lecture seule, sélectionnez le rôle Storage Blob Data Reader (Lecteur des données blob du 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).

  4. Définissez Assign access to (Attribuer l'accès à) à l'utilisateur, groupe ou compte principal de service.

  5. Dans le champ de saisie Select (Sélectionner), recherchez le nom de l'application APP_NAME renvoyé précédemment, puis sélectionnez le résultat correspondant.

  6. Cliquez sur Enregistrer.

Azure PowerShell

Pour ajouter une attribution de rôle à un compte de service principal au niveau d'une ressource, vous pouvez utiliser Azure PowerShell.

Exécutez la commande suivante :

New-AzRoleAssignment`
 -SignInName APP_NAME`
 -RoleDefinitionName ROLE_NAME`
 -ResourceName RESOURCE_NAME`
 -ResourceType RESOURCE_TYPE`
 -ParentResource PARENT_RESOURCE`
 -ResourceGroupName RESOURCE_GROUP_NAME

Remplacez l'élément suivant :

  • APP_NAME : nom de l'application
  • ROLE_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.

CLI Azure

Pour ajouter une attribution de rôle à un compte de service principal au niveau de la ressource, vous pouvez utiliser l'outil de ligne de commande Azure. La commande suivante attribue le rôle Storage Blob Data Contributor à un compte de stockage. L'utilisateur doit disposer de l'autorisation Microsoft.Authorization/roleAssignments/write pour le compte de stockage.

Pour attribuer un rôle, tel que le rôle Storage Blob Data Contributor, au compte de service principal, exécutez la commande suivante :

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

Remplacez l'élément suivant :

  • SP_ID : ID du 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

API REST Microsoft

Pour ajouter des attributions de rôles à un compte de service principal, 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. L'application utilisée pour appeler 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 l'élément suivant :

  • TENANT_ID : ID du locataire correspond à l'ID du répertoire Azure contenant le compte Azure Storage.
  • CLIENT_ID : ID du 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 de service principal.

Voici quelques rôles courants : * Contributeur Blob Data Contributor (Contributeur des données blob de stockage) : ba92f5b4-2d11-453d-a403-e96b0029c9fe * Storage Blob Data Reader (Lecteur des données blob du stockage) : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1

Pour attribuer un rôle au compte principal de service, appelez l'API REST Windows 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 principal de service - SUBSCRIPTION_ID : ID de l'abonnement - RESOURCE_GROUP_NAME : nom du groupe de ressources - STORAGE_ACCOUNT_NAME : - SUBSCRIPTION_ID : ID de l'abonnement

La connexion est maintenant prête à être utilisée.

Étape suivante