Freigeben über


Erstellen von zwei Web-Apps, die sicher mit der Integration von privatem Endpunkt und VNet verbunden sind

In diesem Artikel wird eine Beispielverwendung der privaten Endpunkt - und regionalen VNet-Integration veranschaulicht, um zwei Web-Apps (Frontend und Back-End) sicher mit der folgenden Terraform-Konfiguration zu verbinden:

  1. Bereitstellen eines VNet
  2. Erstellen des ersten Subnetzes für die Integration
  3. Erstellen des zweiten Subnetzes für den privaten Endpunkt und Deaktivieren von Subnetznetzwerkrichtlinien für private Endpunkte (satz private_endpoint_network_policies_enabled = false)
  4. Bereitstellen eines App Service-Plans vom Typ "Basic", "Standard", "PremiumV2", "PremiumV3", "IsolatedV2", "Functions Premium" (manchmal als Elastic Premium-Plan bezeichnet), erforderlich für das Feature "Privater Endpunkt"
  5. Erstellen Sie die Frontend-Web-App mit bestimmten App-Einstellungen, um die private DNS-Zone zu nutzen. Weitere Informationen finden Sie in den privaten Azure DNS-Zonen.
  6. Verbinden der Frontend-Web-App mit dem Integrationssubnetz
  7. Erstellen der Back-End-Web-App
  8. Erstellen der privaten DNS-Zone mit dem Namen der Zone für private Verknüpfungen für Web-Apps (privatelink.azurewebsites.net)
  9. Diese Zone mit dem VNet verknüpfen
  10. Erstellen Sie den privaten Endpunkt für die Back-End-Web-App im Endpunktsubnetz, und registrieren Sie DNS-Namen (Standort und SCM) in der zuvor erstellten privaten DNS-Zone.

So verwenden Sie Terraform in Azure

Navigieren Sie zur Azure-Dokumentation , um zu erfahren, wie Sie Terraform mit Azure verwenden.

Die vollständige Terraform-Datei

Um diese Datei zu verwenden, ersetzen Sie die Platzhalter "unique-frontend-app-name<" und "unique-backend-app-name" (Der App-Name wird verwendet, um weltweit einen eindeutigen> DNS-Namen zu bilden).<>

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 = false
}

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
  }
}

Nächste Schritte

Weitere Informationen zur Verwendung von Terraform in Azure