terraform-provider-azure - Azure Terraform Web App专用端点虚拟网络

标签 terraform-provider-azure azure-virtual-network

我正在尝试自动部署 Azure 虚拟网络和 Azure Web 应用程序。 在部署这些资源的过程中,一切都很顺利,没有出现任何错误。所以我想尝试在网络应用程序上激活专用端点。这是我在 terraform 上的配置。

resource "azurerm_virtual_network" "demo-vnet" {
  name                = "virtual-network-test"
  address_space       = ["10.100.0.0/16"]
  location            = var.location
  resource_group_name = azurerm_resource_group.rg-testing-env.name
}

resource "azurerm_subnet" "front_end" {
  name                 = "Front_End-Subnet"
  address_prefixes     = ["10.100.5.0/28"]
  virtual_network_name = azurerm_virtual_network.demo-vnet.name
  resource_group_name  = azurerm_resource_group.rg-testing-env.name
  delegation {
    name = "testing-frontend"
    service_delegation {
      name    = "Microsoft.Web/serverFarms"
      actions = ["Microsoft.Network/virtualNetworks/subnets/action"]
    }
  }
}

在网络应用程序本身上,我设置了此配置

resource "azurerm_app_service_virtual_network_swift_connection" "web-app-vnet" {
  app_service_id = azurerm_app_service.app-test.example.id
  subnet_id      = azurerm_subnet.front_end.id
}

注意:在我的第一次部署中,swift 失败了,因为我没有在虚拟网络上进行委派,因此我必须在子网上添加委派才能运行 terraform。

设置好所有配置后,我运行我的 terraform,一切运行顺利,没有错误。 完成后,我检查了我的网络应用程序 Private Endpoint,结果刚刚关闭。

enter image description here

有人可以解释一下我在这里做错了什么吗?我认为 swift 连接是激活私有(private)端点的代码块,但显然我还缺少其他东西。

为了确认我的逻辑工作流程,我尝试在门户中执行手动步骤。但令人惊讶的是,我无法做到这一点,因为我在子网上有委托(delegate),如您所见。

enter image description here

非常感谢您为解决此问题提供的任何帮助和/或解释

最佳答案

我使用以下代码来测试 VNET 和具有专用端点的 Web 应用程序的创建。

provider "azurerm" {
    features{}
}

data "azurerm_resource_group" "rg" {
  name     = "ansumantest"
}

# Virtual Network
resource "azurerm_virtual_network" "vnet" {
  name                = "ansumanapp-vnet"
  location            = data.azurerm_resource_group.rg.location
  resource_group_name = data.azurerm_resource_group.rg.name
  address_space       = ["10.4.0.0/16"]
}

# Subnets for App Service instances
resource "azurerm_subnet" "appserv" {
  name                 = "frontend-app"
  resource_group_name  = data.azurerm_resource_group.rg.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes     = ["10.4.1.0/24"]
  enforce_private_link_endpoint_network_policies = true
  }

 
# App Service Plan
resource "azurerm_app_service_plan" "frontend" {
  name                = "ansuman-frontend-asp"
  location            = data.azurerm_resource_group.rg.location
  resource_group_name = data.azurerm_resource_group.rg.name
  kind                = "Linux"
  reserved            = true

  sku {
    tier = "Premium"
    size = "P1V2"
  }
}


# App Service
resource "azurerm_app_service" "frontend" {
  name                = "ansuman-frontend-app"
  location            = data.azurerm_resource_group.rg.location
  resource_group_name = data.azurerm_resource_group.rg.name
  app_service_plan_id = azurerm_app_service_plan.frontend.id

}
#private endpoint

resource "azurerm_private_endpoint" "example" {
  name                = "${azurerm_app_service.frontend.name}-endpoint"
  location            = data.azurerm_resource_group.rg.location
  resource_group_name = data.azurerm_resource_group.rg.name
  subnet_id           = azurerm_subnet.appserv.id
  

  private_service_connection {
    name                           = "${azurerm_app_service.frontend.name}-privateconnection"
    private_connection_resource_id = azurerm_app_service.frontend.id
    subresource_names = ["sites"]
    is_manual_connection = false
  }
}

# private DNS
resource "azurerm_private_dns_zone" "example" {
  name                = "privatelink.azurewebsites.net"
  resource_group_name = data.azurerm_resource_group.rg.name
}

#private DNS Link
resource "azurerm_private_dns_zone_virtual_network_link" "example" {
  name                  = "${azurerm_app_service.frontend.name}-dnslink"
  resource_group_name   = data.azurerm_resource_group.rg.name
  private_dns_zone_name = azurerm_private_dns_zone.example.name
  virtual_network_id    = azurerm_virtual_network.vnet.id
  registration_enabled = false
}

要求:

  • 从上面的代码中可以看出,创建专用端点需要 Private EndpointPrivate DNSPrivate DNS Link block 并为应用服务启用它。
  • 应用服务计划需要有高级计划才能拥有私有(private)服务 端点。
  • 专用端点要使用的子网应具有 enforce_private_link_endpoint_network_policies = true 设置其他 明智的情况是,它会错误地给出消息,因为子网已启用专用端点网络策略,应禁用它以供专用端点使用
  • DNS 区域名称只能是 privatelink.azurewebsites.net,因为您为 web 应用创建专用端点。

输出:

enter image description here

enter image description here

enter image description here

enter image description here

关于terraform-provider-azure - Azure Terraform Web App专用端点虚拟网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69827443/

相关文章:

azure - azurerm_linux_virtual_machine 中的云初始化脚本中的错误处理

azure - 在 Terraform 中创建和链接 Azure 资源

azure - BizSpark 团队成员的虚拟网络

azure - 如何使用 ARM 模板为 Azure 资源创建事件日志诊断设置

azure - 如何使用虚拟网络保护从应用服务到Azure Sql数据库的访问?

azure - 从 Azure Devops 托管代理访问私有(private)存储帐户

Azure 站点到站点连接和 SQL IaaS

azure - 如何在 Azure 中使用 Terraform 创建多个安全规则?

azure - 地形 : Create an Azure Policy Initiative with multiple custom Azure Policies with Parameters

azure - Terraform 和 Azure : Unable to provision Storage Account