Udostępnij za pośrednictwem


Bezpieczne tworzenie dwóch aplikacji internetowych połączonych z prywatnym punktem końcowym i integracją z siecią wirtualną

W tym artykule przedstawiono przykład użycia prywatnego punktu końcowego i regionalnej integracji z siecią wirtualną w celu bezpiecznego łączenia dwóch aplikacji internetowych (frontonu i zaplecza) z następującą konfiguracją programu terraform:

  • Wdrażanie sieci wirtualnej
  • Tworzenie pierwszej podsieci na potrzeby integracji
  • Utwórz drugą podsieć dla prywatnego punktu końcowego, musisz ustawić określony parametr, aby wyłączyć zasady sieciowe
  • Wdrażanie jednego planu usługi App Service o typie Basic, Standard, PremiumV2, PremiumV3, IsolatedV2, Functions Premium (czasami nazywanym planem Elastic Premium), wymaganym dla funkcji prywatnego punktu końcowego
  • Tworzenie aplikacji internetowej frontonu z określonymi ustawieniami aplikacji w celu korzystania z prywatnej strefy DNS, więcej szczegółów
  • Połączenie aplikacji internetowej frontonu do podsieci integracji
  • Tworzenie aplikacji internetowej zaplecza
  • Utwórz strefę prywatną DNS z nazwą strefy łącza prywatnego dla aplikacji internetowej privatelink.azurewebsites.net
  • Połącz tę strefę z siecią wirtualną
  • Utwórz prywatny punkt końcowy dla aplikacji internetowej zaplecza w podsieci punktu końcowego i zarejestruj nazwy DNS (witrynę internetową i usługę SCM) w wcześniej utworzonej strefie prywatnej DNS

Jak używać narzędzia terraform na platformie Azure

Przejdź do dokumentacji platformy Azure, aby dowiedzieć się, jak używać narzędzia terraform na platformie Azure.

Kompletny plik terraform

Aby użyć tego pliku, zastąp symbole zastępcze unique-frontend-app-name i< unique-backend-app-name>> (nazwa aplikacji jest używana do tworzenia unikatowej nazwy DNS na całym świecie).<

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

Następne kroki

Dowiedz się więcej o korzystaniu z programu Terraform na platformie Azure