إنشاء تطبيقين للويب متصلين بأمان من خلال تكامل نقطة النهاية الخاصة وVNet

توضح هذه المقالة مثالا لاستخدام نقطة النهاية الخاصة وتكامل VNet الإقليمي لتوصيل تطبيقي ويب (الواجهة الأمامية والخلفية) بشكل آمن بتكوين terraform التالي:

  • نشر VNet
  • إنشاء أول شبكة فرعية للتكامل
  • قم بإنشاء الشبكة الفرعية الثانية لنقطة النهاية الخاصة، يجب عليك تعيين معلمة محددة لتعطيل سياسات الشبكة
  • نشر خطة App Service واحدة من النوع Basic، Standard، PremiumV2، PremiumV3، IsolatedV2، Functions Premium (يشار إليها أحيانا باسم خطة Elastic Premium)، المطلوبة لميزة نقطة النهاية الخاصة
  • أنشئ تطبيق الويب للواجهة الأمامية باستخدام إعدادات التطبيق المحددة لاستهلاك منطقة DNS الخاصة، مزيد من التفاصيل
  • قم بتوصيل تطبيق الويب للواجهة الأمامية بالشبكة الفرعية للتكامل
  • إنشاء تطبيق الويب الخلفي
  • قم بإنشاء منطقة DNS الخاصة باسم منطقة الارتباط الخاصة لتطبيق الويب privatelink.azurewebsites.net
  • اربط هذه المنطقة بشبكة VNet
  • قم بإنشاء نقطة النهاية الخاصة لتطبيق الويب الخلفي في الشبكة الفرعية لنقطة النهاية، وقم بتسجيل أسماء DNS (موقع الويب وSCM) في منطقة DNS الخاصة التي تم إنشاؤها مسبقًا

كيفية استخدام terraform في Azure

استعرض وثائق Azure للتعرف على كيفية استخدام terraform مع Azure.

ملف terraform الكامل

لاستخدام هذا الملف، استبدل العناصر النائبة unique-frontend-app-name> و <unique-backend-app-name> (يتم استخدام اسم التطبيق لتشكيل اسم DNS فريد في جميع أنحاء العالم).<

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

الخطوات التالية

تعرف على المزيد حول استخدام Terraform في Azure