Partager via


Créer deux applications web connectées en toute sécurité avec un point de terminaison privé et une intégration au réseau virtuel

Cet article présente un exemple d’utilisation d’un point de terminaison privé et d’une intégration au réseau virtuel régional pour connecter deux applications web (frontale et principale) en toute sécurité avec la configuration Terraform suivante :

  • Déployer un réseau virtuel.
  • Créer le premier sous-réseau pour l’intégration.
  • Créer le deuxième sous-réseau pour le point de terminaison privé. Vous devez définir un paramètre spécifique pour désactiver les stratégies réseau.
  • Déployer un plan App Service de type Basic, Standard, PremiumV2, PremiumV3, IsolatedV2, Functions Premium (parfois appelé plan Elastic Premium), requis pour la fonctionnalité de point de terminaison privé
  • Créer l’application web frontale avec des paramètres d’application spécifiques pour utiliser la zone DNS privée. En savoir plus.
  • Connecter l’application web frontale au sous-réseau d’intégration.
  • Créer l’application web principale.
  • Créer la zone DNS privée avec le nom de la zone de liaison privée pour l’application web privatelink.azurewebsites.net.
  • Lier cette zone au réseau virtuel.
  • Créer le point de terminaison privé pour l’application web principale dans le sous-réseau du point de terminaison, puis enregistrer les noms DNS (site web et SCM) dans la zone privée DNS créée précédemment.

Comment utiliser Terraform dans Azure

Pour savoir comment utiliser Terraform avec Azure, consultez la documentation d’Azure.

Fichier Terraform complet

Pour utiliser ce fichier, remplacez les espaces réservés <unique-frontend-app-name> et <unique-backend-app-name> (le nom de l’application est utilisé pour former un nom DNS unique dans le monde entier).

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
}
provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "rg" {
  name     = "appservice-rg"
  location = "francecentral"
}

resource "azurerm_virtual_network" "vnet" {
  name                = "vnet"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  address_space       = ["10.0.0.0/16"]
}

resource "azurerm_subnet" "integrationsubnet" {
  name                 = "integrationsubnet"
  resource_group_name  = azurerm_resource_group.rg.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes     = ["10.0.1.0/24"]
  delegation {
    name = "delegation"
    service_delegation {
      name = "Microsoft.Web/serverFarms"
    }
  }
}

resource "azurerm_subnet" "endpointsubnet" {
  name                 = "endpointsubnet"
  resource_group_name  = azurerm_resource_group.rg.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes     = ["10.0.2.0/24"]
  private_endpoint_network_policies_enabled = true
}

resource "azurerm_service_plan" "appserviceplan" {
  name                = "appserviceplan"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  os_type             = "Windows"
  sku_name            = "P1v2"
}

resource "azurerm_windows_web_app" "frontwebapp" {
  name                = "<unique-frontend-app-name>"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  service_plan_id = azurerm_service_plan.appserviceplan.id

  site_config {}
  app_settings = {
    "WEBSITE_DNS_SERVER": "168.63.129.16",
    "WEBSITE_VNET_ROUTE_ALL": "1"
  }
}

resource "azurerm_app_service_virtual_network_swift_connection" "vnetintegrationconnection" {
  app_service_id  = azurerm_windows_web_app.frontwebapp.id
  subnet_id       = azurerm_subnet.integrationsubnet.id
}

resource "azurerm_windows_web_app" "backwebapp" {
  name                = "<unique-backend-app-name>"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  service_plan_id = azurerm_service_plan.appserviceplan.id

  site_config {}
}

resource "azurerm_private_dns_zone" "dnsprivatezone" {
  name                = "privatelink.azurewebsites.net"
  resource_group_name = azurerm_resource_group.rg.name
}

resource "azurerm_private_dns_zone_virtual_network_link" "dnszonelink" {
  name = "dnszonelink"
  resource_group_name = azurerm_resource_group.rg.name
  private_dns_zone_name = azurerm_private_dns_zone.dnsprivatezone.name
  virtual_network_id = azurerm_virtual_network.vnet.id
}

resource "azurerm_private_endpoint" "privateendpoint" {
  name                = "backwebappprivateendpoint"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  subnet_id           = azurerm_subnet.endpointsubnet.id

  private_dns_zone_group {
    name = "privatednszonegroup"
    private_dns_zone_ids = [azurerm_private_dns_zone.dnsprivatezone.id]
  }

  private_service_connection {
    name = "privateendpointconnection"
    private_connection_resource_id = azurerm_windows_web_app.backwebapp.id
    subresource_names = ["sites"]
    is_manual_connection = false
  }
}

Étapes suivantes

En savoir plus sur l’utilisation de Terraform dans Azure