Déployer une passerelle de données VNet Azure pour Power BI avec Terraform

L'accès sécurisé aux données est un enjeu majeur pour les entreprises utilisant Power BI. Lorsque vos sources de données (comme une base Azure SQL, un compte de stockage ou un data lake) sont isolées derrière des réseaux virtuels (VNet) et des points de terminaison privés (Private Endpoints), Power BI (en tant que service SaaS public) ne peut plus y accéder par défaut.
Pour pallier ce problème, Microsoft propose la Passerelle de données de réseau virtuel (VNet Data Gateway). Cet article vous explique son fonctionnement et vous guide pas-à-pas pour déployer l'infrastructure requise à l'aide de Terraform.
1. Comprendre l'architecture et les prérequis
La passerelle VNet agit comme un pont sécurisé, injecté directement par Microsoft dans l'un de vos sous-réseaux (Subnet). Contrairement à la passerelle de données locale (On-Premises Data Gateway), elle est entièrement managée par Microsoft (PaaS) et ne nécessite le déploiement d'aucune machine virtuelle (IaaS) de votre part.
Comment ça marche ?
Délégation de sous-réseau : Vous créez un sous-réseau dans votre VNet Azure et vous le déléguez au fournisseur
Microsoft.PowerPlatform/vnetaccesslinks.Injection : Lors des requêtes, le service Power Platform déploie des conteneurs managés dans ce sous-réseau.
Accès : Ces conteneurs acheminent les requêtes Power BI vers vos sources de données privées en empruntant le VNet (ou via un Private Endpoint).
Prérequis
Un abonnement Azure avec les droits pour enregistrer des fournisseurs de ressources (Resource Providers) et créer des réseaux.
Une licence Power BI Premium (capacité P ou équivalent Fabric F SKU) ou Premium par utilisateur (PPU).
La source de données (ex: Azure SQL) doit être accessible depuis le sous-réseau délégué.
2. Code Terraform
Pour automatiser la mise en place de l'infrastructure réseau sur Azure, voici le contenu de mon projet Terraform.
Structure IaC
vnet-gateway-powerbi-terraform/
├── providers.tf
├── variables.tf
├── main.tf
└── outputs.tf
📄 providers.tf
Ce fichier configure le fournisseur Azure (azurerm) pour Terraform.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
}
}
provider "azurerm" {
features {}
}
📄 variables.tf
Définition des variables pour rendre notre code dynamique et réutilisable.
variable "resource_group_name" {
type = string
description = "Nom du groupe de ressources"
default = "rg-powerbi-gateway-prod"
}
variable "location" {
type = string
description = "Région Azure pour le déploiement"
default = "westeurope"
}
variable "vnet_name" {
type = string
description = "Nom du réseau virtuel (VNet)"
default = "vnet-data-prod"
}
📄 main.tf
C'est le cœur de notre déploiement. Il contient l'enregistrement du fournisseur de ressource PowerPlatform (obligatoire pour que l'intégration VNet fonctionne), le VNet et le sous-réseau spécifiquement délégué.
# 1. Création du groupe de ressources
resource "azurerm_resource_group" "rg" {
name = var.resource_group_name
location = var.location
}
# 2. Enregistrement du fournisseur de ressources Microsoft.PowerPlatform au niveau de la souscription
resource "azurerm_resource_provider_registration" "powerplatform" {
name = "Microsoft.PowerPlatform"
}
# 3. Création du réseau virtuel (VNet)
resource "azurerm_virtual_network" "vnet" {
name = var.vnet_name
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
}
# 4. Création du sous-réseau dédié à la passerelle Power BI
resource "azurerm_subnet" "gateway_subnet" {
name = "snet-powerbi-gateway"
resource_group_name = azurerm_resource_group.rg.name
virtual_network_name = azurerm_virtual_network.vnet.name
address_prefixes = ["10.0.1.0/24"]
# C'est ici que la magie opère : la délégation du sous-réseau
delegation {
name = "powerplatform-delegation"
service_delegation {
name = "Microsoft.PowerPlatform/vnetaccesslinks"
actions = [
"Microsoft.Network/virtualNetworks/subnets/join/action",
]
}
}
# On s'assure que le provider est bien enregistré avant de déléguer le sous-réseau
depends_on = [
azurerm_resource_provider_registration.powerplatform
]
}
📄 outputs.tf
Permet de récupérer l'ID du sous-réseau, qui sera utile si vous souhaitez y associer des règles de routage spécifiques plus tard.
output "gateway_subnet_id" {
value = azurerm_subnet.gateway_subnet.id
description = "L'ID du sous-réseau délégué à Power Platform."
}
output "vnet_id" {
value = azurerm_virtual_network.vnet.id
}
3. Configuration finale dans l'interface Power BI
Une fois votre terraform apply exécuté avec succès, l'infrastructure réseau est prête sur Azure. La dernière étape consiste à relier cette infrastructure à votre environnement Power BI (actuellement, la création de l'objet de passerelle VNet lui-même se fait dans le portail Power BI, car elle appartient au locataire Power Platform plutôt qu'à l'API Azure Resource Manager).
Allez sur app.powerbi.com ou le Centre d'administration Power Platform.
Dans Power BI, allez dans Paramètres (l'icône engrenage) > Gérer les connexions et les passerelles.
Cliquez sur l'onglet Passerelles de données de réseau virtuel (VNet) et sélectionnez Nouveau.
Remplissez les champs :
Choisissez votre abonnement Azure.
Sélectionnez le groupe de ressources (
rg-powerbi-gateway-prod).Sélectionnez le VNet (
vnet-data-prod) et le sous-réseau (snet-powerbi-gateway). (Note : Seuls les sous-réseaux délégués correctement via notre code Terraform apparaitront ici).
Enregistrez.
Votre passerelle est désormais active ! Lorsque vous créerez une nouvelle source de données (par exemple un connecteur Azure SQL DB) dans Power BI, vous pourrez sélectionner cette passerelle. Le trafic passera directement du service Power BI vers votre réseau privé, sans jamais s'exposer sur Internet de façon publique.






