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